Захват 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


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

Сценарий выполняется после нажатия на внутренней линии символа "1". Открывает страницу https://oktell.ru в браузере на компьютере сотрудника. Ключ сотрудника передается на вход сценария.


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


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

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


Компонент "Открыть веб-страницу". Открывает указанную веб-страницу в браузере по умолчанию на компьютере пользователя.

  • Ключ пользователя - переменная GUID пользователя
  • Файл - строка "https://oktell.ru"
  • Путь - Абсолютный
  • Режим запуска - С помощью оболочки


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


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

Сценарий выполняется после нажатия символа "2" на внутренней линии. Прикрепляет текущий звонок к задаче. Напомним, что прикрепление звонка к задаче работает только во время действующего разговора, при наличии данного оператора в режиме Call-центр и активной задаче. Если одно из этих условий не выполнено, то сценарий не сработает. Ключ сотрудника, для которого нужно прикрепить звонок, передается на вход сценария.


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


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

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


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

  • Действие - Установить
  • Тип объекта - Задача
  • Задача - выберите задачу Call-центра
  • Свойство/действие - Привязать к звонку оператора
  • Значение - переменная GUID пользователя


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


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

Ранее мы подробно рассмотрели перехват DTMF во время входящего звонка. В данном параграфе рассматривается перехват DTMF во время исходящего звонка. Для реализации функционала потребуется модифицировать сценарий исходящей маршрутизации.

Поскольку этот сценарий запускается на внутренней линии, изначально мы сможем перехватывать только сигналы с внутренних линий. Как говорилось ранее, нам для перехвата DTMF нужно запустить IVR сценарий на требуемой линии. Вы можете воспользоваться указанным выше алгоритмом через создание конференции, однако мы рассмотрим альтернативный способ считывания сигналов непосредственно из БД. Для работы данного сценария необходимо установить флажок "Сохранять в БД все получаемые по внешним/внутренним линиям DTMF-символы" в модуле Администрирование/Общие настройки/Управление базами данных.

В сценарии исходящей маршрутизации после успешного соединения нужно установить запуск служебного сценария для получения DTMF из БД и IVR сценарий для захвата сигналов с данной линии. Также чтобы получать DTMF с нужной внешней линии, необходимо сохранить ее идентификатор в компоненте "ВНЕШНИЕ".


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


Компонент "ВНЕШНИЕ". В компоненте необходимо сохранить идентификатор выбранной линии в сессионную переменную "Line" (строковая)

  • Идентификатор выбранной линии - сессионная переменная "Line" (строковая)


Компонент "Получение DTMF из БД". Запускает сценарий для мониторинга таблицы a_stat_dtmf

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


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

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


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


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

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