Стандартное голосовое меню (сценарий IVR)
Рассмотрим Стандартный сценарий голосового меню.
После того как вызов попадает в сценарий, абонент слышит приветствие: "Ведите добавочный номер телефона или дождитесь ответа оператора". Если же внутренний номер был введен, система пытается переключить вызов на указанный внутренний номер и при успешном переключении сценарий завершает свою работу. Если же внутренний номер введен неправильно, занят или не отвечает система переключает вызов на группу операторов
На рисунке изображен общий вид сценария IVR стандартного голосового приветствия.
В сценарии используются компоненты редактора сценариев IVR:
- Основные / Поднять трубку [2]
- Основные / Объявить переменную [3],[4]
- IVR / Проиграть файл [5], [13], [14]
- IVR / Положить трубку [8] , [15]
- Основные / Присвоить значение [11],[12]
Рассмотрим сценарий детально
Компоненты Объявить переменную [3] и [4] декларируют переменные, которые мы будем использовать в сценарии и определяют им начальные значения. В выпадающем списке слева указан тип переменной "Строка", а справа указывается ее имя – Номер, а поле справа активирует редактор выражений, который позволяет задать значение объявленной переменной.
Переменная Номер будет использоваться для получения и обработки вводимых абонентом цифр. Переменная Пусто используется для сброса значения введенного изначально добавочного номера, при повторном наборе. Обеим переменным определяем начальное значение пустая строка.
Следующий компонент - Проиграть файл [5].
Первая строка компонента указывает на его название.
Примечание 1: Название компонента должно быть уникальным для каждого компонента в пределах всего тела сценария.
Вторая строка свойства определяет файл, который будет проигрываться. Щелчком мыши вызываем редактор выражений, в котором указываем конкретный звуковой файл. В данном случае файл будет проигрываться из локальной медиа-библиотеки сценария. У каждого сценария IVR существует собственная медиа-библиотека звуковых файлов, попасть в которую можно начав выбирать файл в поле "Значение".
Третий параметр ("Пауза") определяет значение паузы в секундах, которое система будет ждать после окончания проигрывания звукового файла. В нашем случае выставлено значение 0. Это означает, что по окончанию проигрывания звукового файла "Наберите номер абонента в тоновом режиме или дождитесь ответа оператора" система не будет дополнительно, для того, чтобы дать абоненту время нажать какую либо клавишу на телефоне.
Примечание 2: стоит учитывать, что в некоторых случаях стоит осторожно указывать как нулевое значение паузы, так и слишком большое значение величины паузы. В первом случае, абонент может не успеть среагировать на приглашение нажатия кнопки, а слишком большая пауза будет вызывать излишние подозрения в работоспособности сервиса.
Параметр "стоп по кнопке" определяет будет ли воспроизведение голосового файла сразу же прервано, если абонент нажал какую либо кнопку на телефоне. Нажатие абонентом кнопки на телефоне эквивалентно передачу одиночного DTMF символа в систему.
В нашем случае мы ждем от абонента ввода трехзначного номера телефона, поэтому, чтобы не вводить абонента в сомнение, мы останавливаем воспроизведение файла "Стоп по кнопке", с тем, чтобы получить от него оставшиеся две цифры ввода.
Последнее поле свойства компонента определяет переменную в которую будет записано значение переданного DTMF сигнала (нажатой клиентом кнопки). Для обработки действий клиента мы используем переменную Номер, ее и указываем в свойствах компонента: "Редактор выражений / Переменная: Номер".
В случае если абонент повесил трубку или произошла ошибка (к примеру указанный звуковой файл не найден на сервере, мы завершаем выполнение сценария) В случае если абонент дослушал приветствие переводим его на группу операторов в компоненте Очередь [6].
Если же абонент нажал любую кнопку в процессе проигрывания файла [5] оно прерывается. Компонент Проиграть файл воспринимает всего один нажатый символ. Для ввода двух и более символов используется другой компонент IVR Ввод данных [7]. Вместе с тем, компонент Ввод данных не предназначен для воспроизведения звукового файла. Для совмещения ввода строки длинной 2 и более символов с голосовым сопровождением используется комбинация двух компонентов "Проиграть файл" и "Ввод данных", расположенных следом друг за другом.
Примечание 3: DTMF сигналы, полученные от абонента, трансформируются системой в строковую переменную. Несколько полученных подряд DTMF сигналов называются DTFM последовательностью. DTMF сигнал и DTMF последовательность могут состоять только из символов {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #}, нажатие других кнопок абонентом в системой не воспринимается.
В компоненте Ввод данных задаются условия при выполнении хотя бы одного из которых ввод данных считается завершенным и указывается переменная в которую будет сохранена полученная DTMF последовательность. Задаем, что общая длинна переменной при которой ввод считается завершенным это три символа (Длина: 3), общее время отведенное на ввод данных 7 секунд (Таймаут: 7 сек.). Полученная от абонента последовательность сохраняется в строковую переменную Номер.
Примечание 4: Вся полученная компонентом DTMF последовательность добавляется к имеющемуся значению переменной. Например, перед входом в компонент "Ввод данных" переменная Действие имела строковое значение равное "1". От абонента компонентом "Ввод данных" была получена DTMF последовательность вида "23". Общая длина строки переменной Действие становится равной трем символам и ввод данных считается завершенным, а переменная Действие получит значение равное "123".
Примечание 5: Ввод данных прерывается когда общая длина строки переменной в которую сохраняются данные будет равна заданной длине строки. Например, если бы перед входом в компонент "Ввод данных" переменная Номер имела строковое значение равное "111", то ввод данных будет изначально считаться выполненным, поскольку длина строки Действие уже равна или более трех символов.
Выход из компонента "Ввод данных" предусматривает три варианта:
- "Галочка" [OK] – ввод данных в отведенное время завершен успешно и в переменной находится строка заданной длины;
- "Песочные часы" [Таймаут] – отведенное время для ввода данных закончилось, строка получена не полностью и не нажата клавиша с символом прерывания;
- "Кирпич" [Положили трубку] – во время ожидания системой ввода данных абонент положил трубку.
Очевидно, что в случае, если абонентом была положена трубка, сценарий IVR тоже должен завершить работу. Поэтому стрелку из выхода [Положили трубку] ведет на компонент Положили трубку и затем Стоп.
Если за отведенное время абонент не ввел номер или ввел его не полностью, то вызов направляется на компонент Очередь [6]
При успешном вводе номера переход из компонента идет в компонент Переключить [10].
Компонент Переключить отвечает за переключение телефонного вызова на указанный телефонный номер. Телефонный номер может быть любым внутренним, групповым, внешним городским или мобильным номером. Компонент имеет всего три параметра. Первый – это уникальное название компонента в пределах данного сценария "На внутренний".
Второй параметр это "Номер" – телефонный номер на который будет производится переключение вызова. В данном случае мы используем не конкретный заранее заданный телефонный номер, а переменную Номер
Последний основной параметр "Таймаут" – время в секундах, в течении которого мы будем ожидать успешного переключения.
Примечание 4. В этом сценарии не проводится проверка корректности номера для переключения Если логика используемой АТС предполагает возможность осуществления вызовов на внешние короткие номера, перед компонентом "Переключить" имеет смысл проверить совпадение введенного номера с одним из внешних коротких номеров и в целях исключения злоупотреблений исключить возможность переключения на внешний городской короткий номер.
По результатам попытки переключения компонентом "Переключить" возможны 6 различных вариантов:
- "Галочка" [ОК] – успешное переключение за заданное время осуществлено. Если переключение успешное, то в дальнейшем выполнении сценария IVR необходимости нет. Переводим на компонент Стоп.
- "Красная трубка" [Занято] – выход из компонента, если вызываемый номер занят;
- "Серая трубка" [Нет ответа] – выход из компонента, если вызываемый номер не отвечает в течении заданного параметром "Таймаут" времени;
- "Крест" [Номер не существует] – выход из компонента, если набранный номер не существует, например, попытка переключить на внутренний номер не описанный в номерном плане;
- "Крестик" [Ошибка] – переключение не удалось по причине ошибки, например, во время соединения произошел обрыв связи;
- "Кирпич" [Положена трубка] – если в момент переключения вызова абонент положил трубку не дождавшись ответа вызываемой стороны, то сработает этот вариант выхода из компонента, в дальнейшем выполнении сценария IVR необходимости нет. Переводим на компонент Стоп или Положить трубку.
Примечание 5. Если события по результату переключения не заданы, то сценарий после выполнения компонента "Переключить" завершится.
Примечание 6. Если необходимо дополнительным образом обработать случаи успешного или не успешного переключения, можно по выходу перед переходом на компонентом "Стоп" выполнить и другие действия. Например, выполнить запрос в базу данных или отправить уведомление.
Таким образом при успешном переводе вызова мы завершаем работу сценария IVR. Обработаем случаи неудачного переключения. С точки зрения абонента возможны два разных варианта – номер занят или номер не отвечает. В обоих случаях проигрываем соответствующие звуковые файлы "Номер занят, введите другой добавочный номер или дождитесь ответа оператора" и "Введенный вами номер не существует, ваш звонок будет переведен на операторов".
После первого [11] идет компонент Присвоить значение [13], который обнуляет введенные ранее цифры записанные в переменную Номер. И возвращает абонента к компоненте Ввод данных [7].
После второго [12] также идет компонент Присвоить значение [14], который обнуляет введенные ранее цифры записанные в переменную Номер и переводит абонента к компоненте Очередь [6].