Определение момента переключения на сотрудника во время перевода звонка

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

Наверх


Введение

Представим ситуацию, когда абонент А просит оператора Б переключить его на другого сотрудника В. Например, клиент, разговаривая с менеджером по продажам, хочет обсудить технический вопрос с инженерами технической поддержки. Менеджер по продажам может переключить абонента сразу напрямую (выполнить Transfer-переключение, неконсультативный перевод) или предварительно предупредить инженера о переводе (консультативный перевод). В каждом из этих случаев стоит задача воспроизвести в коммутацию сообщение "Вы переключены на сотрудника", как только установилось успешное соединение.

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


Реализация сценария

Для определенности введем следующие понятия: А - переключаемый клиент, Б - переключающий оператор, В - пользователь, на которого переводят звонок.

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


Модификация IVR сценария переключения

Модификация сценария заключается в сборе данных о линиях, участвующих в переводе звонка и запуске служебного сценария. Модифицированный сценарий выглядит следующим образом:


Определение момент переключения-002.png


1. Правка входного каскада.


Компонент "Старт 1". Во время Sip-transfer переключения получает номер, на который выполнен перевод звонка. Во время обычного переключения на вход ничего не передается.

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


Компонент "Режим Flash". Присваивает служебной переменной "(сл) Режим Flash" - число 1. Таким образом, если оператор Б положит трубку во время дозвона до сотрудника В, клиент А заменит его и самостоятельно будет ожидать соединения.


Компонент "Параметр запуска пусто?". Определяет передался ли номер на вход сценария во время SIP-transfer переключения.

  • Аргумент 1 - переменная "Номер"
  • Аргумент 2 - пустая строка
  • Тип сравнения - "="
  • Переход, правда - компонент "НОМЕР=CallerID".
  • Переход, ложь - компонент "Пауза 1". Таким образом, номер отправляется сразу в набор.


Компоненты "Номер=CallerID", "Номер пусто?" и все компоненты блока сборки номера (выделен зеленым) не изменяются.

Обратите внимание, что ветка по таймауту компонента "+1 цифра" в сценарии переведена на компонент "Пауза 1".


2. Компонент "Определение линий". Сохраняет номер линии абонента А (переключаемого, линия буфера) и линии пользователя Б (переключающего) в соответствующие переменные.

  • Переменной "ЛинияБуфера" (строковая) присваивается значение функции "Номер линии, ожидающей во Flash-буфере".
  • Переменной "ЛинияПользователя" (строковая) присваивается значение функции "Номер линии"


3. Запуск служебного сценария. Блок определяет линию сотрудника В, записывает ее в переменную, а затем передает все три найденные линии (А, Б, В) на вход служебного сценария.

В зависимости от типа набранного номера отрабатывают те или иные компоненты. Для внешнего номера:

Компонент "ВНЕШНИЕ". Если переключают на внешний номер, то необходимо сохранить выбранную линию в переменную.

  • Номер - переменная "Номер".
  • Тип вызова - Обычный
  • Направления - выберите направления для вызова
  • Идентификатор выбранной линии - переменная "ЛинияПереключения" (строковая)
  • Коммутировать сразу - Нет, прослушивать медиа-поток".


Компонент "Линия переключения". Определяет номер линии по ее идентификатору и сохраняет его в ту же переменную.

  • Действие - Определить
  • Тип объекта - Линия
  • Ключ линии - переменная "ЛинияПереключения"
  • Функция - Номер линии
  • Значение в переменную - переменная "ЛинияПереключения"


Для внутреннего номера:

Компонент "ВНУТРЕННИЕ". Остается без изменения.

  • Назначение - Внутрь
  • Номер - переменная "Номер"
  • Тип вызова - Обычный


Компонент "Пауза 200мс". Необходим для корректной отработки переключения и записи всех значений в базу данных.

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


Компонент "Линия переключения (2)". По номеру активной линии, определяет номер скоммутированной линии. Активной линией будет линия пользователя Б, если он ожидал соединения сотрудника В и тот взял трубку. Если пользователь Б, бросил трубку, то активной линией будет линия клиента А.

  • Действие - Определить
  • Тип объекта - Линия
  • Ключ линии - функция "Номер линии"
  • Функция - Номер скоммутированной линии/конференции
  • Значение в переменную - переменная ЛинияПереключения


Компонент "XML". Для передачи трех значений в служебный сценарий, компонент объединяет их в единую XML структуру. Такой прием часто используется для передачи нескольких значений в качестве одного параметра запуска.

  • Переменной "XML" (строковая) присваивается выражение
