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