mod_callcenter

Представляем перевод документации модуля callcenter. Напоминаем, что в разделе FREESWITCH будут собраны переводы статей о freeswitch

Первая часть статьи по настройке модуля.

mod_callcenter – приложение для создания очереди входящих звонков, которое может использоваться для нужд центра обработки вызовов.

Применение в диалпане этого модуля обеспечивает функциональность центра обработки вызовов, распределяя вызовы по агентам с использованием различных сценариев и правил. Для распределения входящих вызовов используется система на основе баллов. Рейтинг звонящего увеличивается на 1 балл за каждую секунду ожидания. Вы можете добавить базовый рейтинг, чтобы помочь подвинуть звонящего к началу очереди или просто уменьшить время ожидания в ней. В приложении callcenter используется многоуровневая система для возможности при необходимости создания различных «приоритетов» для агентов.

Более простое альтернативное средство для обработки очередей входящих вызовов — с помощью mod_fifo, системы организации очереди по принципу first-in, first-out (FIFO).

Конфигурация

Настройки

odbc-dsn

Callcenter будет использовать предоставленные базы данных ODBC вместо стандартного варианта, заключающегося в использовании внутренней базы данных SQLite.

dbname

Используется для указания другого имени или пути с именем для базы данных SQLite. Помещается в оперативной памяти для улучшения производительности.

Настройки агента

type

В настоящее время поддерживается 2 типа: 'callback' (обратный вызов) и 'uuid-standby' (ожидание). Тип callback будет пытаться дозвониться до агента, используя указанные в полях контактов значения. Тип uuid-standby будет пытаться соединить звонок непосредственно с помощью идентификатора uuid агента.

contact

Здесь может быть помещена простая строка набора, например: user/1000@default

status

Определите текущее состояние агента. Проверьте Таблицу статусов агентов для получения дополнительной информации.

max-no-answer

Если агент не отвечает на вызов заданное здесь количество раз, его статус автоматически меняется на On Break (Прервано).

wrap-up-time

Сколько времени нужно подождать, чтобы позволить агенту завершить запись данных или иные задачи, прежде чем поместить его обратно в доступную очередь для приема следующего вызова.

reject-delay-time

Если агент нажимает кнопку сброса на своем телефоне, надо подождать в течение определенного этим параметром промежутка времени.

busy-delay-time

Если у агента установлен статус Не беспокоить, надо подождать в течение определенного этим параметром времени, прежде чем снова его набрать.

no-answer-delay-time

Если агент не отвечает, необходимо подождать в течение определенного этим параметром времени, прежде чем снова ему позвонить.

Опции очереди

strategy

Стратегия определяет, как звонки распределяются в очереди. Таблицу с различными стратегиями можно посмотреть ниже.

moh-sound