'<bufferLine>'+[ЛинияБуфера]+'</bufferLine>'+endline+
'<switchingLine>'+[ЛинияПереключения]+'</switchingLine>'+endline+
'<userLine>'+[ЛинияПользователя]+'</userLine>'

ВНИМАНИЕ: Можно и не использовать объединение переменных в XML, а передавать их как сессионные, однако удостоверьтесь, что у вас уже не используется одноименные переменные в других пересекающихся сценариях.


Компонент "Ув1". Отладочное уведомления для вывода XML структуры.

  • Отладочный режим - Да
  • Текст - переменная "XML"
  • Адресат - выберите администрирующего пользователя.


Компонент "Запуск сценария". Запускает асинхронный сценарий, который будет проверять соединение линии клиента А и сотрудника В.

  • Тип запуска - Асинхронный служебный
  • Режим выбора сценария - Из списка
  • Сценарий - Определение момента переключения (служебный)
  • Параметр запуска - переменная "XML"


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

Служебный сценарий мониторит состояние линии А и определяет итог переключения. Сценарий выглядит следующим образом:


Определение момент переключения-001.png


Компонент "Старт 1". Получает переданную XML-структуру на вход сценария и записывает ее в переменную XML.

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


Компонент "Ув XML". Отладочное уведомление для вывода полученной XML.

  • Отладочный режим - Да
  • Текст - переменная "XML"
  • Адресат - выберите администрирующего пользователя.


Компонент "Линия буфера". Выделяет линию буфера (клиента А) из XML-структуры.

  • Документ - переменная "XML"
  • Алгоритм - Язык OQuery для HTML
  • Поисковый запрос - строка bufferLine
  • Функция - Содержимое
  • Номер элемента - 0
  • Результат в переменную - переменная "ЛинияБуфера" (строковая)


Компонент "Линия переключения". Выделяет линию сотрудника В, на которого переключают звонок, из XML-структуры.

  • Документ - переменная "XML"
  • Алгоритм - Язык OQuery для HTML
  • Поисковый запрос - строка switchingLine
  • Функция - Содержимое
  • Номер элемента - 0
  • Результат в переменную - переменная "ЛинияПереключения" (строковая)


Компонент "Линия пользователя". Выделяет линию переключающего сотрудника Б из XML-структуры.

  • Документ - переменная "XML"
  • Алгоритм - Язык OQuery для HTML
  • Поисковый запрос - строка userLine
  • Функция - Содержимое
  • Номер элемента - 0
  • Результат в переменную - переменная "ЛинияПользователя" (строковая)


Компонент "Трансфер?". Определяет произошло ли трансфер-переключение. Если это так, то линия буфера будет пустая, вследствие того, что она была активной и содержится в переменной "ЛинияПользователя".

  • Аргумент 1 - переменная "ЛинияБуфера"
  • Аргумент 2 - пустая строка
  • Тип сравнения - "="
  • Переход, если правда - компонент "Трансфер"
  • Переход, если ложь - компонент "Скоммутированная с буфером"



Случай обычного переключения



Компонент "Скоммутированная с буфером". Определяет номер скоммутированной линии с линией буфера (клиента А). В зависимости от того, какую линию вернет компонент, будет решаться соединилась ли линия буфера с пользователем В или вернулась обратно.

  • Действие - Определить
  • Тип объекта - Линия
  • Ключ линии - переменная "ЛинияБуфера"
  • Функция - Номер скоммутированной линии/конференции
  • Значение в переменную - переменная "СкоммутированнаяСБуфером" (строковая)


Компонент "Ув1". Отладочное уведомление для вывода номеров участвующих линий, а также линии, которая скоммутирована с буфером.

  • Отладочный режим - Да
  • Текст - выражение
'[ЛинияБуфера] '+[ЛинияБуфера]+endline+
'[ЛинияПереключения] '+[ЛинияПереключения]+endline+
'[ЛинияПользователя] '+[ЛинияПользователя]+endline+endline+
'[СкоммутированнаяСБуфером] '+[СкоммутированнаяСБуфером]
  • Адресат - выберите администрирующего пользователя.


Компонент "Буфер не скоммутирован?". Определяет скоммутирована ли линия буфера. Если переменная "СкоммутированнаяСБуфером" равна "-1", значит линия пока не скоммутирована.

  • Аргумент 1 - переменная "СкоммутированнаяСБуфером"
  • Аргумент 2 - число "-1"
  • Тип сравнения - "="
  • Переход, если правда" - компонент "IdChain"
  • Переход, если ложь - "Буфер переключился?". Переход отрабатывает, если линия буфера соединена с какой-либо другой линией.


