Урок 28 Служебный сценарий обработки контента — различия между версиями
Строка 42: | Строка 42: | ||
− | В каждом из представленных контентов есть специальные пользовательские поля, куда вы можете заносить свою информацию. Иногда эту нужно для указания служебных данных или передачи некоторых параметров между сценариями, которые запускаются не в рамках одной сессии. В контенте линии пользовательское поле располагается в заголовке: | + | В каждом из представленных контентов есть специальные пользовательские поля, куда вы можете заносить свою информацию. Иногда эту нужно для указания служебных данных или передачи некоторых параметров между сценариями, которые запускаются не в рамках одной сессии. В контенте линии пользовательское поле располагается в заголовке (показано на рисунке выше): |
:<code><property_cdata key="custominfo"><![CDATA[''Любые данные'']]></property_cdata></code> | :<code><property_cdata key="custominfo"><![CDATA[''Любые данные'']]></property_cdata></code> | ||
− | В контенте цепочки коммутаций это несколько полей — одно в заголовке контента сессии и по одному на каждую коммутацию: | + | В контенте цепочки коммутаций это несколько полей — одно в заголовке контента сессии и по одному на каждую коммутацию (показано на рисунке выше): |
:<code><property_cdata key="custom"><![CDATA[''Любые данные'']]></property_cdata></code> | :<code><property_cdata key="custom"><![CDATA[''Любые данные'']]></property_cdata></code> | ||
:<code><property_cdata key="custom"><![CDATA[''Любые данные'']]></property_cdata></code> | :<code><property_cdata key="custom"><![CDATA[''Любые данные'']]></property_cdata></code> |
Версия 12:05, 5 мая 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>
Определить и установить свои значения в эти пользовательские поля вы можете с помощью одноименных функций в компоненте "Статус объекта". Для линии доступны пользовательские поля обоих типов контентов, для сессии доступен только контент цепочки.
Сценарий обработки контента
Запуск данного сценария происходит автоматически после окончания звонка. Какой именно служебный сценарий будет отвечать за обработку контента выбираем и назначаем в разделе Администрирование / Общие настройки / Сценарии АТС / Служебный сценарий обработки контента.
Прежде чем обрабатывать контент,нужно ознакомиться в каком виде он нам становиться доступным. Для этого создадим простой служебный сценарий - "обработка контента".
В компоненте старт, выбираем параметры запуска, а точнее создаем переменную в которую система передаст эти самые параметры запуска,в нашем случае это и будет контент.
Далее используем компонент "Сохранение контента" для того что бы создать физический файл в который сохраниться наш контент. Для этого,в качестве контента указываем нашу переменную "Контент", затем для удобства последующего просмотра выбираем тип - txt.
Файл - выбираем категорию где наш файл создастся и указываем название файла. После этого сохраняем сценарий,назначаем его в качестве "Служебного сценария сбора контента", после чего производим звонок.
Переходим в категорию,которую указали для сохранения контента и раскрываем с помощью блокнота.
Как видно из данного файла - весь контент "обрамлен" в xml. Соответственно для последующего разбора данных мы будем использовать компонент парсер текста, с использованием поискового языка OQuery.
Давайте рассмотрим структуру более подробно. Для примера возьмем строчку из контента:
- <property_simple key="idchain" value="21819d69-6d1e-40b5-898b-a6c387a555bc" />
В данной строке property_simple - является тегом, key="idchain" - уточняющий атрибут, value="21819d69-6d1e-40b5-898b-a6c387a555bc" - конкретизирующий атрибут.
Таким образом для того что бы получить значение ID цепочки коммутации строим следующий поисковый запрос:
- property_simple[key="idchain"]
Где, следуя синтаксису OQuery, property_simple - тег,[key="idchain"] - атрибут с известным нам значением и названием.
Далее рассмотрим служебный сценарий сбора контента, в котором используя последовательный парсинг контента, мы получим необходимые значения и сохраним все в БД.
Во первых создадим таблицу в БД, в которую будем в итоге складировать все полученные данные. В ходе примера получим следующие данные:
- ID цепочки коммутации,
- Номер внешней линии,
- CallerID,
- CalledID,
- Время начала,
- Время конца,
- Имя пользователя, обслужившего вызов последним,
- Номер линии,обслужившей вызов последней,
- ID пользователя,обслужившего вызов последним.
Из такого набора данным все поля делаем NVarchar,кроме Время начала,Время конца,которые создаем как Date/time.
Далее переходим непосредственно к нашему сценарию.
Рассмотрим настройки компонента "Парсер"
- Документ - переменная "Контент".
- Алгоритм - Язык OQuery
- Поисковый запрос - property_simple[key="idchain"]
- Функция - что нужно нам найти в документе - значение атрибута.
- Номер элемента - оставляем пустым.
- Атрибут - value
- Результат в переменную - указываем переменную в которую будем сохранять результат парсера.
Таким же образом настраиваем и все последующие парсеры,не забывая изменять значение атрибута key в поисковом запросе на соответствующий нашему запросу, т.е. следующий парсер будет уже искать номер линии соответственно: property_simple[key="linenumber"] а так же указываем другую переменную.
Стоит отметить, что парсер позволяет сохранить информацию только в текстовом виде, соответственно при получении временных данных, их прежде всего сохраняем в строковую переменную,а затем при необходимости преобразуем в переменную типа Дата/время.
Так же для того что бы найти первый тег можно использовать указательный суффикс ":first" и для поиска последнего значения ":last". Таким образом для поиска времени поступления звонка воспользуемся суффиксом :first, поисковый запрос будет выглядеть так:
- (property_simple[key="timestart"]):first.
А для поиска времени окончания коммутации используем суффикс ":last" - (property_simple[key="timestop"]):last.
Так же суффиксом ":last" воспользуемся,для того что бы определить имя последнего оператора,принявшего звонок, его id и номер его линии.
Затем произведем преобразование строчной даты и времени в тип Дата\время и произведем запись в БД,в нашу таблицу.
После чего сохраним сценарий на сервере и совершим тестовый звонок. Открыв нашу таблицу мы увидим данные,которые мы собрали с помощью служебного сценария сбора контента.
Пример сценария:
Поздравляем! Теперь вы знаете как проанализировать звонок после соединения. Можете переходить к следующему уроку.
Техническая документация: Сценарии АТС
Вопросы и задания
Наверх | К предыдущему уроку | К следующему уроку |