Урок 17 Маршрутизация звонка — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
 
(не показана одна промежуточная версия этого же участника)
Строка 1: Строка 1:
[[Уроки|Наверх]]
+
{|cellpadding="10" cellspacing="0" border="0"
 +
| [[Уроки | Наверх]]
 +
| [[Урок 16 Простейший IVR сценарий | К предыдущему уроку]]
 +
| [[Урок_18_Голосовое_взаимодействие| К следующему уроку]]
 +
|-
 +
|}
  
 
__TOC__
 
__TOC__
  
В этом уроке разбирается маршрутизация звонка в IVR-сценарии. В статье подробно описываются компоненты ветвления и переключения, разбираются переменные и выражения в '''Oktell'''.  
+
В этом уроке разбирается маршрутизация звонка в '''IVR-сценарии'''. В статье подробно описываются компоненты ветвления и переключения, разбираются переменные и выражения в '''Oktell'''.  
 +
 
 +
 
 +
[[Файл:Урок17-009.png | center]]
 +
 
 +
 
 +
===Общая информация===
  
 
'''Маршрутизация звонка''' - процесс определения маршрута обработки звонка на основании некоторых условий. Алгоритм сценария определяет маршрут прохождения вызова в зависимости от текущего значения переменных.  
 
'''Маршрутизация звонка''' - процесс определения маршрута обработки звонка на основании некоторых условий. Алгоритм сценария определяет маршрут прохождения вызова в зависимости от текущего значения переменных.  
Строка 10: Строка 21:
  
 
* ID коммутации - уникальный номер каждой коммутации. По этому номеру можно однозначно восстановить все параметры коммутации (дата/время звонка, абоненты и прочее)  
 
* ID коммутации - уникальный номер каждой коммутации. По этому номеру можно однозначно восстановить все параметры коммутации (дата/время звонка, абоненты и прочее)  
* номер абонента (CallerID) - номер инициатора звонка. Например, при входящем звонке - это номер того, кто позвонил.  
+
* номер абонента ('''CallerID''') - номер инициатора звонка. Например, при входящем звонке - это номер того, кто позвонил.  
* набираемый номер (CalledID) - номер адресата звонка. Например, при входящем звонке - это ваш номер или абонента, кому позвонили.  
+
* набираемый номер ('''CalledID''') - номер адресата звонка. Например, при входящем звонке - это ваш номер или абонента, кому позвонили.  
 
* тип, номер линии
 
* тип, номер линии
 
* дата, время, день недели
 
* дата, время, день недели
Строка 19: Строка 30:
 
* значения, полученные путем SQL запросов
 
* значения, полученные путем SQL запросов
  
По каждому из параметров (в Oktell их порядка 40) можно маршрутизировать звонок в зависимости от поставленных задач.
+
По каждому из параметров (в Oktell их порядка 40) можно маршрутизировать звонок в зависимости от поставленных задач. Для ветвления сценария используются компоненты "'''Сравнение'''" и "'''Меню'''".  
  
 
'''IVR-сценарий''' в процессе выполнения должен закончиться одним из двух вариантов:
 
'''IVR-сценарий''' в процессе выполнения должен закончиться одним из двух вариантов:
 +
 
*'''Соединить с абонентом.''' В качестве абонента может выступать внешний номер или пользователь системы. В конце сценария используется компонент "'''Стоп'''".
 
*'''Соединить с абонентом.''' В качестве абонента может выступать внешний номер или пользователь системы. В конце сценария используется компонент "'''Стоп'''".
*'''Выполнить какое либо действие и завершиться.''' Например, проиграть звуковое оповещение, записать DTMF-символ в базу данных и т.д. В конце сценария используется компонент "'''Разрыв связи'''".
+
*'''Выполнить какое либо действие и завершиться.''' Например, проиграть звуковое оповещение, записать '''DTMF'''-символ в базу данных и т.д. В конце сценария используется компонент "'''Обрыв связи'''".
 +
 
 +
 
 +