Компонент "IdChain". Если линия пока не скоммутирована, есть вероятность, что она разорвала связь. Такое бывает в условиях плохого соединения, например клиент зашел в метро, или клиент просто повесил трубку в следствие долгого ожидания. Чтобы определить это, нам потребуется знать идентификатор цепочки коммутаций.

  • Действие - Определить
  • Тип объекта - Линия
  • Ключ линии - переменная "ЛинияБуфера"
  • Функция - Идентификатор цепочки коммутаций
  • Значение в переменную - переменная "idChainuser" (строковая)


Компонент "Ув2". Отладочное уведомление для вывода Id цепочки коммутаций.

  • Отладочный режим - Да
  • Текст - переменная "idChainuser"
  • Адресат - выберите администрирующего пользователя.


Компонент "Обрыв внешней линии". Если Id цепочки коммутаций равен "00000000-0000-0000-0000-000000000000", значит на данный момент активной коммутации на линии нет, то есть соединение с клиентом оборвалось.

  • Аргумент 1 - переменная "idChainuser"
  • Аргумент 2 - строка "00000000-0000-0000-0000-000000000000"
  • Тип сравнения - "="
  • Переход, если правда" - компонент "Линия повесила трубку"
  • Переход, если ложь - "Пока линия не скоммутирована".


Компонент "Линия повесила трубку". Отладочное уведомление, о том, что линия повесила трубку.

  • Отладочный режим - Нет. После успешных тестов можно выставить Да.
  • Текст - строка Внешняя линия повесила трубку
  • Адресат - выберите администрирующего пользователя.


Компонент "Пока линия не скоммутирована". Отладочное уведомление, о том, что линия пока ни с кем не скоммутирована.

  • Отладочный режим - Да
  • Текст - строка Линия пока не скоммутирована
  • Адресат - выберите администрирующего пользователя.


Компонент "Буфер переключился?". Если линия буфера соединена с какой-либо линией, то компонент проверяет соединена ли линия буфера с линией сотрудника, на которого переключали.

  • Аргумент 1 - переменная "СкоммутированнаяСБуфером"
  • Аргумент 2 - переменная "ЛинияПереключения"
  • Тип сравнения - "="
  • Переход, если правда - компонент "Линии скоммутированы"
  • Переход, если ложь - компонент "Линия вернулась?"


Компонент "Линия скоммутированы". Уведомляет администратора, что линии А и В скоммутировались.

  • Отладочный режим - Нет. После успешных тестов можно выставить Да.
  • Текст - строка Линии успешно скоммутировались
  • Адресат - выберите администрирующего пользователя.


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

  • Действие - Установить
  • Тип объекта - Линия
  • Ключ линии - переменная "ЛинияБуфера"
  • Свойство/действие - Воспроизвести файл в коммутацию/конференцию
  • Звуковой файл - выберите файл "Вы переключены на сотрудника.mp3"
  • Значение - 0. Означает полную громкость воспроизведения.


Компонент "Линия вернулась?". Линия буфера может быть скоммутирована с линией переключающего Б. В этом случае, мы делаем вывод, что линия вернулась обратно переключающему. Это могло произойти, после того, как Б и В поговорили, но первым положил трубку В. Тогда А соединяется обратно с Б.

  • Аргумент 1 - переменная "СкоммутированнаяСБуфером"
  • Аргумент 2 - переменная "ЛинияПользователя"
  • Тип сравнения - "="
  • Переход, если правда - компонент "Возврат буфера"
  • Переход, если ложь - компонент "Пока линия не скоммутирована".

ВНИМАНИЕ: Фактически, этот переход может произойти только вследствие ошибочной логики, поэтому обратите на него внимание во время отладки. Имеет смысл, убрать переход или поставить уведомление.


Компонент "Возврат буфера".

  • Отладочный режим - Нет. После успешных тестов можно выставить Да.
  • Текст - строка Линия вернулась обратно
  • Адресат - выберите администрирующего пользователя.


Компонент "500мс". Если линия пока не соединена, компонент осуществляет задержку перед следующей итерацией анализа состояния линий. Эта задержка по сути является разрешающей способностью сценария. Если выставить слишком много - возможны перекрестные ошибки, если выставить мало - система будет сильно нагружаться. Вам следует поэкспериментировать с этим значением. Во время тестов было использовано значение 500 мс.

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

SIP-трансфер переключение. Отличие этого блока от предыдущего в том, что линия переключаемого клиента А будет располагаться в переменной "ЛинияПользователя", так как в сценарии переключения именно она была активной.


