Сконфигурировал колл центр на базе FreeSWITCH, файл конфигурации "callcenter.conf.xml" следующий:
Код:
<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>
<!-- Очередь вызовов '200' -->
<queue name="200@internal">
<param name="strategy" value="round-robin"/> <!-- Стратегия распределения вызовов (ring-all - звонить всем, longest-idle-agent - звонить наиболее простаивавшему, round-robin - циклический обзвон с запоминанием последнего попробованного, top-down - звонить агентам в порядке их перечисления в очереди, agent-with-least-talk-time - звонить агенту с наименьшим временем разговора, agent-with-fewest-calls - звонить агенту с наименьшим числом поступивших вызовов, sequentially-by-agent-order - звонить агентам в порядки их перечисления в очереди, random - звонить случайно выбранному агенту) -->
<param name="moh-sound" value="$${hold_music}"/> <!-- Музыка во время ожидания соединения (можно указать звуковой файл, класс мазыки в формате $${hold_nusic} или тоновый сигнал в формате "${ru-ring};loops=-1") -->
<!-- <param name="record-template" value="$${base_dir}/recordings/${strftime(%Y-%m-%d-%H-%M-%S)}.${destination_number}.${caller_id_number}.${uuid}.wav"/>-->
<param name="time-base-score" value="system"/> <!-- Источник времени ожидания абонента (queue - учитывается время ожидания в текущей очереди, system - учитывается полное время ожидания в системе FreeSWITCH) -->
<param name="max-wait-time" value="30"/> <!-- Максимальное время ожидания соединения абонента с агентом в очереди, сек (0 - без ограничения) -->
<param name="max-wait-time-with-no-agent" value="30"/> <!-- Максимальное время ожидания в очереди без агентов, сек (0 - без ограничения) -->
<param name="max-wait-time-with-no-agent-time-reached" value="5"/><!-- Максимальное время ожидания в очереди без агентов после истечения 'max-wait-time-with-no-agent' хотя бы для одного абонента, мин (5*) -->
<param name="tier-rules-apply" value="false"/> <!-- Использование уровней обработки (true/false - уровни обработки игнорируются и для вызова используются все агенты всех уровней) -->
<param name="tier-rule-wait-second" value="300"/> <!-- Максимальное время ожидания соединения абонента в одном уровне, сек -->
<param name="tier-rule-wait-multiply-level" value="true"/> <!-- Множитель макс. время ожидания соединения абонента в одном уровне (true - макс. время ожидания в уровне умножается на номер уровня/false - множитель не используется) -->
<param name="tier-rule-no-agent-no-wait" value="false"/> <!-- Пропускать ожидание соединения в уровнях, в которых не агентов (true/false) -->
<param name="abandoned-resume-allowed" value="false"/> <!-- Восстановление позиции абонента в очереди после его выхода из очереди и возвращения обратно (true/false) -->
<param name="discard-abandoned-after" value="60"/> <!-- Таймаут после выхода абонента из очереди по которому он уже не может в неё вернуться с сохранением позиции в очереди вызовов (true/false) -->
</queue>
</queues>
<!-- WARNING: Configuration of XML Agents will be updated into the DB upon restart. -->
<!-- WARNING: Configuration of XML Tiers will reset the level and position if those were supplied. -->
<!-- WARNING: Agents and Tiers XML config shouldn't be used in a multi FS shared DB setup (Not currently supported anyway) -->
<!-- Конфигурация агентов колл-центра -->
<!--
Для каждого агента указаны следующие параметры:
name - имя агента
type - тип агента (callback - вызов агента с использованием контактной информации поля 'contact'/ uuid-standby - соединение напрямую с использованием uuid агента)
contact - контактная информация для приложения 'bridge' для вызова агента
status - выставляемый текущий статус агента ('Logged Out' - агент не заhегестрирован / Available - агент зарегестрирован / 'On Break' - агент зарегестрирован, но находится на перерыве)
state - состояние зарегестрированного агента в системе:
'Idle' - простой, вызовы не распределяются;
'Waiting' - готов к приёму вызовов;
'Receiving' - выполняется вызов агента;
'In a queue call' - занят обработкой вызова;
max-no-answer - число подряд идущих неответов по которым агент автоматически убирается на перерыв (выставляется статус 'On Break')
wrap-up-time - интервал от окончания обработки вызова до поступления следующего, сек
reject-delay-time - если при поступлении вызова агенту его аппарат отклоняет вызов, то перед распределением ему следующего вызова выдерживается этот таймаут, сек
busy-delay-time - если при поступлении вызова агенту его аппарат возвращает состояние "занято", то перед распределением ему следующего вызова выдерживается этот таймаут, сек
-->
<agents>
<agent name="1007@internal" type="callback" contact="[call_timeout=10]user/1007@$${domain}" status="Available" max-no-answer="5" wrap-up-time="3" reject-delay-time="10" busy-delay-time="10" />
<agent name="1008@internal" type="callback" contact="[call_timeout=10]user/1008@$${domain}" status="Available" max-no-answer="5" wrap-up-time="3" reject-delay-time="10" busy-delay-time="10" />
</agents>
<!-- Конфигурация уровней обработки колл-центра -->
<!--
В очередях вызовов колл-центра может быть несколько уровней
обработки. При попадании вызова в очередь он вначале ожидает
соединения в первом уровне, потом по таймауту переходит во
второй, и т.д. Соответственно агенты могут находится в тех
или иных уровнях обработки.
-->
<tiers>
<!-- If no level or position is provided, they will default to 1. You should do this to keep db value on restart. -->
<tier agent="1007@default" queue="200@internal" level="1" position="1"/>
<tier agent="1008@default" queue="200@internal" level="1" position="1"/>
</tiers>
</configuration>
Зарегестрировал два sip-пользователя 1007 и 1008. Из диалплана вызов попадает в этот колл-центр:
Код:
<extension name='Call Center 200'>
<condition field='destination_number' expression='^7200$'>
<action application='answer'/>
<!-- Вход в колл-центр -->
<action application='callcenter' data='200@internal'/>
<action application='hangup'/>
</condition>
</extension>
Через пару секунд вызов обрывается и завершается, даже не "висит" в очереди. Возможно агентов регестрировать как-то ещё дополнительно нужно. Такое создаётся ощущение что модуль не доработанный ещё. Может кто сталкивался подскажет что ещё нужно, заранее благодарю. А так, идея многоуровневой очереди понравилась