Захват DTMF-сигналов во время разговора

Материал из Oktell
Перейти к: навигация, поиск

Наверх

Введение

Задача: Определять во время разговора введенные DTMF-символы на внешней и внутренней линии. В зависимости от линии и введенного на ней символа запускать различные процессы на сервере и клиентском приложении сотрудника. Например, при нажатии сотрудником на 1 — открыть в браузере сайт oktell.ru, при нажатии на 2 — привязать звонок к задаче Call-центра.

На самом деле Oktell уже имеет похожие возможности в виде служебных номеров флеша и управления конференцией. Набрав во время разговора эти номера, система выполняет определенные действия. Например, нажав служебный номер флеш — система ставит абонента на удержание. Для управления конференцией существуют даже комбинации, которые добавляют или удаляют пользователя из конференции. К сожалению, на момент написания статьи в интерфейсе системы нельзя добавить свой служебный номер для выполнения особых действий.

Однако, проблема решается с помощью самостоятельного перехвата DTMF-сигналов во время разговора. В системе есть возможность с помощью сценариев получить введенные символы как с внешней, так и с внутренней линии. В процессе настройки сценариев вы сами определяете какие действия должна выполнить система при нажатии того или иного символа (или их комбинации). Таким образом, в Oktell можно реализовать неограниченное количество "служебных комбинаций".

Функционал полезен в случаях, когда операторы часто проделывают одни и те же действия: добавляют текущий контакт в CRM-систему, открывают карточку клиента в браузере. С помощью определенных символов сотрудник может пометить клиента, чтобы система, к примеру, отправила ему SMS после разговора. Введенные символы на внешней стороне применяются для ввода скрытых данных, например, пароля во время разговора. Это может быть использовано для подтверждения операций в банковской сфере, не сообщая оператору личной информации.


Основная идея

Чтобы перехватывать DTMF-сигналы с любой линии, необходимо в IVR-сценарии после успешного переключения зациклить компонент Ввод значения. В таком случае на линии параллельно с разговором будет работать IVR сценарий, фиксирующий все введенные символы.


Перехват DTMF-001.png


Дополнительно все введенные DTMF сохраняются в таблице [oktell]..[a_stat_dtmf]. Для этого необходимо включить соответствующие настройки в разделе Администрирование/Управление базами данных — Сохранять в БД все получаемые по внешним/внутренним линиям DTMF-символы. Для считывания DTMF потребуется отдельный служебный сценарий, который будет циклично мониторить таблицу на предмет ввода новых символов.


Перехват DTMF-002.png


Главный IVR сценарий

Поскольку в главный IVR сценарий попадает внешняя линия, установленный "Ввод значения" будет принимать DTMF только на этой внешней линии. В рамках задачи необходимо принимать DTMF и с внутренней линии, следовательно нужно дозвониться до нее и также запустить на ней IVR сценарий. Такая операция реализуется через дозвон и конференцию с моделью поведению "Преобразовать в коммутацию".


Перехват DTMF-003.png


Компонент "Начальные параметры". Определяет параметры клиента и сохраняет в переменные:

  • сессионной переменной phone (строковая) присваивается внутренний номер, на который происходит переключение. В примере, строка "900".
  • сессионной переменной key (строковая) присваивается значение выражения RANDOM(999999). Переменная используется в качестве ключа конференции.
  • сессионной переменной CallerId (строковая) присваивается значение функции Номер абонента (CallerId). Переменная хранит номер абонента.


Перехват DTMF-005.png


Компонент "В конференцию". Отправляет клиента в конференцию с моделью поведения "Преобразовать в коммутацию". Как только в эту коммутацию присоединится второй участник она преобразуется в обычный разговор. Ключ конференции предварительно генерируется случайным образом.

  • Ключ конференции — переменная key
  • Создать, если отсутствует - да
  • Расширенная настройка — да
  • Модель поведения - Преобразовать в коммутацию


Компонент "На дозвон". Запускает сценарий дозвона до внутреннего номера с последующим добавлением в конференцию. Все сессионные переменные будут переданы в этот сценарий автоматически.

  • Тип запуска — асинхронный служебный
  • Сценарий - Перехват DTMF (служебный сценарий дозвона)


Компонент "Перехват DTMF". Запускает сценарий для считывания DTMF-сигналов с данной внешней линии. Параметр запуска 0 означает, что сценарий запускается для внешней линии (рассматривается ниже).

  • Тип запуска - вложенный
  • Сценарий - Перехват DTMF (IVR сценарий перехвата DTMF)
  • Параметр запуска - строка "0"


Перехват DTMF-004.png


Служебный сценарий дозвона

Сценарий дозванивается до внутреннего пользователя и запускает на его линии IVR сценарий добавления в конференцию. В сценарии не предусмотрен случай, когда внутренний абонент не берет трубку.


Перехват DTMF-006.png


Компонент "Дозвон". Все используемые сессионные переменные должны строго иметь такие же наименования, как и в главном сценарии.

  • Номер/команда - сессионная переменная phone (строковая)
  • Среда - внутренний номерной план
  • Обслуживание - IVR
  • Сценарий IVR - Перехват DTMF (IVR сценарий входа в конференцию)
  • Параметр запуска - сессионная переменная key (строковая)
  • CallerId - сессионная переменная CallerId (строковая)


