Как выполняется сценарий

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

Как выполняется сценарий

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

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

Пустой переход обрывает сценарий Если обработчик, дойдя до объекта, обнаружит незаполненное свойство типа «Переход» — он прервёт выполнение сценария. В сценарии IVR это означает, что на обрабатываемой линии будет положена трубка.

Что запускает обработчик

Список поводов различается по типам сценариев.

Сценарий IVR

  • поступление входящего звонка;
  • начало обработки звонка по задаче автоматического оповещения;
  • звонок на внутренний номер, за которым назначен сценарий IVR;
  • передача управления из одного сценария в другой;
  • входящий звонок на задачу автоматической обработки;
  • переключение оператором абонента на номер, за которым назначен сценарий IVR;
  • переадресация на внешние номера с детальным указанием направлений;
  • гибкая маршрутизация («Вход в АТС») при снятии трубки на любом внутреннем телефоне и при переключениях;
  • обработка вызовов, поступивших в момент ожидания завершения всех коммутаций при перезапуске сервера.

Диалоговый сценарий

  • начало обработки звонка по задаче приёма звонков оператором;
  • начало обработки звонка по задаче исходящего оповещения оператором;
  • запрос оператору на дозвон в задаче с резервированием и запросом.

Служебный сценарий

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

Доступ к данным задачи

Когда сценарий выполняется по задаче call-центра, ему открыт доступ к информации о самой задаче и к строке текущего абонента в прикреплённой к задаче таблице абонентов — на чтение, на запись или на то и другое.

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

Тем же путём данные уходят и наружу: сценарий IVR или диалога может выгрузить их во внешнюю базу с указанием параметров задачи, по которой шёл звонок, или запустить любое внешнее приложение — включая PHP- и ASP.NET-скрипты.

Сессия и код цепочки

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

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

От номера сессии напрямую зависит поведение сессионных переменных — подробности в статье «Переменные».