Урок 28 Служебный сценарий обработки контента — различия между версиями
Строка 74: | Строка 74: | ||
* Отладочный режим - Да. Чтобы уведомление отображалось во время выполнения сценария, установите галочку "Компоненты" на вкладке "Сохранение" или установите в свойство "Нет". | * Отладочный режим - Да. Чтобы уведомление отображалось во время выполнения сценария, установите галочку "Компоненты" на вкладке "Сохранение" или установите в свойство "Нет". | ||
* Текст - переменная '''content'''. | * Текст - переменная '''content'''. | ||
+ | * Способ оповещения - Всплывающее уведомление | ||
* Ключ получателя - внутренний номер администратора. Указать ключ в таком виде намного легче, чем выбирать пользователя в свойстве "Адресат". | * Ключ получателя - внутренний номер администратора. Указать ключ в таком виде намного легче, чем выбирать пользователя в свойстве "Адресат". | ||
Строка 96: | Строка 97: | ||
− | Компонент "'''Определяем направление'''". | + | Компонент "'''Определяем направление'''". Определяет направление звонка - входящий или исходящий. Требуемое значение находится в теге <code><property_simple key="direction" value="1" name="cdIncoming" /></code> в атрибуте name. |
* Документ - переменная '''content''' | * Документ - переменная '''content''' | ||
* Алгоритм - Язык OQuery для HTML | * Алгоритм - Язык OQuery для HTML | ||
* Поисковый запрос - строка | * Поисковый запрос - строка | ||
<code>property_simple[key='direction']</code> | <code>property_simple[key='direction']</code> | ||
+ | Запрос ищет все теги property_simple с атрибутом key="direction" | ||
+ | * Функция - Значение атрибута | ||
+ | * Номер элемента - 1 | ||
+ | * Атрибут - строка "name" | ||
+ | * Результат в переменную - переменная '''direction''' (строковая) | ||
+ | * Переход и Переход, неудача - на компонент "Входящий звонок?". | ||
+ | |||
+ | Компонент "'''Входящий звонок?'''". Поскольку в задании требуется определять только входящие звонки, у которых не было ни одной коммутации, компонент сравнивает полученное направление со строкой "cdIncoming". | ||
+ | * Аргумент 1 - переменная '''direction''' | ||
+ | * Аргумент 2 - строка "cdIncoming" | ||
+ | * Тип сравнение - "=" | ||
+ | * Переход, если правда - на компонент "CallerId" | ||
+ | * Переход, если ложь - на компонент "Стоп 2" | ||
+ | |||
+ | |||
+ | Компонент "'''CallerId'''". Определяет CallerId. Требуемое значение находится в теге <code><property_simple key="callerid" value="88432110000" /></code> в атрибуте value. | ||
+ | * Документ - переменная '''content''' | ||
+ | * Алгоритм - Язык OQuery для HTML | ||
+ | * Поисковый запрос - строка | ||
+ | <code>property_simple[key='callerid']</code> | ||
+ | Запрос ищет все теги property_simple с атрибутом key="callerid" | ||
* Функция - Значение атрибута | * Функция - Значение атрибута | ||
* Номер элемента - 1 | * Номер элемента - 1 | ||
− | * Атрибут - строка | + | * Атрибут - строка "value" |
+ | * Результат в переменную - переменная '''callerid''' (строковая) | ||
+ | * Переход и Переход, неудача - на компонент "CalledId". | ||
− | Компонент "''' | + | Компонент "'''CalledId'''". Определяет CalledId. Требуемое значение находится в теге <code><property_simple key="calledid" value="88001112233" /></code> в атрибуте value. |
+ | * Документ - переменная '''content''' | ||
+ | * Алгоритм - Язык OQuery для HTML | ||
+ | * Поисковый запрос - строка | ||
+ | <code>property_simple[key='calledid']</code> | ||
+ | Запрос ищет все теги property_simple с атрибутом key="calledid" | ||
+ | * Функция - Значение атрибута | ||
+ | * Номер элемента - 1 | ||
+ | * Атрибут - строка "value" | ||
+ | * Результат в переменную - переменная '''calledid''' (строковая) | ||
+ | * Переход и Переход, неудача - на компонент "TimeStart". | ||
− | |||
− | Компонент "''' | + | Компонент "'''TimeStart'''". Определяет время начала звонка. Требуемое значение находится в теге <code><property_simple key="timestart" value="06.05.2015 10:06:43.462" /></code> в атрибуте value. |
+ | * Документ - переменная '''content''' | ||
+ | * Алгоритм - Язык OQuery для HTML | ||
+ | * Поисковый запрос - строка | ||
+ | <code>property_simple[key='timestart']</code> | ||
+ | Запрос ищет все теги property_simple с атрибутом key="timestart" | ||
+ | * Функция - Значение атрибута | ||
+ | * Номер элемента - 1 | ||
+ | * Атрибут - строка "value" | ||
+ | * Результат в переменную - переменная '''timestart''' (строковая) | ||
+ | * Переход и Переход, неудача - на компонент "Вывод параметров". | ||
− | Компонент "''' | + | Компонент "'''Вывод параметров'''". Отладочное уведомление для вывода всех найденных параметров звонка |
+ | * Отладочный режим - Нет. | ||
+ | * Текст - выражение: | ||
+ | 'ПРОПУЩЕННЫЙ ЗВОНОК'+endline+ | ||
+ | '[callerid] '+[callerid]+endline+ | ||
+ | '[calledid] '+[calledid]+endline+ | ||
+ | '[timestart] '+[timestart]+endline+ | ||
+ | '[direction] '+[direction] | ||
+ | * Способ оповещения - Всплывающее уведомление | ||
+ | * Ключ получателя - внутренний номер администратора. | ||
− | |||
− | Компонент "'''Отправка Email'''" | + | Компонент "'''Отправка Email'''". Отправляет электронное письмо по пропущенному звонку. |
+ | * Почтовый сервер - Согласно общим настройкам. Используются данные для подключения из модуля ''Общие настройки / Настройки E-mail'' | ||
+ | * Кому - строка ''director@oktell.ru'' | ||
+ | * От кого - строка ''info@oktell.ru'', как правило совпадает с логином для подключения к SMTP-серверу. | ||
+ | * Тема - строка ''Пропущенный звонок'' | ||
+ | * Формат - текст | ||
+ | * Содержание письма - выражение: | ||
+ | 'ПРОПУЩЕННЫЙ ЗВОНОК'+endline+ | ||
+ | 'Номер абонента: '+[callerid]+endline+ | ||
+ | 'Набранный номер: '+[calledid]+endline+ | ||
+ | 'Время: '+[timestart] | ||
Версия 07:57, 6 мая 2015
Наверх | К предыдущему уроку | К следующему уроку |
Введение
Сценарий обработки контента - служебный сценарий, который запускается после завершения звонка на внешней линии. Сценарий предназначен для постобработки внешнего звонка и анализа специальной XML-структуры, называемой контентом линии. Разберемся с этой структурой поподробнее.
Контент линии - это идентификационная информация по линии, абоненту, времени, а также перечень всех коммутаций с указанием имени сценария, идентификатора и имени оператора, времени начала, времени конца, продолжительности и пр. Контент линии существует только у внешних линий, начинает заполняться с момента поступления звонка по каналу и сбрасывается при завершении этого звонка. Иными словами, данная информация существует только во время звонка. Контент линии помогает отследить все действия внешнего абонента, по каким сценариям IVR он проходил, какие операторы говорили с ним, а какие операторы пропустили звонок.
Рассмотрим следующую ситуацию: клиент позвонил в компанию и соединился с секретарем Марией. Мария осуществляет консультативный перевод на сотрудника Станислава, заранее предупреждая его о переключении. Клиент соединяется со Станиславом и после разговора, попадает в сценарий вместо отбоя, где оценивает качество консультации.
После того как линия положит трубку в контент линии попадут 4 коммутации:
- соединение абонента с главным IVR сценарием
- разговор абонента с секретарем Марией
- разговор абонента с сотрудником Станиславом
- соединение абонента со сценарием вместо отбоя
Следует отметить, что коммутация между сотрудниками Марией и Станиславом в контент линии не попадет, потому как в этом разговоре не участвовала внешняя линия абонента. В контент линии попадают только те разговоры, в которых участвовала данная внешняя линия. Далее показан пример контента линии для указанной ситуации (повторяющиеся моменты вырезаны).
Наряду с контентом линии, в Oktell существует контент цепочки коммутаций (еще его называют контент сессии). Контент сессии существует в рамках цепочки коммутаций и в отличие от контента линии его можно получить как для внешних, так и для внутренних линий.
Следует отметить, что контенты линии и сессии отличаются друг от друга. В контент сессии для данной ситуации попадет еще разговор секретаря Марии с сотрудником Станиславом во время консультативного перевода, потому как этот вызов, как и другие был сделан в рамках одной цепочки. Также в контенте цепочки коммутаций фиксируется информация о пройденных очередях ожидания. Ниже показан пример контента цепочки коммутаций для того же примера (повторяющиеся моменты вырезаны).
Получить контент линии или цепочки коммутаций можно в любой момент с помощью одноименных функций в компоненте "Статус объекта" (действие — определить). Для линии вы можете определить как контент линии (XML), так и цепочки коммутаций (XML, Json). Для сессии (цепочки) доступно только определение контента цепочки коммутаций.
В каждом из представленных контентов есть специальные пользовательские поля, куда вы можете заносить свою информацию. Иногда эту нужно для указания служебных данных или передачи некоторых параметров между сценариями, которые запускаются не в рамках одной сессии. В контенте линии пользовательское поле располагается в заголовке (показано на рисунке выше):
<property_cdata key="custominfo"><![CDATA[Любые данные]]></property_cdata>
В контенте цепочки коммутаций это несколько полей — одно в заголовке контента сессии и по одному на каждую коммутацию (показано на рисунке выше):
<property_cdata key="custom"><![CDATA[Любые данные]]></property_cdata>
<property_cdata key="custom"><![CDATA[Любые данные]]></property_cdata>
Определить и установить свои значения в эти пользовательские поля вы можете с помощью одноименных функций в компоненте "Статус объекта". Для линии доступны пользовательские поля обоих типов контентов, для сессии доступен только контент цепочки.
Сценарий обработки контента
Как было сказано в начале, сценарий обработки контента запускается автоматически после окончания звонка на внешней линии. На вход в качестве параметра запуска сценарию поступает контент линии в формате XML. Получить контент линии можно также с помощью функции "Входной параметр 1". Далее в сценарии вы можете проанализировать эту структуру и определить различные параметры звонка.
Рассмотрим следующую задачу: необходимо определять пропущенные звонки от клиентов и реализовать автоматическую отправку email директору с указанием номера абонента (callerid), набранного номера (calledid) и времени звонка. Пропущенным звонком в данной задаче будем считать такой, у которого не было ни одного соединения с оператором.
Сценарий выглядит следующим образом:
Компонент "Старт". Сохраняет контент линии в переменную content.
- Параметр запуска - переменная content (строковая)
Компонент "Вывод контента". Отладочное уведомление для вывода контента линии.
- Отладочный режим - Да. Чтобы уведомление отображалось во время выполнения сценария, установите галочку "Компоненты" на вкладке "Сохранение" или установите в свойство "Нет".
- Текст - переменная content.
- Способ оповещения - Всплывающее уведомление
- Ключ получателя - внутренний номер администратора. Указать ключ в таком виде намного легче, чем выбирать пользователя в свойстве "Адресат".
Компонент "Количество коммутаций". Парсер определяет из контента количество коммутаций с абонентами. Поскольку контент представляет из себя XML структуру, используется алгоритм OQuery.
- Документ - переменная content
- Алгоритм - Язык OQuery для HTML
- Поисковый запрос - строка
commutation:has(property_simple[name='abonent'])
Запрос ищет все теги commutation, внутри который есть тег property_simple с атрибутом name="abonent"
- Функция - Количество элементов
- Результат в переменную - переменная count (строковая)
- Переход и Переход, неудача - на компонент "Пропущенный?". Переход по неудаче сделан для случая, если в контенте не будет ни одной коммутации с абонентом. Дело в том, что если парсер не находит нужных тегов, он возвращает ошибку.
Компонент "Пропущенный?". Если парсер не нашел нужных тегов, то он перейдет по неудаче, а в переменную он возвратит пустое значение. Компонент сравнивает переменную count с пустой строкой, тем самым определяя пропущенный это звонок или нет.
- Аргумент 1 - переменная count
- Аргумент 2 - пустая строка
- Тип сравнение - "="
- Переход, если правда - на компонент "Определяем направление"
- Переход, если ложь - на компонент "Стоп 1"
Компонент "Определяем направление". Определяет направление звонка - входящий или исходящий. Требуемое значение находится в теге <property_simple key="direction" value="1" name="cdIncoming" />
в атрибуте name.
- Документ - переменная content
- Алгоритм - Язык OQuery для HTML
- Поисковый запрос - строка
property_simple[key='direction']
Запрос ищет все теги property_simple с атрибутом key="direction"
- Функция - Значение атрибута
- Номер элемента - 1
- Атрибут - строка "name"
- Результат в переменную - переменная direction (строковая)
- Переход и Переход, неудача - на компонент "Входящий звонок?".
Компонент "Входящий звонок?". Поскольку в задании требуется определять только входящие звонки, у которых не было ни одной коммутации, компонент сравнивает полученное направление со строкой "cdIncoming".
- Аргумент 1 - переменная direction
- Аргумент 2 - строка "cdIncoming"
- Тип сравнение - "="
- Переход, если правда - на компонент "CallerId"
- Переход, если ложь - на компонент "Стоп 2"
Компонент "CallerId". Определяет CallerId. Требуемое значение находится в теге <property_simple key="callerid" value="88432110000" />
в атрибуте value.
- Документ - переменная content
- Алгоритм - Язык OQuery для HTML
- Поисковый запрос - строка
property_simple[key='callerid']
Запрос ищет все теги property_simple с атрибутом key="callerid"
- Функция - Значение атрибута
- Номер элемента - 1
- Атрибут - строка "value"
- Результат в переменную - переменная callerid (строковая)
- Переход и Переход, неудача - на компонент "CalledId".
Компонент "CalledId". Определяет CalledId. Требуемое значение находится в теге <property_simple key="calledid" value="88001112233" />
в атрибуте value.
- Документ - переменная content
- Алгоритм - Язык OQuery для HTML
- Поисковый запрос - строка
property_simple[key='calledid']
Запрос ищет все теги property_simple с атрибутом key="calledid"
- Функция - Значение атрибута
- Номер элемента - 1
- Атрибут - строка "value"
- Результат в переменную - переменная calledid (строковая)
- Переход и Переход, неудача - на компонент "TimeStart".
Компонент "TimeStart". Определяет время начала звонка. Требуемое значение находится в теге <property_simple key="timestart" value="06.05.2015 10:06:43.462" />
в атрибуте value.
- Документ - переменная content
- Алгоритм - Язык OQuery для HTML
- Поисковый запрос - строка
property_simple[key='timestart']
Запрос ищет все теги property_simple с атрибутом key="timestart"
- Функция - Значение атрибута
- Номер элемента - 1
- Атрибут - строка "value"
- Результат в переменную - переменная timestart (строковая)
- Переход и Переход, неудача - на компонент "Вывод параметров".
Компонент "Вывод параметров". Отладочное уведомление для вывода всех найденных параметров звонка
- Отладочный режим - Нет.
- Текст - выражение:
'ПРОПУЩЕННЫЙ ЗВОНОК'+endline+ '[callerid] '+[callerid]+endline+ '[calledid] '+[calledid]+endline+ '[timestart] '+[timestart]+endline+ '[direction] '+[direction]
- Способ оповещения - Всплывающее уведомление
- Ключ получателя - внутренний номер администратора.
Компонент "Отправка Email". Отправляет электронное письмо по пропущенному звонку.
- Почтовый сервер - Согласно общим настройкам. Используются данные для подключения из модуля Общие настройки / Настройки E-mail
- Кому - строка director@oktell.ru
- От кого - строка info@oktell.ru, как правило совпадает с логином для подключения к SMTP-серверу.
- Тема - строка Пропущенный звонок
- Формат - текст
- Содержание письма - выражение:
'ПРОПУЩЕННЫЙ ЗВОНОК'+endline+ 'Номер абонента: '+[callerid]+endline+ 'Набранный номер: '+[calledid]+endline+ 'Время: '+[timestart]
Поздравляем! Теперь вы знаете как проанализировать звонок после соединения. Можете переходить к следующему уроку.
Техническая документация: Сценарии АТС
Вопросы и задания
Наверх | К предыдущему уроку | К следующему уроку |