IVR сценарий входа в конференцию

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


Перехват DTMF-007.png


Компонент "Старт". На вход сценария передается номер конференции, в которую следует добавить внутреннего сотрудника. Параметр запуска сохраняется в переменную key.

  • Параметр запуска - переменная key (строковая)


Компонент "В конференцию". Добавляет сотрудника в конференцию с указанным ключом.

  • Ключ конференции — переменная key
  • Создать, если отсутствует - да
  • Расширенная настройка — да
  • Модель поведения - Преобразовать в коммутацию

Компонент "Перехват DTMF". Запускает сценарий для считывания DTMF-сигналов с текущей внутренней линии. Параметр запуска 1 означает, что сценарий запускается для внутренней линии (рассматривается ниже).

  • Тип запуска - вложенный
  • Сценарий - Перехват DTMF (IVR сценарий перехвата DTMF)
  • Параметр запуска - строка "1"


Перехват DTMF-008.png


IVR сценарий перехвата DTMF

Основной сценарий для захвата DTMF и выполнения служебных действий. Главная идея — зациклить компонент "Ввод значения", анализируя введенные значения. Напомним, что этот сценарий — единый для внешних и внутренних линий, поэтому на старт передавался флаг, поясняющий тип линии: 0 - внешняя линия, 1 - внутренняя. Такое разделение помогает реализовать различный функционал для сотрудников и клиентов.


Перехват DTMF-009.png


Компонент "Старт". На вход сценария передается тип линии. Компонент сохраняет параметр запуска в переменную startParam.

  • Параметр запуска - переменная startParam (строковая)


Компонент "Внутренняя линия?". Определяет тип линии и направляет сценарий на соответствующую ветку.

  • Аргумент 1 — переменная startParam
  • Аргумент 2 — строка 1
  • Тип сравнения — "="
  • Переход, если правда — на компонент "Ввод с внутренней линии"
  • Переход, если ложь — на компонент "Ввод с внешней линии"


Компонент "Ввод с внутренней линии". Ожидает ввода одного символа с внутренней линии, затем сохраняет введенный символ в переменную DTMF. Переход к анализу происходит только если символ введен.

  • Буфер для DTMF - переменная DTMF (строковая)
  • Очистить буфер - Да
  • Макс время, с - 20
  • Количество символов - 1
  • Переход - на компонент "Ув2"
  • Переход, таймаут - на компонент "->"


Перехват DTMF-010.png


Компонент "Ув2". Отладочное уведомление для вывода захваченного символа

  • Текст — выражение ScriptFunc( 'Имя пользователя' )+' набрал символ '+[DTMF]
  • Способ оповещения — Всплывающее уведомление
  • Ключ получателя — введите внутренний номер вашего пользователя


Компонент "Определение символа". Анализирует введенный символ — по нажатию на 1 у сотрудника должна открыться веб-страница в браузере, а по нажатию на 2 звонок должен прикрепиться к задаче.

  • Аргумент - переменная DTMF
  • Значения -
1 - на компонент "Ув3"
2 - на компонент "Ув4"
  • Переход, прочее — на компонент "->"


Перехват DTMF-011.png


Компоненты "Ув3 и Ув4". Отладочные уведомления о выбранных действиях.


Компонент "Действие 1". Запускает сценарий для открытия страницы Oktell.ru в браузере. На вход сценария передается идентификатор оператора, для которого нужно это выполнить.

  • Тип запуска - Асинхронный служебный
  • Сценарий - Перехват DTMF (Служебный сценарий для открытия сайта)
  • Параметр запуска - функция "Guid-идентификатор пользователя".


Компонент "Действие 2". Запускает сценарий для привязки звонка к задаче. На вход сценария передается идентификатор оператора, для которого нужно это выполнить.

  • Тип запуска - Асинхронный служебный
  • Сценарий - Перехват DTMF (Служебный сценарий для привязки звонка к задаче)
  • Параметр запуска - функция "Guid-идентификатор пользователя".


Перехват DTMF-012.png


Компонент "->". Не имеет функционального предназначения, используется для связки компонентов.

  • Время задержки, мс - 0


Компонент "Ввод с внешней линии". Аналогичные действия выполняются для внешней линии. Компонент считывает DTMF, введенные на внешней линии.

  • Буфер для DTMF - переменная DTMF (строковая)
  • Очистить буфер - Да
  • Макс время, с - 20
  • Количество символов - 1
  • Переход - на компонент "Ув1"
  • Переход, таймаут - на компонент "->"


Компонент "Ув1". Отладочное уведомление для вывода захваченного символа. После компонента вы можете аналогично реализовать функционал для внешних линий.

  • Текст — выражение 'Линия '+ScriptFunc( 'Номер линии' )+' набрал символ '+[DTMF]
  • Способ оповещения — Всплывающее уведомление
  • Ключ получателя — введите внутренний номер вашего пользователя


Перехват DTMF-013.png


Служебный сценарий для открытия сайта

Перехват DTMF-014.png


Служебный сценарий для привязки звонка к задаче

Перехват DTMF-015.png


IVR сценарий исходящей маршрутизации

Служебный сценарий для получения DTMF из БД

Установка готовых сценариев в систему