Введение
Сценарий обработки контента — служебный сценарий, который запускается после завершения звонка на внешней линии. Сценарий предназначен для постобработки внешнего звонка и анализа специальной 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) и времени звонка. Пропущенным звонком в данной задаче будем считать такой, у которого не было ни одного соединения с оператором.
Чтобы решить эту задачу, нужно посмотреть на различие контентов между звонками, в которых были соединения с операторами и в которых их не было.
Как видно из рисунка, соединения с операторами отмечается дополнительным тегом <abonent index="1">
внутри основного тега <commutation index="1">
. Исходя из этого, если количество таких тегов равняется нулю, звонок можно считать пропущенным. Остальные параметры — направление звонка, 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]
Скачать сценарий: Сценарий обработки контента.oscr (собран на версии 2.12.0.150423)
Назначение сценария
Сценарий обработки контента назначается в модуле Администрирование/Общие настройки на вкладке «Сценарии АТС«. Для того, чтобы назначить сценарий выберите его в выпадающем списке напротив соответствующей строки и поставьте крестик для его активации, затем сохраните настройки. Выбранный сценарий в списке обозначается серым цветом.
Поздравляем! Теперь вы знаете как проанализировать звонок после соединения. Можете переходить к следующему уроку.
Техническая документация: Сценарии АТС
Вопросы и задания
- Зачем нужен сценарий обработки контента? Что такое контент, какие виды контента существуют?
- Дополните данный сценарий информацией о том, какой внутренний номер пропустил данный звонок. Передать значение из главного сценария в сценарий контента вы можете с помощью сессионной переменной, либо через пользовательское поле в контенте. Попробуйте оба варианта.
- Реализуйте в сценарии определение параметров успешного звонка: CallerId, CalledId, время звонка, номер внешней линии, имя и идентификатор последнего обслужившего сотрудника. Все найденные параметры сохраняйте в базу данных.
- Настройте сценарий обработки контента для отправки всех записей разговоров в цепочке коммутаций на электронную почту. Таким образом, если клиент разговаривал с несколькими сотрудниками, в письмо должны быть вложены все разговоры клиента. Используйте статью: Отправка записей разговоров на e-mail. Модифицируйте сценарий для отправки записей разговоров только в тех случаях, когда клиент поставил оценку 1 или 2 в сценарии вместо отбоя.
Наверх
В ходе обработки внешнего звонка сервером производится сбор так называемого контента. Это идентификационная информация по линии, абоненту, времени, а также перечень всех коммутаций с указанием имени сценария, идентификатора и имени оператора, времени начала, времени конца, продолжительности и пр.
Запуск данного сценария происходит автоматически после окончания звонка. Какой именно служебный сценарий будет отвечать за обработку контента выбираем и назначаем в разделе Администрирование / Общие настройки / Сценарии АТС / Служебный сценарий обработки контента.
Прежде чем обрабатывать контент,нужно ознакомиться в каком виде он нам становиться доступным. Для этого создадим простой служебный сценарий — «обработка контента».
В компоненте старт, выбираем параметры запуска, а точнее создаем переменную в которую система передаст эти самые параметры запуска,в нашем случае это и будет контент.
Далее используем компонент «Сохранение контента» для того что бы создать физический файл в который сохраниться наш контент. Для этого,в качестве контента указываем нашу переменную «Контент», затем для удобства последующего просмотра выбираем тип — 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 и номер его линии.
Затем произведем преобразование строчной даты и времени в тип Датавремя и произведем запись в БД,в нашу таблицу.
После чего сохраним сценарий на сервере и совершим тестовый звонок. Открыв нашу таблицу мы увидим данные,которые мы собрали с помощью служебного сценария сбора контента.
Пример сценария:
Файл:Content.zip
Служебные сценарии
Служебные сценарии – это процедуры, выполняемые на сервере Oktell. В отличие от других типов сценариев, служебные не осуществляют руководства ни над линиями, ни над приложениями пользователей, поэтому имеют в своем распоряжении только общие компоненты с небольшим расширением для узкоспециализированных задач. Служебные сценарии могут обращаться в БД, посылать уведомления, осуществлять проверки, заниматься приемом и рассылкой SMS-сообщений и инициировать звонки.
Существуют несколько направлений, активно использующих служебные сценарии:
-
Обработка собранного по звонку контента. В ходе звонка по внешней линии сервер собирает так называемый контент, к которому относится вся информация о линии, абоненте, времени звонка и другая идентификационная информация, а также перечень действий произведенных за время звонка с абонентом и информация о всех коммутациях с подробным их описанием. Все сценарии, все операторы, с которыми был коммутировался абонент, будут перечислены с идентификаторами, именами, а также временем начала, временем конца и продолжительности коммутации. После завершения звонка собранный контент передается в виде параметра в запущенный служебный сценарий обработки контента. В служебном сценарии в компоненте «старт» при необходимости параметр сохраняется для дальнейшего пользования. В сценарии-обработчике контента есть возможность разобрать контент по составляющим для последующего сохранения в удобоваримом виде в БД, либо сохранить непосредственно в файлы в виде текста или XML документа.
-
Текстовые задачи на рассылку сообщений или обработку данных по абонентской таблице. После запуска такой задачи, прикрепленный к ней служебный сценарий осуществляет необходимые действия, чаще связанные с рассылкой сообщений по абонентам из прикрепленного списка. В зависимости от настроек задачи на каждого абонента может быть запущена отдельная реализация сценария (если информация персонифицирована), либо один сценарий, предполагающий массовую рассылку. Способ получения отчетов о доставке определяется и корректируется в сценарии. Флаг успеха и неуспеха также выставляется сценарием в установленное поле таблицы абонентов.
-
Активация контрольного события.
-
Запуск по таймеру служебных действий, определенных администратором системы.
-
Асинхронный запуск служебного сценария из других сценариев.
-
Сценарий дозвона, запускамый при соответствующих настройках менеджером задач или менеджером автодозвона для преобразования номера абонента в особую команду и отправки его в одну из указанных внешних линий или необходимое направление (например вывод мобильных на GSM-шлюз).
-
Преобразования строк.
Для каких бы действий ни использовался сценарий, ему на вход в компонент старт передается строковый параметр. В случае обработки контента – строка содержащая контент, для сценария преобразования номера в команду — начальный номер и т.д.
Служебные переменные:
-
Статус отправленного сообщения. Используется при автоматической обработке исходящей задачи в многопоточном режиме для определения состояний отправленных SMS-сообщений. Среди возможных значений 0 – не отправлено, 1 – отправлено, 2 – доставлено. В результате заполнения переменной менеджер задач принимает решение об успехе, необходимости повтора отправки, либо о необходимости получения отчета о доставке в автоматическом режиме в конце выполнения задачи.
-
PushId отправленного сообщения. В случае фиксации состояния «отправлено» необходимо указать PushId сообщения, чтобы активировать функцию получения отчета о доставке в автоматическом режиме.
-
Возвращаемое значение 1. Используется в сценариях, осуществляющих преобразования или некоторую логику управления. Например в сценариях преобразования номера в команду направления, где на вход в компонент старт передается номер, а итоговая команда возвращается через эту служебную переменную.
-
Возвращаемое значение 2. Используется в сценариях, осуществляющих логику управления. Например в сценариях поиска абонента для звонка по задаче.
-
Возвращаемое значение 3. Используется в сценариях, осуществляющих логику управления. Например в сценариях поиска абонента для звонка по задаче.
Call-центрIP PBX Oktell: Получить путь к записи разговора, по завершению коммутации
IP PBX Oktell
Задача:
Приходит внешний звонок. Коммутируется с внутренней линией. После разговора необходимо отправить файл записи разговора на почтовый ящик.
Для этого нам понадобиться определить адрес этого файла.
Разберем пример нахождения пути, к данному файлу. Потом уже его можно без проблем отправить, воспроизвести и т.д.
В «Главном сценарии» создадим глобальную переменную «Флаг».
Присвоим ей значение «1» . Только в том случае, когда нам это необходимо.
Сохраняем.
Создаем служебный сценарий «1_Сбор контента».
Он будет назначен как «Служебный сценарий обработки контента». Подробнее про назначение сценария тут
В нем в качестве стартового параметра передается XML-файл, содержащий информацию о коммутации.
Создаем глобальную переменную «Флаг» ( в нее передается значение из Главного сценария).
Проверяем ее значение.
Анализируем XML-файл с помощью компонента «Парсер».
Поисковый запрос: commutation>property_simple[key=idconnection]
Сначала получаем количество коммутаций, в рамках цепочки коммутации. Берем последний ID коммутации. т.к. первый это ID коммутации с IVR сценарием.
Теперь получаем ID последней коммутации.
Выполняем SQL запрос в базу, для получения пути к файлу.
Т.к. имя файла не храниться в БД, то придется его «склеить»
SQL запрос :
declare @aln nvarchar(10)
declare @bln nvarchar(10)
declare @idrecdir int
declare @ts nvarchar(50)
declare @path nvarchar(1000)
select top 1 @aln=case when alinenum<blinenum then alinenum else blinenum end,
@bln=case when blinenum>alinenum then blinenum else alinenum end,
@idrecdir=idrecdir,
@ts=replace(convert(nvarchar(10), TimeStart, 121),’-‘,’_’)+’__’+replace(convert(nvarchar(20), TimeStart, 114),’:’,’_’) from A_Stat_Connections_1x1
where Id=@id and isrecorded=1
set @path=’C:Program FilesoktellServerRecordedFiles’
if (@idrecdir>0)
select @path=path from A_Stat_RecordDirectories where id=@idrecdir
set @filename=@path+replace(substring(@ts, 1, 10),’_’,»)+»+substring(@ts, 13, 2)+substring(@ts, 16, 2)+’mix_’+@aln+’_’+@bln+’__’+@ts+’.wav’
Назначаем параметры.
Сохраняем
SQL запрос вернет нам путь к файлу. Теперь его можно указать в качестве пути для отправку на почту, для воспроизведения и т.д. В примере для наглядности я просто вывел его в качестве уведомления.
Переходим в раздел «Общие настройки».
1) Тут назначаем «Служебный сценарий обработки контента»
2) Выставляем настройки записи разговоров.
Сохраняем
Осуществляем входящий звонок. Разговариваем. Кладем трубочку и видим уведомление:
D:RecFile201108241712mix_13001_16003__2011_08_24__17_12_30_327.wav
Call-центрIP PBX Oktell: Отобразить карточку диалога после ручного набора
IP PBX Oktell
Задача:
Оператор набирает номер в ручном режиме. Необходимо после разговора заполнить данные формы.
И так приступаем к реализации…
Нужно определять после какого конкретного звонка отображать карточку. Я решил ввести префикс, например *
Соответственно в сценарии маршрутизации внутренних звонков будем этот префикс анализировать.
Если есть префикс *, то удаляем его. И переключаем на внешнюю линию. Если переключение произошло, то определяем ID оператора (человека который набирает номер) и делаем запись в таблицу (структура таблицы чуть ниже). Далее дезактивируем и активируем задачу ( для чего и что за задачу-чуть ниже).
Создаем таблицу абонентов в разделе Call-центр.
Сохраняем.
Создаем еще одну таблицу, которая будет заполняться выборкой из таблицы User_tab_clients.
Т.е. выбираем все записи у кого поле status не равен 1
«Прикрепленная таблица БД» нужна для того, что бы в сценарии диалога использовать переменные типа «Поле таблицы»
Назначаем ID как «Идентификатор», phone как «Телефон»
Сохраняем.
Создаем сценарий диалога. В нем получаем имя оператора. Делаем запись в нашу таблицу. И присваиваем служебной переменной «Результат звонка» значение 2. Подробнее тут
Форма диалога выглядит так:
Используемые переменные:
Сохраняем сценарий.
Создаем задачу.
Тип: С запросом у оператора
Выбираем всех операторов, независимо от того, будут ли они участвовать задаче.
Выбираем вариант обхода операторов «Пользовательская процедура» ( о не чуть ниже)
В качестве таблицы абонентов выбираем вторую нашу таблицу. И ставим галочку «Синхронизировать со списком при каждой активации». Как раз для этого делали дезактивацию и активацию в сценарии маршрутизации внутренних звонков.
Выбираем наш сценарий, как сценарий запроса на дозвон.
Сохраняем и активируем задачу.
Теперь запускаем SQL Server Management Studio Express. Выполняем запрос:
SELECT [Id]
,[Name]
FROM [oktell_settings].[dbo].[A_TaskManager_Tasks]
В получившейся таблице находим нашу задачу и копируем ее ID.
Далее ищем хранимую процедуру A_TaskManager_OperatorsAll_Get_Custom в баз oktell и модифицируем ее.
Текст запроса:
—Задача «Карточка после ручного звонка»
if (@idtask = ‘42479030-427C-4F7F-9262-87512F5567AD’)
begin
select Operator_id as Id from User_tab_clients
where Id = @idabonent
return
end
—Дефолтные величины
Select Id
FROM A_Users u
Inner join A_UserParams up on u.Id = up.Iduser
Where IsOperator = 1
end
Где вместо «42479030-427C-4F7F-9262-87512F5567AD» пишем ID вашей задачи.
Нажимаем «Выполнить»
Теперь набираем номер, в нашем случае *89274365636 ( номер вымышлен)
Поговорили. Теперь нажимаем «Завершить» и у нас всплывает наша карточка.
Выбираем целевой или не целевой и нажимаем «Далее»
Вот и всё. Жду вопросов.
Call-центрIP PBX Oktell: Нагрузка на сервер
IP PBX Oktell
И так имеем:
— Oktell 2.6.110812
— Microsoft SQL Server Express Edition 9.00.4035.00 (установлен на той же машине)
— ОС Windows XP SP3
— 200 sip транков, настроенных на другой сервер Oktell. На котором настроена «долбежка» с проигрыванием файла.
Главный сценарий сделан так:
В мониторинге 200 одновременных коммутаций.
При этом нагрузка на сервер следующая:
Посмотрим статистику обработанных звонков за 16 дней:
И так, имея в распоряжении среднюю машину и Oktell, можно обрабатывать приличное количество звонков.
Call-центрIP PBX Oktell: Использование функций URL телефонов Yealink и web интерфейс Oktell
IP PBX Oktell
Используем телефон Yealink T22 и Oktell: 2.6.110811(4240.26472)
Переходим на вкладку Телефон>URL
Тут видим ряд событий, по наступлению которых можно сделать web-запрос на нужный нам адрес. Описание web-интерфейса Oktell тут
Используем запрос (запуск служебного сценария):
http://192.168.0.100:4055/execsvcscript?name=111&startparam1=DND_on&startparam2=Виктор&async=0&timeout=10
192.168.0.100 — IP адрес сервера Oktell
111 — название служебного сценария
В результате, как пример, выводим уведомления.
Call-центрIP PBX Oktell: Yeastar E1 Ye110 совместимость с материнскими платами
IP PBX Oktell
Многим известно, что Oktell поддерживает работу с платой Yeastar E1 Ye110.
За время ее эксплуатации были выявлены несколько материнских плат, в работе с которыми появлялись разного рода «полтергейсты» таких как: потеря синхронизации, треск во время разговора, заикания.
Вот список этих материнок:
— Asus P5K SE/EPU
— Asus P7Q57
— Asus P7H55
— Asus P7P55
— HP DL108
— HP DL140
— Super micro X8DA3
Работает на материнской плате: Asus P5VDC-MX.
Похоже дело в чипсетах. На Intel’ских работать не хочет.
Есть дополнения? Пишите! Дополним!
Call-центрIP PBX Oktell: Как настроить BLF на Linksys SPA942
IP PBX Oktell
Работает на Oktell’e от версии 2.6.110802 и Linksys SPA942 с версией прошивки 6.1.5(а)
Настраиваем Linksys SPA942 как на скрине.
Т.е. прописываем в поле Extended Function: fnc=fnc=blf+cp;sub=14@192.168.0.12;usr=14;nme=14
Где: 1) 192.168.0.12 ip адресс сервера Oktell.
2) 14 номер пользователя внутри Oktell.
При этом, что бы телефон отсылал SUBSCRIBE, нужно зарегистрировать любую другую линию на сервере Oktell.
Надеюсь кому-нибудь пригодится =)
При настройке Oktell часто бывает нужно создавать свои настройки произвольного характера, которые будут потом использоваться в различных сценариях (служебных, диалоговых, IVR и так далее). Для этого существует насколько вариантов:
1) Хранить настройки в базе и править их руками sql-запросами. Самый простой и самый унылый с точки зрения юзабилити при администрировании.
2) Создание плагина для редактирования настроек (при этом где и как хранятся нужные нам настройки — дело десятое). Очень хорош, весел для пользователя (когда всё в последствии заработат ), но и трудоёмок и не каждому настройщику oktell /администратору под силу.
3) Хранение настроек в текстовых файлах. Коль скоро Октел позволяет в рамках сценария прочитать содержимое текстового файла (компонент файловая операция), почему бы не воспользоваться этой возможностью, тем более, что редактировать и просматривать текстовый файл сильно проще чем таблицу БД.
Рассмотрим как можно организовать храниение и использование некоторых нужных нам настроек в рамках текстового файла на примере практической задачи.
ЗАДАЧА:
У нас есть Oktell, использующийся как ip-pbx. Есть несколько направлений вызова: мобильные, городские, область, междугородние, международные и т.д. Необходимо разграничить права пользователям Oktell по звонкам на эти направлениям. Замечу, речь не об октеловских направляниях, как о совокупности внешних линий, а о направлениях «по смыслу».
В общем случае задача решается через сценарий исходящей маршрутизации (он есть в примере в поставке oktell). Единственное, что нам необходимо, это организация списков направлений и списков разрешения доступа к направлениям. Будем для этого использовать текстовый файл.
РЕШЕНИЕ:
Для того, чтобы было удобнее разбирать конфиг-файл, с учётом наличия в oktell встроенного XML-парсера, оптимальнее всего организовать хранение настроек в xml-форме. Исходя из нашей задачи, предлагаю следующим образом:
<?xml version=»1.0″?>
<directionlist>
<direction name=»Мобильные» regex=»89[0-9]{9}»>
<userlist>
<user id=»B5DEE595-571D-4CDA-B13C-7E089067B1BC» name=»klepov»/>
<user id=»B6D07F51-D675-4818-AE61-AFC12C33FC8E» name=»vinogradova»/>
</userlist>
</direction>
<direction name=»Межгород» regex=»8(?![495|499]{3})[3,4,8]{1}[1-9]{1}[0-9]{8}»>
<userlist>
<user id=»B5DEE595-571D-4CDA-B13C-7E089067B1BC» name=»klepov»/>
<user id=»B6D07F51-D675-4818-AE61-AFC12C33FC8E» name=»vinogradova»/>
</userlist>
</direction>
</directionlist>
Список направлений direction, каждое соотнесение телефона к направлению предлагается сделать через регулярное выражение regex, внутри каждого направления список пользователей, имеющих право на дозвон по направлению (я использовал GUID-ы пользователей, но можно, к примеру, и логины, не принципиально).
Теперь создадим механизм считывания конфиг-файла. Оптимальнее создать специальный сценарий для проверки, а затем использовать его как вложеный (IVR). Для простоты отладки я буду все работы проводить в служебном сценарии:
Алгоритм работы сценария:
1) Считываем значения номера телефона и ИД пользователя (с учётом того, что я отлаживал служебный сценарий и вызывал его из веб-интерфейса oktell, я использовал «Входной параметр 1/2», во вложенный IVR можно передавать через глобальные переменные).
2) Читаем файл (компонент «файловая операция»)
3) Читаем количество направлений в файле (запрос >direction ) и организуем цикл (в качестве счётчика цикла используем переменную с количеством направлений в файле, т.е. просмотр будет вестись с последнего направления) для их просмотра
4) Выбираем направление ‘>direction:eq(‘+[КоличествоНаправлений]+’)’, выбираем регулярное выражение (атрибут regex из направления)
5) Проверяем регулярным выражением, подходит ли телефон на который мы звоним (подан на вход сценария) направлению через тот же компонент парсер.
6) Если номер подходит ищем запросом ‘>>user[id=’+[Пользователь]+’]’ идентификатор нашего пользователя. Если нашли, сценарий возвращает единицу, в знак того, что пользователю по направлению доступ разрешён, в простивном случае идём дальше по циклу.
7) Если телефон не попал ни в одно из направлений либо пользователь в списке разрешённых не найден выходим из цикла с нулём в возвращаемом значении. (Ну и при ошибк возвращаем -1 )
Сценарий: http://yadisk.cc/d/PQO_ue66Plq
Задача решена стандартными средствами Oktell без разного рода хитрых финтов ушами.
Вопросы приветствуются!
Статья Call-центр Oktell (Архив) содержит неполное описание. Чтобы дополнить описание, нам нужно знать, о чем писать. Вы можете помочь нам в этом, отправив письмо на support@bitmaster.ru, указав в теме письма название этой страницы («Call-центр Oktell (Архив)»).
Call-центр Oktell (Архив) — это гибкая коммуникационная платформа, позволяющая автоматизировать телефонное и информационное обслуживание.
Модуль интеграции с call-центром Oktell — это модуль, который позволяет Такси-Мастер работать с call-центром Oktell.
Модуль интеграции с Oktell позволяет автоматизировать входящие и исходящие операторские кампании, организовать автоматизированный обзвон, управлять операторскими ресурсами.
На пользование Oktell предоставляются лицензии, количество которых оговаривается при покупке и зависит от количества внешних и внутренних линий компании. В соответствии с количеством пользователей задается необходимое количество внутренних линий.
Содержание
- 1 Возможности модуля
- 2 Настройка взаимодействия
- 2.1 Схема настройки
- 3 Сценарии
- 3.1 Создание нового сценария
- 3.2 Параметры сессии
- 4 TMOM
- 5 Ссылки
- 6 Дополнительные материалы в блоге Такси-Мастер
Возможности модуля
Модуль интеграции с Oktell предоставляет большие возможности для развития телефонии.
Часто используемые возможности — это:
- Автоматическое определение категории телефона (новый клиент, постоянный клиент, водитель) по номеру, с которого пришел входящий звонок.
- Автоматический отзвон по изменению состояния заказа.
- Голосовое меню (IVR) для клиентов, водителей и операторов.
- Набор номера из карточки заказа
- Запись телефонных разговоров
- Очередь звонков
- Неограниченное количество операторов
- Неограниченное количество внешних/внутренних линий
- Маршрутизация исходящих вызов по типу: мобильные, городские, по операторам мобильной связи
- Удержание вызова
- Музыка в режиме ожидания
- Озвучивание позиции в очереди
- Автосекретарь для исходящей связи: автоматическое информирование клиентов о смене состояния заказа. Например, при принятии заказа водителем, выборе времени за которое он доедет до клиента, автоинформатор позвонит клиенту, проговорит следующую фразу: «Служба заказ такси! Через 10 минут к Вам подъедет черный BMW, гос. номер 777». На любое состояние заказа Такси-Мастер можно назначить индивидуальный автообзвон.
- Автосекретарь для входящей связи: автоматическое информирование клиентов, при входящем звонке, о текущем состоянии заказа.
- Подготовка аудиозаписей для автоинформатора: комплект аудиозаписей, которые используются для работы автоинформатора: фразы приветствия с названием Вашей службы, перечень марок автомобилей, цветов и т.д.
- Автоматический прием заказов с городских телефонных номеров.
- Отчеты о звонках: входящие, исходящие, пропущенные.
- Настройка внутренних линий для офисной телефонии, отделение звонков диспетчерской от офиса.
Настройка взаимодействия
Oktell устанавливается на сервер организации, после чего в окне «Карта сети» Oktell задается взаимодействие компонентов программы для корректной настройки телефонии.
Схема настройки
- Все разновидности телефонии, которые присутствуют в организации, соединяются с сервером Oktell через специальные шлюзы (за исключением SIP-телефонии), которые преобразуют аналоговую информацию в цифровую. Оптимальным вариантом будет использование SIP-телефонии, так как для нее не требуется установка дополнительного оборудования в виде шлюзов и процесс настройки будет не таким трудоемким.
- Все шлюзы соединяются с роутером или свитчем.
- Свитч или роутер непосредственно соединятся с сервером Oktell.
- Также через свитч или роутер происходит соединение каждого рабочего места, то есть персонального компьютера, с сервером Oktell. На каждом рабочем месте установлен программный телефон — софтфон, с помощью которого происходит прием и обработка звонков.
- С компьютерами соединяются USB-гарнитуры.
Пунктирными линиями задается логическая связь телефона с компьютером, то есть call-центр обращается сначала к компьютеру, а компьютер уже непосредственно к телефону.
Сплошными линиями задается прямое взаимодействие call-центра и телефона.
Обратите внимание, что мы не рекомендуем размещать сервер Oktell и сервер Такси-Мастер на одном компьютере при большом объеме заказов.
Сценарии
Сценарий — это последовательная схема задачи действий, которые полностью автоматизируют работу call-центра, используя интерфейс клиентского приложения или иные подручные средства.
Хранение всех сценариев происходит на диске в каталоге проектов в виде папок, содержащих xml файл и прикрепленные к нему дополнительные файлы данных.
В списке перечислены все существующие в Oktell сценарии, которые могут задаваться самостоятельно. Также часть сценариев прошита непосредственно в состав программы и уже существует в Oktell.
В графе Типы располагаются типы сценариев, которые могут быть трех видов:
- Служебные — сценарии, которые обращаются к базе данных, посылают уведомления, осуществляют проверки, принимают и отправляют SMS и могут инициировать звонки. В общем случае это сценарии, которые выполняют различные действия без привязки к линиям и операторам
- Сценарии диалога — сценарии, которые помогают оператору при обработке звонка в call-центр.
- IVR — сценарии, которые представляют собой предварительно записанные голосовые сообщения, выполняющие функцию маршрутизации звонков внутри call-центра. В основном это исходящие телефонные кампании.
Создание нового сценария
Задание нового сценария происходит во вкладке Редактор окна «Сценарии» и происходит с помощью взаимосвязи инструментов. Для перехода в режим редактирования дважды щелкните на названии сценария в таблице или нажмите кнопку Создать внизу.
Редактор сценариев состоит из 3 основных элементов управления:
- Среда визуального представления
- Окно с перечнем доступных компонентов
- Инспектор объектов
Каждый инструмент представляет собой определенную команду действий, которые должны выполнятся последовательно. Сценарий может выглядеть как небольшой набор действий для какой-либо определенной ситуации, например, отзвон клиенту с сообщением о том, что автомобиль на заказ не найден, так и в качестве синтеза небольших наборов в виде алгоритма последовательных действий, оптимально применимых к различным ситуациям, возникающим по ходу приема и выполнения заказа.
По каждому инструменту существует меню Инспектор объектов, которое всплывает при выборе какого-либо инструмента из списка, либо же по нажатию кнопки F11.
Связь задается соединением необходимых инструментов друг с другом сплошной линией, пошаговое выполнение которых представляет собой алгоритм действий, которые будут выполнятся в указанном порядке.
Алгоритм сценария может включать многовариантность действий со всевозможными вариантами развития событий. Варианты задаются в виде разветвления, которое показывает выполняется данное действие или нет.
Подробнее о создании и редактировании сценариев вы можете узнать, перейдя по этой ссылке
Параметры сессии
Параметры сессии в Oktell — это часть сценария, которая автоматизирует некоторую задачу, которую без сценария пользователь делал бы вручную. То есть это определенный шаблон действий в Oktell, который находится в базе данных и при каждом звонке предоставляет возможность получать необходимую информацию.
Название | Расшифровка |
---|---|
TMCategory | ИД категории телефона |
TMClientID | ИД клиента, найденный по справочнику «Телефоны клиентов» |
TMClientBalance | Tекущее значение баланса на счету клиента |
TMOrderClientID | ИД клиента, для которого выполняется заказ, обычно совпадает с TMClientID |
TMOperPhone | Номер телефона диспетчера, создавшего заказ |
TMDriverPhone | Номер сотового телефона водителя |
TMPhoneSystemCategory | Тип категории телефона (0 — «обычный», 1 — «черный», 2 — «белый», 3 — «серый») |
TMOrderID | ИД заказа; |
TMDriverID | ИД водителя |
TMDriverTypeID | ИД группы экипажа водителя; |
TMIsPrior | Признак предварительного заказа (0 — обычный, 1 — предварительный) |
TMAutoinformerRecord | Файл с записью информации об автомобиле экипажа |
TMOrderStateID | ИД состояния заказа |
TMConnectionString | Путь к базе данных ([имя сервера]:[путь к файлу]) |
TMCrewSystemState | Тип состояния экипажа (0 — свободен, 1 — не работает, 2 — на заказе, 3 — перерыв) |
TMCrewID | ИД экипажа |
TMSourceStreetName | Наименование улицы адреса подачи |
TMSourceHouse | Номер дома адреса подачи |
TMSourceFlat | Номер квартиры адреса подачи |
TMCallerID | CallerID (номер телефона абонента) |
TMPhoneToDial | Номер телефона, на который необходимо отзвонить по заказу |
TMDriverRemainder | Текущее значение баланса на счету водителя |
TMDiscountedSumm | Cумма заказа |
TMMusicPath | Путь к папке, содержащей файлы озвучки наименований улиц |
TMDriverTimecount | Приблизительное время доезда до адреса подачи в минутах, указываемое водителем через мобильное устройство |
TMSourceTime | Aбсолютное время доезда к адресу подачи |
TMSourceTimecount | Приблизительное время доезда до адреса подачи в минутах, указываемое оператором в карточке заказа |
В зависимости от абонента используются разные наборы дополнительных параметров сессии:
Абонент — водитель |
TMDriverID TMDriverRemainder TMOrderID TMOrderStateID TMCrewID TMCrewSystemState TMDriverTypeID TMSourceStreetName TMSourceHouse TMSourceFlat TMPhoneToDial TMDiscountedSumm |
Абонент — клиент/заказчик |
TMCategory; TMPhoneSystemCategory; TMClientID; (только для клиентов) TMClientBalance; (только для клиентов) TMOrderID; TMOrderClientID; TMIsPrior; TMOrderStateID; TMCrewID; TMDiscountedSumm; TMSourceStreetName; TMSourceHouse; TMSourceFlat; TMPhoneToDial; TMDriverPhone; TMOperPhone; TMAutoinformerRecord; TMDriverTimecount; TMSourceTime; TMSourceTimecount. |
TMOM
TMOM — программа, которая поставляется в комплекте с Такси-Мастер и служит для связи call-центра Oktell и программы Такси-Мастер. В ней задаются основные исходящие телефонные кампании, которые производит фирма.
Создание новой исходящей кампании:
- Запустите программу tmom.exe.
- Чтобы создать новую кампанию в меню «Файл» выберите пункт «Настройки», после чего у вас появится окно «Настройки», которое необходимо заполнить в соответствии с существующей информацией.
- Для того, чтобы осуществить подключение к call-центру Oktell, заполните группу «Подключение к колцентру»:
- В поле Логин введите логин пользователя call-центра.
- В поле Пароль введите пароль пользователя call-центра.
- Нажмите кнопку Тест для проверки правильности ввода логина и пароля. Если подключение было произведено, то индикатор примет зеленый цвет. В противном же случае индикатор примет красный цвет и в поле будет указана причина неуспешного подключения к call-центру.
- Заполните поля группы «Общие настройки»:
- В поле Период обработки заявок (мин) укажите количество минут, в течение которых будет происходить обработка определенной заявки.
- В поле Цвет заголовков таблиц из выпадающего списка выберите тот цвет, которым будут окрашены заголовки таблиц
- Следующим действием необходимо произвести ввод базы данных. Для этого нажмите кнопку Добавить базу данных и в появившемся окне «Новая база данных» введите параметры базы данных:
- В поле Сервер введите ИД сервера Такси-Мастер.
- В поле Путь введите путь к базе данных.
- В поле Логин введите логин пользователя Такси-Мастер.
- В поле Пароль введите пароль пользователя Такси-Мастер.
- Нажмите ОК для подтверждения.
- Теперь у вас полностью заполнена группа «Подключение к базе данных». Нажмите кнопку Тест, чтобы проверить успешность подключения к базе данных. Если подключение было произведено, то индикатор примет зеленый цвет. В противном же случае индикатор примет красный цвет и в поле будет указана причина неуспешного подключения к базе данных.
- Чтобы добавить новую исходящую кампанию нажмите кнопку Добавить исходящую кампанию, после чего у вас появится окно «Новая исходящая компания».
- В окне «Новая исходящая компания» в поле Идентификатор введите номер идентификации исходящей кампании. Для этого нажмите кнопку слева от поля Создать новый идентификатор.
- В поле Тип из предложенного списка выберите тип исходящей кампании. Автоматически при выборе типа в поле Описание появится его краткое содержание.
- Нажмите Оk для подтверждения создания новой кампании.
- В группе «Параметры исходящей кампании» задайте необходимые настройки для кампании:
- В поле Идентификатор автоматически проставляется идентификационный номер новой кампании.
- В поле Наименование введите название кампании.
- В поле Служебный сценарий укажите сценарий, в котором будет использоваться данная исходящая кампания.
- Нажмите кнопку Сохранить.
Теперь автоинформатор будет проводить оповещение согласно созданной кампании. Он будет автоматически видеть заказы и производить звонки для донесения соответствующей информации в рамках сценария. Обратите внимание на то, что во время работы программы Такси-Мастер tmom должен быть включен для взаимосвязи процессов.
Для каждого автомобиля необходимо задать звуковые сообщения для уведомления клиента о подаче экипажа, которые включают в себя общее описание автомобиля, его цвет, государственный номер и марку. Эти данные автоинформатор будет проговаривать клиенту при отзвоне.
Задать звуковые файлы для автомобиля можно в справочнике «Автомобили» в соответствующих полях группы «Звуковые файлы или записи из медиатеки» в карточке конкретно выбранного автомобиля.
Необходимо задать путь к конкретному звуковому файлу из библиотеки Oktell, который будет соответствовать общему описанию, марке и цвету автомобиля. Звуковой файл для государственного номера можно не задавать, поскольку Oktell произносит автоматически тот номер автомобиля, который соответствует его номеру в карточке. Часть звуков уже включена в состав библиотеки, а необходимые звуковые файлы вы можете записать самостоятельно.
Подключение и настройку call-центра Oktell полностью производит техническая поддержка.
Ссылки
- http://oktell-systems.ru/ — официальный сайт call-центра Oktell.
- http://wiki.oktell.ru/Заглавная_страница — документация по call-центру Oktell.
- http://www.taximaster.ru/solutions/oktell — информация про модуль интеграции с call-центром Oktell.
- http://ru.wikipedia.org/wiki/Call-центр — о call-центрах на Википедии.
- http://ru.wikipedia.org/wiki/IVR — об интерактивном голосовом меню на Википедии.
Дополнительные материалы в блоге Такси-Мастер
- Отчет такси: статистика звонков
- Статистика звонков — один из важнейших отчетов для службы такси. Благодаря анализу статистики вы поймете, стоит ли подключать больше линий связи, увеличивать или сокращать штат операторов, улучшать систему мотивации для диспетчеров.
-
September 3 2010, 21:40
Делимся сценариями для массового обзвона по списку Excel файла при помощи Октела.
У нас есть Excel файл in.olp.ru/oktell/obzvon.xls
Наша задача — позвонить всем клиентам из списка и в автоматическом режиме воспроизвести им номер лицевого счета и сумму задолженности.
Служебный сценарий Oktell проходит по списку один раз (в данном примере). После обзвона всех клиентов Oktell расставляет результаты звонка:
- дозвонились
- не дозвонились
- прослушал полностью
После дозвона система вводит абонента в голосовой сценарий, который воспроизводит абоненту номер лицевого счета (или договора) и сумма задолженности.
Мы пользуемся для исходящего обзвона SIP-провайдером, который позволяет подставлять любой номер в качестве АОН для абонента. Используется одновременно до 20 линий.
Решение доступно для приобретения на базе Call-центра Oktell www.olp.ru/practice/mass.php
До конца октября 2010 года техническую поддержку на один год дарим безвозмездно. Вы платите только за лицензии и исходящую связь — любому SIP-провайдеру. Или обращайтесь к нам за подстановкой любого номера.