Представляем перевод документации модуля callcenter. Напоминаем, что в разделе http://garantum.ru/content/category/8-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>

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