Общие компоненты: логика сценария

Компоненты — это объекты, из которых собирается сценарий. Часть из них общая для всех типов сценариев, часть существует только в IVR, диалоговых или служебных. Здесь описаны общие компоненты, отвечающие за логику: начало и конец, переменные, ветвление, вызов других сценариев и задержку.

Свойство «Имя» есть у каждого компонента Это название для отображения на визуальном поле и для выбора в списке объектов. Дальше в описаниях оно не повторяется. На больших сценариях осмысленные имена экономят много времени: именно из этого списка выбираются переходы.

Старт

Есть в любом сценарии — с него начинается выполнение, если трубка обрабатываемой линии положена. Принимает на вход параметр и может сохранить его во внутреннюю переменную сценария.

СвойствоОписание
Параметр запускаПеременная, в которую сохраняется значение, переданное из запустившего сценария.
ПереходКомпонент, на который передаётся управление.
Если трубка уже поднята, часть сценария пропускается Обработка начинается со «Старта» и идёт последовательно по переходам, только когда трубка положена — в основном это входящие звонки с внешних линий.

Если трубка уже поднята, сразу после «Старта» выполняется безусловный переход к компоненту «Поднять трубку», если такой в сценарии есть. Все компоненты между ними обработчик пропускает. То же правило действует и при запуске вложенных сценариев.

Стоп

Завершает сценарий без разрыва связи. Типичные случаи — успешное переключение в сценарии IVR или корректное завершение работы в сценарии диалога.

СвойствоОписание
Возврат управленияДа / нет, по умолчанию «Да». Передать ли управление стеку (да) или прекратить выполнение всей последовательности сценариев (нет). Свойство работает только в сценариях, вызванных компонентом «Запуск сценария» с установленным флагом «Возврат управления», и в проектных сценариях IVR, вызванных компонентом «Вход в проект».

Присвоение значения переменной

Записывает в переменную значение аргумента. Если типы не совпадают, применяется правило включения типов.

СвойствоОписание
РежимОдиночный или множественный. Множественный позволяет выполнить в одном компоненте сразу несколько присвоений.
ПеременнаяТолько в одиночном режиме. Локальная переменная — приёмник значения.
ЗначениеТолько в одиночном режиме. Аргумент: значение, переменная, функция или выражение.
ОперацииТолько в множественном режиме. Список пар «переменная — аргумент», выполняемых в порядке перечисления.
ПереходКомпонент, на который передаётся управление.
Множественное присвоение выполняется по порядку Если в аргументе одной операции использована переменная, которая была приёмником в более ранней операции списка, будет взято её новое значение. То есть компонент с множественным присвоением — компактный аналог цепочки одиночных, а не одновременное вычисление.

Сравнение

Сравнивает два аргумента и разветвляет сценарий: при истинности выбранной логической операции управление идёт по ветке «Правда», иначе — по ветке «Ложь».

СвойствоОписание
Аргумент 1, Аргумент 2Сравниваемые аргументы.
Тип сравнения= равно, > больше, >= больше или равно, < меньше, <= меньше или равно, != не равно.
Переход, правдаКуда идти, если операция вернула истину.
Переход, ложьКуда идти, если операция вернула ложь.
Следите за типами аргументов Сравнение — самое частое место, где срабатывает правило включения типов. Строка, которую не удалось привести к числу, станет нулём, и сравнение даст неожиданный результат без всякого сообщения об ошибке.

Меню сравнения

Сравнивает аргумент со списком значений. Число веток перехода не ограничено. Управление уходит по ветке первого совпавшего значения; если совпадений нет — по ветке «Прочее».

СвойствоОписание
АргументСравниваемый аргумент.
Значения (варианты)Окно ввода: возможные значения, с каждым из которых связан свой переход.
Переход, прочееКуда идти, если ни одно значение не совпало.

Запуск сценария

Разбивает крупный сценарий на логические блоки: один сценарий передаёт управление в начало другого. На запуск можно передать значение — его примет компонент «Старт» вложенного сценария. Кроме того, все одноимённые переменные одного типа перенесут свои значения из сценария в сценарий без изменений.

СвойствоОписание
Тип запускаВложенный — прекращает выполнение текущего сценария (возможно, до возврата управления) и активизирует сценарий того же типа.
Асинхронный служебный — запускает служебный сценарий параллельным процессом и продолжает выполнение текущего.
Фоновое медиа-взаимодействие — только для IVR: инициирует дублирующий параллельный IVR-сценарий.
СценарийИмя запускаемого сценария; можно выбрать из списка или вписать.
Параметр запускаАргумент, значение которого передаётся на старт запускаемого сценария.
Возврат управленияДа / нет, по умолчанию «Нет». См. разбор ниже.
ПереходКуда идти после возврата из вложенного сценария либо сразу после запуска служебного. Обязательно для асинхронного запуска и для вложенного с установленным возвратом управления.

Возврат управления: два способа вызова

ЗначениеЧто происходит
Нет (по умолчанию)Текущий сценарий прекращается, запускается вложенный — со всеми значениями переменных. Наиболее частый способ на практике.
ДаВложенный сценарий вызывается как функция: после его завершения управление возвращается в точку вызова. Переменные исходного сценария доступны во вложенном и наоборот, поэтому после возврата они будут содержать изменённые значения.

На процедуру возврата влияет и флаг «Возврат управления» компонента «Стоп»: им пользуются во вложенном сценарии после успешного переключения, когда нужно безусловно прервать обработчик.

Стек ограничен сотней сценариев Обработчик поддерживает условно неограниченную вложенность, но глубина стека ограничена 100 сценариями — защита от зацикливания. Вызов внутри одной цепочки исполнения может происходить одновременно и с возвратом, и без возврата.

Асинхронно запускать через этот компонент можно любой служебный сценарий, не работающий с ресурсами основного сценария — линией, оператором. При таком запуске начальные значения переменных дочернего сценария, совпадающих по имени и типу с переменными основного, устанавливаются по значениям основного.

Пауза

Задерживает выполнение перед следующим компонентом. При длительности 0 компонент пропускается.

СвойствоОписание
Время задержкиВремя в миллисекундах.
ПереходКомпонент, на который передаётся управление.
Пауза как «пустышка» На больших сценариях «Паузу» с нулевой задержкой часто ставят как промежуточный узел — просто чтобы удобнее было менять переходы. Особенно это выручает на ветках выхода из компонента «Меню», где каждый переход задаётся выбором объекта из общего списка: перенаправить одну «пустышку» быстрее, чем править десяток веток по отдельности.