Синтаксис языка сценариев
Виртуальная АТС
Функции
ЕСЛИ, ИНАЧЕЕСЛИ, ИНАЧЕ, КОНЕЦЕСЛИ
ЕСЛИ, ИНАЧЕЕСЛИ, ИНАЧЕ – условный оператор
ЕСЛИ (условие) действия [ИНАЧЕЕСЛИ (условие) действие [ИНАЧЕ действия]] КОНЕЦЕСЛИ
Конструкция ЕСЛИ предоставляет возможность условного выполнения фрагментов сценария, выражение вычисляется в булево значение. Если условие принимает значение ИСТИНА, выполняется действия, а если оно принимает значение ЛОЖЬ, выполняется действия указанная после ИНАЧЕЕСЛИ или ИНАЧЕ. Конструкция должна оканчиваться оператором КОНЕЦЕСЛИ.
ЖДАТЬ
ЖДАТЬ - остановка выполнения сценария
void ЖДАТЬ ( int sec = 1 )
Остановка выполнения сценария на заданное число sec секунд.
ЖДАТЬВВОДА
ЖДАТЬВВОДА – ожидает ввод и считывает введенное слово
void ЖДАТЬВВОДА ( int sec = 10 )
Ожидает ввод и считывает введенное слово в переменную _ВВОД. Ввод слова продолжает до совпадения слова с вариантом предложенном в следующем блоке ECЛИ или до истечения таймаута, указанного в параметре sec(секунд)
ЗАВЕРШИТЬВЫЗОВ
ЗАВЕРШИТЬВЫЗОВ - разрывает текущее соединение(«бросает трубку»)
void ЗАВЕРШИТЬВЫЗОВ ()
Разрывает текущее соединение. Прекращает выполнения сценария.
ПРОИГРАТЬ
ИГРАТЬ – проиграет аудио файл из автоинформатора
void ПРОИГРАТЬ (string внутренний_номер)
Проиграет аудио файл из автоинформатора с номером внутренний_номер
ИГРАТЬИЖДАТЬВВОДА
ИГРАТЬ ИЖДАТЬВВОДА – проиграет аудио файл из автоинформатора и считать введенное слово
void ИГРАТЬИЖДАТЬ (string внутренний_номер, int sec = 3 дополнительное время ожидания)
Проиграет аудио файл из автоинформатора с номером внутренний_номер и одновременно ожидает ввода слова. Параметр sec определяет дополнительный таймаут ожидания ввода после проигрывания аудиозаписи.
ПЕРЕВЕСТИНАНОМЕР
ПЕРЕВЕСТИНАНОМЕР - переведет текущее соединение на внутренний номер
Переводит текущее соединение на внутренний номер АТС. Прекращает выполнения сценария.
Переменные
_ВВОД
_ВВОД – содержит слово, введенное при последнем вызове функций ЖДАТЬВВОДА() и ИГРАТЬИЖДАТЬВВОДА()
Константы
_ПУСТО
_ПУСТО – константа для сравнения с _ВВОД, содержит пустое значение
_ВНУТРЕННИЙНОМЕР
_ВНУТРЕННИЙНОМЕР – константа для сравнения с _ВВОД, содержит в себе любой внутренний номер .
Указатели
_СЕЙЧАС
_СЕЙЧАС – указатель на временной интервал, если временной интервал содержит несколько слов, то в качестве разделителя используется символ «_»
Операторы сравнения
=
=- равно
Примеры
Голосовое меню (IVR)
В общем случае голосовое меню состоит из приветствия («Здравствуйте, вы позвонили в …») и предложения выбора нескольких вариантов действий («Для соединения с … нажмите 1» и т.д.).
Пусть в Виртуальной АТС созданы следующие внутренние линии:
111 – тип Автоинформатор – представляет собой звуковой файл с приветствием и выбором действий для Голосового меню
112 – тип Автоинформатор – представляет собой звуковой файл с записью «Неверный выбор, попробуйте еще раз»
113 – тип Группа вызова – представляет собой группу сотрудников отдела продаж
114 – тип Группа вызова – представляет собой группу сотрудников отдела закупок
115 – тип Группа вызова – представляет собой группу сотрудников бухгалтерии
101 – тип Абонент – секретарь
116 – тип Виртуальный факс – принимаем факс.
120 – тип Сценарий – Голосовое меню.
Пусть голосовое меню имеет следующее содержание: «Здравствуйте, вы позвонили в компанию Оборонсервис! Для соединения с отделом продаж нажмите 1. Для соединения с отделом закупок нажмите 2. Если вы хотите поговорить с сотрудниками бухгалтерии, нажмите 3. Для отправки факса нажмите 9. Если вы знаете внутренний номер сотрудника, наберите его в тоновом режиме. Если хотите поговорить с секретарем, не кладите трубку»
В случае неверного выбора пункта меню будет проиграно сообщение автоинформатора 112 и осуществлен возврат в Голосовое меню.
- "внутренняя линия 120"
ИГРАТЬИЖДАТЬВВОДА (111, 10) ЕСЛИ (_ВВОД = 1) ТО ПЕРЕВЕСТИНАНОМЕР (113) ИНАЧЕЕСЛИ (_ВВОД = 2) ТО ПЕРЕВЕСТИНАНОМЕР (114) ИНАЧЕЕСЛИ (_ВВОД = 3) ТО ПЕРЕВЕСТИНАНОМЕР (115) ИНАЧЕЕСЛИ (_ВВОД = 9) ТО ПЕРЕВЕСТИНАНОМЕР (116) ИНАЧЕЕСЛИ (_ВВОД = _ВНУТРЕННИЙНОМЕР) ТО ПЕРЕВЕСТИНАНОМЕР (_ВВОД) ИНАЧЕЕСЛИ (_ВВОД = _ПУСТО) ТО ПЕРЕВЕСТИНАНОМЕР (101) ИНАЧЕ ПРОИГРАТЬ (112) ПЕРЕВЕСТИНАНОМЕР (120) КОНЕЦЕСЛИ
Разберем данный пример по строкам:
1. Проигрываем приветствие и варианты действий. Для этого используем функцию:
ИГРАТЬИЖДАТЬВВОДА(111, 10) – проигрываем звуковой файл с номером 111, после чего ожидаем 10 секунд для ввода цифр в меню.
2. Проверяем, какую цифру нажал абонент с помощью условия:
ЕСЛИ (_ВВОД = 1 ) ТО – если нажали 1, то…
3. Обрабатываем выбранный пункт меню («нажмите 1, нажмите 2» и т.д.), т.е. указываем, куда отправить вызов при выборе соответствующего пункта:
ПЕРЕВЕСТИНАНОМЕР (113) – переводим на группу 113
4. Продолжаем проверку выбора с помощью конструкции:
ИНАЧЕЕСЛИ (_ВВОД = 2 ) ТО – если нажали 2, то…
5. Обрабатываем выбранный пункт меню («нажмите 1, нажмите 2» и т.д.), т.е. указываем, куда отправить вызов при выборе соответствующего пункта:
ПЕРЕВЕСТИНАНОМЕР (114) – переводим на группу 114
6. Продолжаем проверку выбора с помощью конструкции:
ИНАЧЕЕСЛИ (_ВВОД = 3 ) ТО – если нажали 3, то…
7. Обрабатываем выбранный пункт меню («нажмите 1, нажмите 2» и т.д.), т.е. указываем, куда отправить вызов при выборе соответствующего пункта:
ПЕРЕВЕСТИНАНОМЕР (115) – переводим на группу 115
8. Продолжаем проверку выбора с помощью конструкции:
ИНАЧЕЕСЛИ (_ВВОД = 9 ) ТО – если нажали 9, то…
9. Обрабатываем выбранный пункт меню («нажмите 1, нажмите 2» и т.д.), т.е. указываем, куда отправить вызов при выборе соответствующего пункта:
ПЕРЕВЕСТИНАНОМЕР (116) – переводим на виртуальный факс 116
10. Проверяем, набран ли внутренний номер с помощью конструкции:
ИНАЧЕЕСЛИ (_ВВОД = _ВНУТРЕННИЙНОМЕР) ТО
11. Переводим вызов на внутренний номер:
ПЕРЕВЕСТИНАНОМЕР (_ВВОД)
12. С помощью конструкции ИНАЧЕЕСЛИ (_ВВОД=_ПУСТО ) ТО указываем, что делать, если ничего не выбрали в меню
13. Если ничего не выбрано, то переводим номер на секретаря с помощью функции
ПЕРЕВЕСТИНАНОМЕР (101)
14. Если выбран неверный пункт меню, то обрабатываем такой выбор с помощью конструкции ИНАЧЕ
15. При неверном выборе проигрываем сообщение с помощью функции ПРОИГРАТЬ (112) и
16. Возвращаем вызов обратно в голосовое меню с помощью функции
ПЕРЕВЕСТИНАНОМЕР (120)
17. Завершаем обработку с помощью КОНЕЦЕСЛИ
Временные интервалы
Временные интервалы позволяют задать определенный режим обработки вызова в Виртуальной АТС в указанные интервалы времени.
Пример 1
Компании требуется установить режим работы в будние дни, выходные дни, а также в праздничные. При этом в будние дни в рабочие часы все входящие вызовы попадают в группу вызова (100), в выходные и праздничные дни, а также в нерабочие часы в будние дни клиенту проигрывается сообщение о режиме работы.
Пусть в Виртуальной АТС созданы следующие внутренние линии:
111 – тип Группа вызова – представляет собой группу сотрудников.
112 – тип Автоинформатор – представляет собой звуковой файл с приветствием и режимом работы
113 – тип Сценарий – Голосовое меню.
Также имеются временные интервалы:
«Праздники» - 1-8 января, 8-10 марта, 1-5 мая, 9-12 мая, 12 июня, 4 ноября.
«Выходные» - Сб,Вс с 00:00 до 23:59 , все дни месяца, все месяцы
«Рабочее_время» - Пн,Вт,Ср,Чт,Пт с 09:00 до 18:00, все дни месяца, все месяцы
ВРЕМЕННЫЕ ИНТЕРВАЛЫ С КОНКРЕТНЫМИ ДАТАМИ ВСЕГДА ДОЛЖНЫ УКАЗЫВАТЬСЯ ПЕРВЫМИ В СЦЕНАРИИ
ЕСЛИ (_СЕЙЧАС = «Праздники») ПРОИГРАТЬ (112) ИНАЧЕЕСЛИ (_СЕЙЧАС = «Выходные») ПРОИГРАТЬ (112) ИНАЧЕЕСЛИ (_СЕЙЧАС = «Рабочее_время») ПЕРЕВЕСТИНАНОМЕР (111) ИНАЧЕ ПРОИГРАТЬ (112) КОНЕЦЕСЛИ
Разберем данный пример по строкам: 1. С помощью указателя на временной интервал проверяем текущее время вызова с временным интервалом «Праздники». Для этого используем конструкцию:
ЕСЛИ (_СЕЙЧАС = «Праздники»)
2. Если время вызова попадает в интервал времени «Праздники», то проигрываем сообщение автоинформатора:
ПРОИГРАТЬ (112)
3. Если текущее время не попадает в интервал «Праздники», то делаем проверку времени вызова с временным интервалом «Выходные»:
ИНАЧЕЕСЛИ (_СЕЙЧАС = «Выходные»)
4. Если время вызова попадает в интервал времени «Выходные», то проигрываем сообщение автоинформатора:
ПРОИГРАТЬ (112)
5. Если текущее время не попадает в интервал «Выходные», то делаем проверку времени вызова с временным интервалом «Рабочее_время»:
ИНАЧЕЕСЛИ (_СЕЙЧАС = «Рабочее_время»)
6. Если время вызова попадает в интервал времени «Рабочее_время», то переводим вызов в группу:
ПЕРЕВЕСТИНАНОМЕР (111)
7. В остальных случаях (нерабочие часы в будние дни с 18:00 до 08:59) проигрываем сообщение автоинформатора:
ИНАЧЕ ПРОИГРАТЬ (112)
8. Завершаем обработку с помощью КОНЕЦЕСЛИ
Пример 2
Пусть организация работает по следующему режиму работы – Рабочие часы с 9.00 до 18.00 с понедельника по пятницу, входящие вызовы попадают в голосовое меню. В субботу с 10.00 до 16.00 вызов принимает группа вызова. В воскресенье и не рабочие часы с понедельника по субботу вызов обрабатывает автоответчик. В праздничные дни вызовы перенаправляются в автоинформатор.
Пусть в Виртуальной АТС созданы следующие внутренние линии:
111 – тип Сценарий – все входящие вызовы направляются в этот сценарий
112 – тип Сценарий – Голосовое меню
113 – тип Группа вызова – представляет собой группу сотрудников отдела продаж
114 – тип Автоответчик
115 – тип Автоинформатор – сообщение для праздничных дней.
Также имеются временные интервалы:
«Праздники» - 1-8 января, 8-10 марта, 1-5 мая, 9-12 мая, 12 июня, 4 ноября.
«Выходные» - Вс с 00:00 до 23:59 , все дни месяца, все месяцы
«Рабочее_время» - Пн,Вт,Ср,Чт,Пт с 09:00 до 18:00, все дни месяца, все месяцы
«Субботний_режим» - Сб с 10:00 до 16:00, все дни месяца, все месяцы
ВРЕМЕННЫЕ ИНТЕРВАЛЫ С КОНКРЕТНЫМИ ДАТАМИ ВСЕГДА ДОЛЖНЫ УКАЗЫВАТЬСЯ ПЕРВЫМИ В СЦЕНАРИИ
ЕСЛИ (_СЕЙЧАС = «Праздники») ПРОИГРАТЬ (115) ИНАЧЕЕСЛИ (_СЕЙЧАС = «Выходные») ПЕРЕВЕСТИНАНОМЕР (114) ИНАЧЕЕСЛИ (_СЕЙЧАС = «Субботний_режим») ПЕРЕВЕСТИНАНОМЕР (113) ИНАЧЕЕСЛИ (_СЕЙЧАС = «Рабочее_время») ПЕРЕВЕСТИНАНОМЕР (112) ИНАЧЕ ПЕРЕВЕСТИНАНОМЕР(114) КОНЕЦЕСЛИ
Разберем данный пример по строкам:
1. С помощью указателя на временной интервал проверяем текущее время вызова с временным интервалом «Праздники». Для этого используем конструкцию:
ЕСЛИ (_СЕЙЧАС = «Праздники»)
2. Если время вызова попадает в интервал времени «Праздники», то проигрываем сообщение автоинформатора:
ПРОИГРАТЬ (115)
3. Если текущее время не попадает в интервал «Праздники», то делаем проверку времени вызова с временным интервалом «Выходные»:
ИНАЧЕЕСЛИ (_СЕЙЧАС = «Выходные»)
4. Если время вызова попадает в интервал времени «Выходные», то переводим вызов на автоответчик:
ПЕРЕВЕСТИНАНОМЕР (114)
5. Если текущее время не попадает в интервал «Выходные», то делаем проверку времени вызова с временным интервалом «Субботний режим»:
ИНАЧЕЕСЛИ (_СЕЙЧАС = «Субботний_режим»)
6. Если время вызова попадает в интервал времени «Субботний режим», то проигрываем переводим на группу вызова:
ПЕРЕВЕСТИНАНОМЕР (113)
7. Если текущее время не попадает в интервал «Субботний режим», то делаем проверку времени вызова с временным интервалом «Рабочее время»:
ИНАЧЕЕСЛИ (_СЕЙЧАС = «Рабочее_время»)
8. Если время вызова попадает в интервал времени «Рабочие дни», то переводим вызов в сценарий с голосовым меню:
ПЕРЕВЕСТИНАНОМЕР (112)
9. Во всех остальных случаях переводим вызов на автоответчик:
ИНАЧЕ ПЕРЕВЕСТИНАНОМЕР (114)
10. Завершаем обработку с помощью КОНЕЦЕСЛИ