===== Синтаксис языка сценариев =====
===== Виртуальная АТС =====
==== Функции ====
\\
=== ЕСЛИ, ИНАЧЕЕСЛИ, ИНАЧЕ, КОНЕЦЕСЛИ ===
ЕСЛИ, ИНАЧЕЕСЛИ, ИНАЧЕ – условный оператор
**ЕСЛИ** (//условие//) //действия// [**ИНАЧЕЕСЛИ** (//условие//) //действие// [**ИНАЧЕ** //действия//]] **КОНЕЦЕСЛИ**
Конструкция **ЕСЛИ** предоставляет возможность условного выполнения фрагментов сценария, выражение вычисляется в булево значение. Если условие принимает значение //ИСТИНА//, выполняется действия, а если оно принимает значение //ЛОЖЬ//, выполняется действия указанная после **ИНАЧЕЕСЛИ** или **ИНАЧЕ**. Конструкция должна оканчиваться оператором **КОНЕЦЕСЛИ**.
\\
=== ЖДАТЬ ===
ЖДАТЬ - остановка выполнения сценария
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 и осуществлен возврат в Голосовое меню.
ИГРАТЬИЖДАТЬВВОДА (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. Завершаем обработку с помощью КОНЕЦЕСЛИ