===Создание сценария===
 +
 
 +
'''Задача:''' Компания работает с 9 до 18 часов. Маршрутизацию звонка предлагается проводить по текущему времени. Если входящий звонок попадает в график работы, то '''IVR''' переключает его на секретаря (исход - соединение с сотрудником). Если входящий звонок поступает вне этого периода времени, то ему проговаривается звуковое оповещение и связь разрывается (исход - Обрыв связи).
 +
 
 +
'''1.''' Создаем новый IVR сценарий.
 +
 
 +
'''2.''' Компоненты Старт и Поднять трубку разбирались на ''уроке 16''.
 +
 
 +
'''3.''' Для того, чтобы маршрутизировать звонок по времени, необходимо записать текущее время в переменную. Для этого используется компонент Присвоение.
 +
 
 +
В поле "'''Переменная'''" в инспекторе объектов необходимо выбрать переменную, в которую мы хотим присвоить значение. Нажмите "'''...'''". Откроется список со всеми переменными, созданными в сценарии. В каждом сценарии есть несколько служебных переменных для определения некоторых параметров звонка. Также вы можете создать свои пользовательские переменные. Можно создать:
 +
* '''Числовая''' - используется для хранения чисел. Используется редко, так как можно создать строковую переменную и при необходимости преобразовывать ее к числу (преобразование '''NUM([строка])''').
 +
* '''Строковая''' - наиболее распространенный формат хранения переменных. Может быть преобразован к любому другому формату.
 +
* '''Дата/Время''' - используется для хранения даты и времени.
 +
* '''Поле таблицы''' - используется для связи с таблицей абонентов в задачах. Будут рассматриваться в следующих уроках.
 +
 
 +
Переменные по типу размещения бывают:
 +
* '''Локальные''' - переменная этого типа доступна только в данном сценарии.
 +
* '''Сессионные''' - переменная этого типа доступна во всех сценариях, выполняющихся в рамках данной коммутации. Используются для передачи переменных между сценариями.
 +
* '''Глобальные''' - переменная этого типа доступна во всех сценариях в системе. Используется для хранения единых значений, подсчета переходов по некоторой ветке и других общесистемных задач.
 +
 
 +
Для создания переменной нажмите "Добавить". В открывшемся окне "'''Создание переменной'''" введите
 +
 
 +
* Название переменной - В примере, '''текущий_час'''.
 +
<span style="color:red;"> ВНИМАНИЕ: Названия переменных регистрозависимы. Переменные "дата", "Дата" и "ДАТА" - разные переменные!
 +
* '''Тип переменной''' - В примере, '''Строковая'''
 +
 
 +
* '''Тип размещения''' - В примере, '''Локальная'''
 +
 
 +
Нажмите '''ОК'''. В списке '''Выбор переменной''' кликните два раза по созданной переменной или выбрав переменную нажмите '''ОК'''.
 +
 
 +
 
 +
[[Файл:Урок17-001.png| 800px | center]]
 +
 
 +
 
 +
'''4.''' В поле "'''Значение'''" выберите аргумент, который будет присвоен в переменную "'''текущий_час'''". Аргументом может являться:
 +
* '''Константа''' - некоторое постоянное значение. Можно сразу записывать в инспекторе объектов, не открывая данное окно.
 +
* '''Переменная''' - по сути, переприсваивание. Значение выбранной переменной будет записано в текущую. 
 +
* '''Выражение''' -  последовательность действий, оперирующая с константами и переменными. Например, ''''Текст'+[переменная]'''.
 +
 
 +
<span style="color:red;"> ВНИМАНИЕ: Если вы захотите исправить выражение непосредственно из свойств компонента, '''не пользуясь редактором выражений''' - ваше выражение '''станет строкой''' и сценарий будет работать некорректно!
 +
 
 +
* '''Функция''' - некоторое значение, определяемое системой.
 +
 
 +