Система будет воспроизводить для входящих абонентов все, что вы укажете. Вы можете использовать любой тип входных данных, поддерживаемый системой воспроизведения FreeSWITCH:

  1. Прямой путь к файлу .wav – будет воспроизводиться по кругу до бесконечности.
  2. Локальный поток, например (local_stream://moh) или используйте $${hold_music}, как указано в конфигурации по умолчанию.
  3. Система фраз FreeSWITCH, например, (phrase:my-special-phrase). (Я использую её для последовательного воспроизведения нескольких подсказок.)
  4. Генерирование тонов, как при звонке, например, (tone_stream://${us-ring};loops=-1).

record-template

Шаблон записи record-template используется для сохранения записей в любом месте файловой системы на ваш выбор. Этот параметр нередко начинается с "$${base_dir}/recordings/". Какой бы каталог вы ни выбрали, убедитесь, что он уже существует и что FreeSWITCH имеет необходимые для записи в него разрешения.

time-base-score

Может стоять значение 'queue' или 'system' (queue является дефолтным). Если установлено значение system, к базовому рейтингу абонента будет добавляться количество секунд, прошедшее с момента изначального ответа на звонок (или его поступления в систему). Повышение рейтинга абонента позволяет ему получить приоритет над другими вызовами, которые могут находиться в очереди дольше, но не попасть в систему. Если установлено значение queue, будет осуществлено действие по умолчанию, т. е. ничей рейтинг в очереди не увеличивается (независимо от общей продолжительности звонка).

tier-rules-apply

Может иметь значение True или False. Определяет, должны ли применяться следующие правила для уровней, когда вызывающий абонент продвигается по ним в очереди. Если стоит значение False, будут использоваться все уровни без ожидания.

tier-rule-wait-second

Время в секундах, в течение которого абонент должен ждать перед продвижением на следующий уровень. Умножается на номер уровня, если в tier-rule-wait-multiply-level установлено значение True. Если tier-rule-wait-multiply-level имеет значение false, то после окончания tier-rule-wait-second, все уровни становятся открытыми для звонков в определённом для них порядке и никакого продвижения (в плане ожидания) на следующий уровень не происходит.

tier-rule-wait-multiply-level

Может иметь значение True или False. Если значение False, то после окончания tier-rule-wait-second, звонящий становится доступным поочерёдно для всех уровней. Если значение True, то время tier-rule-wait-second будет умножено на номер уровня и вызывающему придется ожидать на каждом из уровней в течение tier-rule-wait-second, прежде чем перейти на следующий уровень.

tier-rule-no-agent-no-wait

Может иметь значение True или False. При значении True абонент будет пропускать уровни, не имеющие доступных агентов. В противном случае ему нужно будет ожидать, прежде чем продвинуться дальше. Агенты должны быть отключены, чтобы считаться недоступными.

discard-abandoned-after

Количество секунд до полного удаления неактивного члена из очереди. Если используется в сочетании с abandoned-resume-allowed, то абонент может вернуться в очередь и возобновить свою прежнюю позицию.

abandoned-resume-allowed

Может иметь значение True или False. Если установлено значение True, покинувший очередь абонент сможет войти снова и возобновить свою прежнюю позицию в этой очереди. Для того, чтобы сохранить свою позицию в очереди, он не должен покидать её на более длительное время, чем определено параметром 'discard-abandoned-after'.

max-wait-time

Дефолтное значение для отключения равно 0. Значение задаётся в секундах и определяет задержку перед выходом из приложения callcenter, если участник не получает ответа от агента. Может использоваться для отправки вызовов на голосовую почту, если ожидание длится слишком долго.

max-wait-time-with-no-agent

Дефолтное значение для отключения равно 0. Значение задаётся в секундах и определяет промежуток времени, в течение которого очередь должна оставаться пустой (без подключенных агентов) прежде чем будут отключены все участники. Этот принцип обеспечивает защиту от случаев, когда все ожидающие участники выпадают из очереди при случайном отключении всех агентов.

max-wait-time-with-no-agent-time-reached

По умолчанию 5. Значение задаётся в секундах и определяет продолжительность времени после того, как достигнуто значение max-wait-time-with-no-agent для отказа новым абонентам. Это позволяет прервать соединение, если ни один из агентов не подключается в течение более 5 секунд, однако новый абонент после истечения 5 секунд может получить меньший лимит.

callcenter.conf.xml example

<configuration name="callcenter.conf" description="CallCenter">

  <settings>
      <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
      <!--<param name="dbname" value="/dev/shm/callcenter.db"/>-->
  </settings>

  <queues>
    <queue name="sales@default">
      <param name="strategy" value="agent-with-least-talk-time"/>
      <param name="moh-sound" value="$${hold_music}"/>
      <!--<param name="record-template" 
     value="$${base_dir}/recordings/sales/${strftime(%Y-%m-%d-%H-%M-%S)}.${destination_number}.${caller_id_number}.${uuid}.wav"/>-->
      <param name="time-base-score" value="queue"/>
      <param name="tier-rules-apply" value="false"/>
      <param name="tier-rule-wait-second" value="300"/>
      <param name="tier-rule-wait-multiply-level" value="true"/>
      <param name="tier-rule-no-agent-no-wait" value="false"/>
      <param name="discard-abandoned-after" value="14400"/>
      <param name="max-wait-time" value="0"/>
      <param name="max-wait-time-with-no-agent" value="120"/>

    </queue>
    <queue name="support@default">
      <param name="strategy" value="longest-idle-agent"/>
      <param name="moh-sound" value="$${hold_music}"/>
      <!--<param name="record-template" 
       value="$${base_dir}/recordings/support/${strftime(%Y-%m-%d-%H-%M-%S)}.${destination_number}.${caller_id_number}.${uuid}.wav"/>-->
      <param name="time-base-score" value="system"/>
      <param name="tier-rules-apply" value="false"/>
      <param name="tier-rule-wait-second" value="300"/>
      <param name="tier-rule-wait-multiply-level" value="true"/>
      <param name="tier-rule-no-agent-no-wait" value="false"/>
      <param name="discard-abandoned-after" value="60"/>
      <param name="abandoned-resume-allowed" value="false"/>
      <param name="max-wait-time" value="0"/>
      <param name="max-wait-time-with-no-agent" value="120"/>
    </queue>
  </queues>

<!--Предупреждение: Конфигурации XML агентов в БД будет обновлена после перезапуска. -->
<!--Предупреждение: В конфигурации уровней XML будут сброшены уровни и позиции, если они были заданы. -->
<!--Предупреждение: XML-конфиг агентов и уровней не должен использоваться для настройки общих баз данных нескольких FS. -->

  <agents>
    <agent name="1000@default" type="callback" contact="[call_timeout=10]user/1000@default" 
    status="Available" max-no-answer="3" wrap-up-time="10" reject-delay-time="10" busy-delay-time="60" />
    <!-- Если вы хотели бы установить ID абонента, по любой причине, обратите внимание на блок кода ниже. -->
    <agent name="1001@default" type="callback" contact="[origination_caller_id_name='Queue Caller',call_timeout=10]user/1001@default"
    status="Available" max-no-answer="3" wrap-up-time="10" reject-delay-time="10" busy-delay-time="60" />
  </agents>

  <tiers>
    <!-- Если уровень или позиция не установлены, значение по умолчанию будет 1. Вы должны сделать это, чтобы сохранить значения в базе данных при перезагрузке. -->
    <!-- агент 1000 находится как в очереди продаж, так и поддержки -->
    <tier agent="1000@default" queue="sales@default" level="1" position="1"/>
    <tier agent="1000@default" queue="support@default" level="1" position="1"/>
    <!-- агент 1001 находится только в очереди поддержки -->
    <tier agent="1001@default" queue="support@default" level="1" position="1"/>
  </tiers>

</configuration>

© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку на источник.