Синтаксис языка сценариев

Виртуальная АТС

Функции


ЕСЛИ, ИНАЧЕЕСЛИ, ИНАЧЕ, КОНЕЦЕСЛИ

ЕСЛИ, ИНАЧЕЕСЛИ, ИНАЧЕ – условный оператор

ЕСЛИ (условие) действия [ИНАЧЕЕСЛИ (условие) действие [ИНАЧЕ действия]] КОНЕЦЕСЛИ

Конструкция ЕСЛИ предоставляет возможность условного выполнения фрагментов сценария, выражение вычисляется в булево значение. Если условие принимает значение ИСТИНА, выполняется действия, а если оно принимает значение ЛОЖЬ, выполняется действия указанная после ИНАЧЕЕСЛИ или ИНАЧЕ. Конструкция должна оканчиваться оператором КОНЕЦЕСЛИ.


ЖДАТЬ

ЖДАТЬ - остановка выполнения сценария

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. Завершаем обработку с помощью КОНЕЦЕСЛИ