Так как, в примере, мы будем маршрутизировать звонок в зависимости от часа, выберите аргумент "'''Функция'''" - "'''Текущий час'''". Нажмите '''ОК'''.
 +
 
 +
 
 +
<center>[[Файл:Урок17-002.png |600px ]][[Файл:Урок17-003.png]] </center>
 +
 
 +
 
 +
'''5.''' Выведите уведомление, в котором будет показываться чему равен текущий час. Для этого ставим компонент "Уведомление". Выберите следующие поля:
 +
* '''Адресат''' - выберите своего пользователя.
 +
* '''Текст''' - Выражение:
 +
'Текущий час = '+[текущий_час]
 +
 
 +
<span style="color:red;"> ВНИМАНИЕ: Для проверка выражения нажмите "'''Проверить корректность выражения'''".
 +
 
 +
 
 +
[[Файл:Урок17-004.png| 700px|center ]]
 +
 
 +
 
 +
'''6.''' Переходим к маршрутизации. Воспользуемся компонентом '''Сравнение'''. Если текущий час меньше 9, то офис не работает. Если текущий час больше 9, переходим к следующему сравнению.
 +
 
 +
* '''Аргумент 1''' - переменная "'''текущий_час'''".
 +
* '''Аргумент 2''' - в поле впишите сразу "'''9'''". Это значение будет являться строкой.
 +
* '''Тип сравнения''' - меньше "'''<'''"
 +
 +
 
 +
[[Файл:Урок17-005.png|center ]]
 +
 
 +
 
 +
'''7.''' Итак, если текущий час меньше 9 (ветка - '''Правда'''), поставьте уведомление с фразой "офис не работает" и после него компонент "Обрыв связи". Чтобы провести соединение по ветке '''Правда''' от компонента сравнение, зажмите '''CTRL''' и '''левой кнопкой мыши''' проведите соединение.
 +
 
 +
<span style="color:red;"> ВНИМАНИЕ: Любую ветку компонента всегда можно задать вручную через соответствующее свойство, однако это занимает больше времени.
 +
 
 +
 
 +
[[Файл:Урок17-006.png|center ]]
 +
 
 +
 
 +
'''8.''' Если текущий час больше 9 (ветка - '''Ложь'''), то переходим к следующему сравнению - текущий час больше 18?
 +
 
 +
* '''Аргумент 1''' - переменная "'''текущий_час'''".
 +
* '''Аргумент 2''' - "'''18'''".
 +
* '''Тип сравнения''' - меньше "'''>'''"
 +
 
 +
Чтобы провести соединение по ветке '''Ложь''' от компонента сравнение, зажмите '''CTRL''' и '''правой кнопкой мыши''' проведите соединение.
 +
 +
 
 +
[[Файл:Урок17-007.png|center ]]
 +
 
 +
 
 +
'''9.''' У следующего сравнения пользуемся тем же способом. Если время больше 9 (ветка - '''Правда'''), переходим на '''Уведомление'''. Если меньше 18 (но больше 9, как следует из предыдущего сравнения), то переходим на соединение с пользователем.
 +
 
 +
'''10.''' Компонент "'''Переключение на номер'''" - является основным компонентом для соединения с пользователями '''Oktell'''. Для работы укажите следующие поля:
 +
 
 +
* '''Назначение''' - Внутрь
 +
* '''Номер''' - внутренний номер сотрудника (групповой, быстрый номер). В примере, 101.
 +
* '''Очередь ожидания''' - '''Да'''. Если сотрудник в разговоре, то вы попадете в очередь ожидания. Если очередь ожидания будет выключена, а сотрудник будет в разговоре, то вы перейдете по ветке занято.
 +
 
 +
После переключения поставьте компонент "'''Стоп'''". Этого недостаточно, необходимо также обработать остальные ветки, например, что делать если сотрудник недоступен, занят или отсутствует.
 +
 
 +
