Описание модуля CallCenter (Часть вторая)
Представляем перевод документации модуля callcenter. Напоминаем, что в разделе FREESWITCH будут собраны переводы статей о freeswitch.
Вторая часть
Примеры диалплана
Поместить звонящего в очередь
<action application="callcenter" data="support@default"/>
Время дня / пример голосовой почты
<condition field="destination_number" expression="^3000$" break="on-false"/>
<!-- С понедельника по пятницу, с 9 утра до 5 вечера -->
<condition wday="2-6" time-of-day="09:00-17:00" break="on-true">
<!-- Ограничение в 3 звонка на этот номер назначения за 1 секунду, в противном случае выдаётся сообщение о превышении -->
<action application="limit" data="hash inbound ${destination_number} 3/1 !NORMAL_CIRCUIT_CONGESTION"/>
<!-- Воспроизвести сообщение перед входом в очередь. -->
<action application="playback" data="$${sounds_dir}/greeting.wav"/>
<!-- Задержка после успешного соединения с агентом -->
<action application="set" data="hangup_after_bridge=true"/>
<!-- Абонент из очереди -->
<action application="callcenter" data="queue@default"/>
<!-- Если ни одним агентом не было достигнуто и использовано значение max-wait-time — отослать на общую голосовую почту -->
<action application="playback" data="$${sounds_dir}/queue_voicemail.wav"/>
<action application="answer"/>
<action application="set" data="skip_greeting=true"/>
<action application="set" data="skip_instructions=true"/>
<action application="voicemail" data="default voicemail 2001"/>
<action application="hangup"/>
</condition>
<condition>
<action application="limit" data="hash inbound ${destination_number} 3/1 !NORMAL_CIRCUIT_CONGESTION"/>
<!-- В нерабочее время — воспроизвести сообщение и отправить на общую голосовую почту -->
<action application="playback" data="$${sounds_dir}/tod_voicemail.wav"/>
<action application="answer"/>
<action application="set" data="skip_greeting=true"/>
<action application="set" data="skip_instructions=true"/>
<action application="voicemail" data="default voicemail 2001"/>
<action application="hangup"/>
</condition>
Очереди (Queues)
Очереди могут быть настроены только в конфигурации XML. Они загружаются только один раз.
Distribution Strategy
Тип - Строка
ring-all
Звонит всем агентам одновременно.
longest-idle-agent
Звонит агенту, который простаивал дольше всего, принимая во внимание уровень.
round-robin
Звонит агенту, находящемуся на очереди, запомнив последнего агента, которого пытались вызвать.
top-down
Звонит стоящим в очереди агентам по порядку, начиная с 1.
agent-with-least-talk-time
Звонит агенту с наименьшим временем разговора.
agent-with-fewest-calls
Звонит агенту с наименьшим количеством звонков.
sequentially-by-agent-order
Звонит агентам последовательно, учитывая уровень и порядок расположения.
random
Звонит агентам в случайном порядке
time-base-score
Когда абонент попадает в очередь, мы можем добавить к его базовому рейтингу общее количество секунд, которое он провёл в системе. Это позволяет вызывающему абоненту получить преимущество перед другими абонентами с учётом времени, проведённого в ожидании в любом другом месте. Параметр time-base-score может быть установлен как 'queue' (базовый рейтинг учитывает только время, в течение которого абонент находится в этой очереди) или 'system' (базовый рейтинг учитывает общее время вызова).
Агенты (Agents)
Агенты имеют статусы (Status) и состояния (States). Status — это общее состояние агента. Статусы не обновляются системой автоматически, так что они должны устанавливаться или изменяться в случае необходимости. States — это конкретное состояние агента касательно вызовов в очереди. States являются динамическими и обновляются системой в зависимости от продвижения вызова у агента. Причина для разделения этих двух понятий — агент может выйти или изменить статус на 'Logged Out' (Вышел), не затрагивая текущее состояние вызова, возможно установленное на 'In a queue call' (В очереди вызовов).
Если агент изменяет свой статус на Logged Out, любые активные попытки обратного вызова будут остановлены и очередь будет пытаться соединить абонента с другим агентом.
Статус применяется только после следующего вызова. Так, например, если вы измените статус находящегося в вызове пользователя с Available на Available (On Demand), то после завершения текущего звонка он сможет получить еще один звонок.
Статусы и состояния агентов могут быть такими:
Статус (Status) агента: Тип - Строка
Logged Out Не может принимать звонки из очереди. time-base-score Готов принимать звонки из очереди. Available (On Demand) После окончания вызова устанавливается состояние 'Idle' (не устанавливается автоматически состояние 'Waiting'). On Break Находится в системе, но не принимает вызовы из очереди.
Состояние (State) агента: Тип - Строка
Idle Ничего не делает, никакие вызовы не совершаются. Waiting Готов принимать звонки. Receiving Агент в настоящее время принимает вызов из очереди. In a queue call В настоящее время занимается вызовом из очереди.
Type - Callback
Available
Когда агент находится в состоянии 'Waiting', звонки будут направлены на него. Всякий раз, когда агент завершает один из этих вызовов, его состояние возвращается обратно на 'Waiting'.
Available (On Demand)
Это то же самое, что и обычный статус 'Available', кроме одного – при завершении звонка агент устанавливается в состояние 'Idle'. Это означает, что агент не будет принимать дополнительные вызовы, пока его состояние не будет изменено на 'Waiting'.
uuid-standby
Используется, когда агенты звонят в систему и ждут, чтобы принять звонок.
Простой диалплан для демонстрации этих функций
<extension>
<condition field="destination_number" expression="^(4099)$">
<action application="set" data="transfer_after_bridge=4099"/> <!-- Удалить это, если вы просто хотите получить один вызов
<action application="sleep" data="300"/> <!-- Небольшая задержка для безопасности -->
<action application="set" data="res=${callcenter_config(agent set uuid ${caller_id_number}@${domain_name} '${uuid}')}" />
<action application="set" data="res=${callcenter_config(agent set type ${caller_id_number}@${domain_name} 'uuid-standby')}" />
<action application="set" data="res=${callcenter_config(agent set status ${caller_id_number}@${domain_name} 'Available (On Demand)')}" />
<action application="set" data="res=${callcenter_config(agent set state ${caller_id_number}@${domain_name} 'Waiting')}" />
<action application="set" data="cc_warning_tone=tone_stream://%(200,0,500,600,700)"/>
<action application="answer" />
<action application="playback" data="$${hold_music}"/>
</condition>
</extension>
No Answer
Если вы определите параметр max-no-answer для агента, и этот агент не ответит на указанное количество звонков, то его статус будет изменён на 'On Break'.
Rejecting Calls
Отклонение вызова действует не так же, как 'no-answer'. Возможно добавление задержки перед вызовом агента, только что отклонившего вызов из очереди, через установку 'reject_delay_time' для этого агента.
Do not disturb
Агенту, у которого установлено "do not disturb" можно добавить задержку перед поступлением следующего вызова, используя параметр 'busy_delay_time'.
Примеры диалплана
Примеры входа и выход аганта
Адаптируйте следующий диалплан для удовлетворения ваших потребностей. Например, вы можете изменить контактную информацию, если вы используете её для входа с разных рабочих станций или с номера в PSTN.
<extension name="agent_login">
<condition field="destination_number" expression="^agent-login$">
<action application="set" data="res=${callcenter_config(agent set status ${caller_id_number}@${domain_name} 'Available')}" />
<action application="answer" data=""/>
<action application="sleep" data="500"/>
<action application="playback" data="ivr/ivr-you_are_now_logged_in.wav"/>
<action application="hangup" data=""/>
</condition>
</extension>
<extension name="agent_logoff">
<condition field="destination_number" expression="^agent-logoff$">
<action application="set" data="res=${callcenter_config(agent set status ${caller_id_number}@${domain_name} 'Logged Out')}" />
<action application="answer" data=""/>
<action application="sleep" data="500"/>
<action application="playback" data="ivr/ivr-you_are_now_logged_out.wav"/>
<action application="hangup" data=""/>
</condition>
</extension>
Zero-out for voicemail
<extension name="callcenter">
...
<action application="bind_digit_action" data="inqueue,0,exec:transfer,1000 XML default,aleg,self"/>
<action application="digit_action_set_realm" data="inqueue"/>
<action application="set" data="bridge_pre_execute_aleg_app=clear_digit_action"/>
<action application="set" data="bridge_pre_execute_aleg_data=all"/>
...
<action application="callcenter" data="example> />
</extension>
© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку на источник.