Компонент "Трансфер".

  • Отладочный режим - Нет. После успешных тестов можно выставить Да.
  • Текст - строка ТРАНСФЕР
  • Адресат - выберите администрирующего пользователя.


Компонент "Скоммутированная с буфером 2". Определяет номер скоммутированной линии с линией клиента А. В зависимости от того, какую линию вернет компонент, будет решаться соединилась ли линия буфера с пользователем В или нет.

  • Действие - Определить
  • Тип объекта - Линия
  • Ключ линии - переменная "ЛинияПользователя"
  • Функция - Номер скоммутированной линии/конференции
  • Значение в переменную - переменная "СкоммутированнаяСБуфером"


Компонент "Произошло соединение?". Определяет произошло ли соединение линии клиента А и пользователя В.

  • Аргумент 1 - переменная "СкоммутированнаяСБуфером"
  • Аргумент 2 - переменная "ЛинияПользователя"
  • Тип сравнения - "="
  • Переход, если правда - компонент "Линии соединены"
  • Переход, если ложь - компонент "Пауза2".

ВНИМАНИЕ: Переход по ветке "Ложь" является некорректным и может произойти только вследствие системной ошибки или высокой загрузки процессора. Если этот переход выполнился, то вам следует обратить на это пристальное внимание.


Компонент "Линии соединены".

  • Отладочный режим - Нет. После успешных тестов можно выставить Да.
  • Текст - строка Линии успешно скоммутировались
  • Адресат - выберите администрирующего пользователя.


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

  • Действие - Установить
  • Тип объекта - Линия
  • Ключ линии - переменная "ЛинияПользователя"
  • Свойство/действие - Воспроизвести файл в коммутацию/конференцию
  • Звуковой файл - выберите файл "Вы переключены на сотрудника.mp3"
  • Значение - 0. Означает полную громкость воспроизведения.


Компонент "Пауза 2". Переход на этот компонент, если переходные процессы заняли длительное время (большая загрузка процессора). В этом случае мы установили дополнительную задержку 200 мс для завершения всех переходных процессов.

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


Компонент "Линия не соединилась". Если линия пока не соединилась с линией сотрудника В, то ее состояние должно быть равно "-1". Если это не так, то произошла ошибочная ситуация.

  • Аргумент 1 - переменная "СкоммутированнаяСБуфером"
  • Аргумент 2 - число"-1"
  • Тип сравнения - "="
  • Переход, если правда - компонент "IdChain 2"
  • Переход, если ложь - компонент "Неизвестная ситуация"


Компонент "Неизвестная ситуация". Уведомляет, что произошла неизвестная ситуация во время трансфер-переключения. Линия во время sip-трансфер переключения внезапно соединилась с другой линией, и следует подробно выяснить как такое могло произойти.

  • Отладочный режим - Нет. После успешных тестов можно выставить Да.
  • Текст - строка Неизвестная ситуация
  • Адресат - выберите администрирующего пользователя.


Компонент "IdChain 2". Если линия клиента А не соединилась с линией пользователя В, то есть вероятность, что мог произойти обрыв связи. Проверить это поможет идентификатор цепочки коммутаций.

  • Действие - Определить
  • Тип объекта - Линия
  • Ключ линии - переменная "ЛинияПользователя"
  • Функция - Идентификатор цепочки коммутаций
  • Значение в переменную - переменная "idChainuser"


Компонент "Ув3". Отладочное уведомление, с выводом полученного идентификатора цепочки коммутаций.

  • Отладочный режим - Да.
  • Текст - выражение '[idChainuser] '+[idChainuser]
  • Адресат - выберите администрирующего пользователя.


Компонент "Линия повесила трубку?". Если Id цепочки коммутаций равен "00000000-0000-0000-0000-000000000000", значит на данный момент активной коммутации на линии нет, то есть соединение с клиентом оборвалось.

  • Аргумент 1 - переменная "idChainuser"
  • Аргумент 2 - строка "00000000-0000-0000-0000-000000000000"
  • Тип сравнения - "="
  • Переход, если правда" - компонент "Линия оборвалась"
  • Переход, если ложь - "Пауза 500 мс".


Компонент "Линия оборвалась". Сообщает администратору, что на линии клиента А произошел обрыв связи.

  • Отладочный режим - Нет. После успешных тестов можно выставить Да.
  • Текст - строка Внешняя линия повесила трубку
  • Адресат - выберите администрирующего пользователя.


Компонент "Пауза 500мс". Если линия пока не соединена, компонент осуществляет задержку перед следующей итерацией.

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


==Назначение сценария переключения==