<span style="color:red;"> ВНИМАНИЕ: Если эти ветки не указаны, то, по умолчанию, переход идет на "'''Обрыв связи'''".
 +
 
 +
Чтобы определить эти ветки зажмите цифру "'''2'''" и проведите соединение до компонента "'''Обрыв связи'''". Будет проведена ветка "'''Переход, занято'''". Проведите линии зажав цифры "'''3'''"-"'''6'''". Переходы автоматически проставятся в свойствах компонента.
 +
 
 +
Вообще говоря, при создании рабочего сценария эти ветки необходимо обрабатывать с помощью других переключений или воспроизведений. Если делать просто "'''Обрыв связи'''", как в этом уроке, то клиенты не будут понимать в чем дело и их надо оповещать. Данный сценарий был создан исключительно в обучающих целях.
 +
 
 +
 
 +
[[Файл:Урок17-008.png|center ]]
 +
 
 +
 
 +
'''11.''' Перейдите на вкладку "'''Сохранение'''" и сохраните ваш сценарий "'''На сервер'''". Протестируйте ваш сценарий, как было описано в уроке 16.
 +
 
 +
'''Скачать сценарий:''' [http://wiki.oktell.ru/images/8/87/%D0%A3%D1%80%D0%BE%D0%BA_17.zip Урок17.zip]
 +
 
 +
'''Поздравляем!''' Вы научились маршрутизировать звонок в IVR-сценарии. Можете переходить к следующему уроку.
 +
 
 +
'''Техническая документация:'''
 +
* [[Общие компоненты сценариев]] и [[Компоненты сценариев IVR]]
 +
* [[Аргументы]], [[Переменные]], [[Выражения]], [[Аргументы]], [[Функции]], [[Правило включения типов]]
 +
 
 +
===Вопросы и задания===
 +
 
 +
* Внимательно изучите техническую документацию связанную с переменными.
 +
 
 +
* Прочитайте и опробуйте статью [[Маршрутизация звонка на основании параметров]]
 +
 
 +
* Реализуйте сценарий маршрутизации по имени пользователя: при звонке на внутренний номер запуска IVR определяется имя пользователя, если оно совпадает с вашим вам выводится уведомление "Здравствуйте" и происходит соединение с некоторым сотрудником. Если на сценарий IVR позвонит другой пользователь выведите уведомление этому пользователю с его именем и внутренним номером (воспользуйтесь функциями), затем происходит соединение с вашим пользователем.  
  
'''Пример:''' Компания работает с 9 до 18 часов. Маршрутизацию звонка предлагается проводить по текущему времени. Если входящий звонок попадает в график работы, то '''IVR''' переключает его на секретаря (исход - соединение с сотрудником). Если входящий звонок поступает вне этого периода времени, то ему проговаривается звуковое оповещение и связь разрывается (исход - разрыв связи).
+
{|cellpadding="10" cellspacing="0" border="0"
 +
| [[Уроки | Наверх]]
 +
| [[Урок_16_Простейший_IVR_сценарий | К предыдущему уроку]]
 +
| [[Урок_18_Голосовое_взаимодействие| К следующему уроку]]
 +
|-
 +
|}

Текущая версия на 13:57, 14 марта 2014

Наверх К предыдущему уроку К следующему уроку

В этом уроке разбирается маршрутизация звонка в IVR-сценарии. В статье подробно описываются компоненты ветвления и переключения, разбираются переменные и выражения в Oktell.


Урок17-009.png


Общая информация

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

Значения переменных могут быть определены функциями:

  • ID коммутации - уникальный номер каждой коммутации. По этому номеру можно однозначно восстановить все параметры коммутации (дата/время звонка, абоненты и прочее)
  • номер абонента (CallerID) - номер инициатора звонка. Например, при входящем звонке - это номер того, кто позвонил.
  • набираемый номер (CalledID) - номер адресата звонка. Например, при входящем звонке - это ваш номер или абонента, кому позвонили.
  • тип, номер линии
  • дата, время, день недели
  • значение очереди
  • порядка 40 определяемых системой значений
  • значения DTMF сигналов
  • значения, полученные путем SQL запросов

По каждому из параметров (в Oktell их порядка 40) можно маршрутизировать звонок в зависимости от поставленных задач. Для ветвления сценария используются компоненты "Сравнение" и "Меню".

IVR-сценарий в процессе выполнения должен закончиться одним из двух вариантов:

  • Соединить с абонентом. В качестве абонента может выступать внешний номер или пользователь системы. В конце сценария используется компонент "Стоп".
  • Выполнить какое либо действие и завершиться. Например, проиграть звуковое оповещение, записать DTMF-символ в базу данных и т.д. В конце сценария используется компонент "Обрыв связи".


Создание сценария

Задача: Компания работает с 9 до 18 часов. Маршрутизацию звонка предлагается проводить по текущему времени. Если входящий звонок попадает в график работы, то IVR переключает его на секретаря (исход - соединение с сотрудником). Если входящий звонок поступает вне этого периода времени, то ему проговаривается звуковое оповещение и связь разрывается (исход - Обрыв связи).

1. Создаем новый IVR сценарий.

2. Компоненты Старт и Поднять трубку разбирались на уроке 16.

3. Для того, чтобы маршрутизировать звонок по времени, необходимо записать текущее время в переменную. Для этого используется компонент Присвоение.

В поле "Переменная" в инспекторе объектов необходимо выбрать переменную, в которую мы хотим присвоить значение. Нажмите "...". Откроется список со всеми переменными, созданными в сценарии. В каждом сценарии есть несколько служебных переменных для определения некоторых параметров звонка. Также вы можете создать свои пользовательские переменные. Можно создать:

  • Числовая - используется для хранения чисел. Используется редко, так как можно создать строковую переменную и при необходимости преобразовывать ее к числу (преобразование NUM([строка])).
  • Строковая - наиболее распространенный формат хранения переменных. Может быть преобразован к любому другому формату.
  • Дата/Время - используется для хранения даты и времени.
  • Поле таблицы - используется для связи с таблицей абонентов в задачах. Будут рассматриваться в следующих уроках.

Переменные по типу размещения бывают:

  • Локальные - переменная этого типа доступна только в данном сценарии.
  • Сессионные - переменная этого типа доступна во всех сценариях, выполняющихся в рамках данной коммутации. Используются для передачи переменных между сценариями.
  • Глобальные - переменная этого типа доступна во всех сценариях в системе. Используется для хранения единых значений, подсчета переходов по некоторой ветке и других общесистемных задач.

Для создания переменной нажмите "Добавить". В открывшемся окне "Создание переменной" введите

  • Название переменной - В примере, текущий_час.

ВНИМАНИЕ: Названия переменных регистрозависимы. Переменные "дата", "Дата" и "ДАТА" - разные переменные!

  • Тип переменной - В примере, Строковая
  • Тип размещения - В примере, Локальная

Нажмите ОК. В списке Выбор переменной кликните два раза по созданной переменной или выбрав переменную нажмите ОК.


Урок17-001.png


4. В поле "Значение" выберите аргумент, который будет присвоен в переменную "текущий_час". Аргументом может являться:

  • Константа - некоторое постоянное значение. Можно сразу записывать в инспекторе объектов, не открывая данное окно.
  • Переменная - по сути, переприсваивание. Значение выбранной переменной будет записано в текущую.
  • Выражение - последовательность действий, оперирующая с константами и переменными. Например, 'Текст'+[переменная].

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

  • Функция - некоторое значение, определяемое системой.

Так как, в примере, мы будем маршрутизировать звонок в зависимости от часа, выберите аргумент "Функция" - "Текущий час". Нажмите ОК.


Урок17-002.pngУрок17-003.png


5. Выведите уведомление, в котором будет показываться чему равен текущий час. Для этого ставим компонент "Уведомление". Выберите следующие поля:

  • Адресат - выберите своего пользователя.
  • Текст - Выражение:
'Текущий час = '+[текущий_час]

ВНИМАНИЕ: Для проверка выражения нажмите "Проверить корректность выражения".


Урок17-004.png


6. Переходим к маршрутизации. Воспользуемся компонентом Сравнение. Если текущий час меньше 9, то офис не работает. Если текущий час больше 9, переходим к следующему сравнению.

  • Аргумент 1 - переменная "текущий_час".
  • Аргумент 2 - в поле впишите сразу "9". Это значение будет являться строкой.
  • Тип сравнения - меньше "<"


Урок17-005.png


7. Итак, если текущий час меньше 9 (ветка - Правда), поставьте уведомление с фразой "офис не работает" и после него компонент "Обрыв связи". Чтобы провести соединение по ветке Правда от компонента сравнение, зажмите CTRL и левой кнопкой мыши проведите соединение.

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


Урок17-006.png


8. Если текущий час больше 9 (ветка - Ложь), то переходим к следующему сравнению - текущий час больше 18?

  • Аргумент 1 - переменная "текущий_час".
  • Аргумент 2 - "18".
  • Тип сравнения - меньше ">"

Чтобы провести соединение по ветке Ложь от компонента сравнение, зажмите CTRL и правой кнопкой мыши проведите соединение.


Урок17-007.png


9. У следующего сравнения пользуемся тем же способом. Если время больше 9 (ветка - Правда), переходим на Уведомление. Если меньше 18 (но больше 9, как следует из предыдущего сравнения), то переходим на соединение с пользователем.

10. Компонент "Переключение на номер" - является основным компонентом для соединения с пользователями Oktell. Для работы укажите следующие поля:

  • Назначение - Внутрь
  • Номер - внутренний номер сотрудника (групповой, быстрый номер). В примере, 101.
  • Очередь ожидания - Да. Если сотрудник в разговоре, то вы попадете в очередь ожидания. Если очередь ожидания будет выключена, а сотрудник будет в разговоре, то вы перейдете по ветке занято.

После переключения поставьте компонент "Стоп". Этого недостаточно, необходимо также обработать остальные ветки, например, что делать если сотрудник недоступен, занят или отсутствует.

ВНИМАНИЕ: Если эти ветки не указаны, то, по умолчанию, переход идет на "Обрыв связи".

Чтобы определить эти ветки зажмите цифру "2" и проведите соединение до компонента "Обрыв связи". Будет проведена ветка "Переход, занято". Проведите линии зажав цифры "3"-"6". Переходы автоматически проставятся в свойствах компонента.

Вообще говоря, при создании рабочего сценария эти ветки необходимо обрабатывать с помощью других переключений или воспроизведений. Если делать просто "Обрыв связи", как в этом уроке, то клиенты не будут понимать в чем дело и их надо оповещать. Данный сценарий был создан исключительно в обучающих целях.


Урок17-008.png


11. Перейдите на вкладку "Сохранение" и сохраните ваш сценарий "На сервер". Протестируйте ваш сценарий, как было описано в уроке 16.

Скачать сценарий: Урок17.zip

Поздравляем! Вы научились маршрутизировать звонок в IVR-сценарии. Можете переходить к следующему уроку.

Техническая документация:

Вопросы и задания

  • Внимательно изучите техническую документацию связанную с переменными.
  • Реализуйте сценарий маршрутизации по имени пользователя: при звонке на внутренний номер запуска IVR определяется имя пользователя, если оно совпадает с вашим вам выводится уведомление "Здравствуйте" и происходит соединение с некоторым сотрудником. Если на сценарий IVR позвонит другой пользователь выведите уведомление этому пользователю с его именем и внутренним номером (воспользуйтесь функциями), затем происходит соединение с вашим пользователем.
Наверх К предыдущему уроку К следующему уроку