1. Из чего состоит сценарий

Прежде чем что-то менять, стоит договориться о словах. Дальше в руководстве они используются без пояснений, а здесь объясняются один раз.

Сценарий — это путь, по которому идёт обработка. В сценарии IVR по нему идёт телефонный вызов: абонент позвонил, сценарий ответил, что-то проиграл, дождался нажатия кнопки и в зависимости от нажатого пошёл одной дорогой или другой. В служебном сценарии по тому же пути идёт произвольный процесс — никакого вызова там может и не быть. Редактор показывает этот путь картой: шаги — квадратами, переходы между ними — стрелками.

Дальше в руководстве для краткости говорится «вызов»: в служебных сценариях читайте это как «обработка».

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

Сценарий — это описание алгоритма: то, что вы правите в редакторе и что лежит на сервере одной записью (/rest/v1/uc/ivrscripts). Он один на все вызовы.

Обработчик — экземпляр выполнения: конкретный вызов, идущий по этому алгоритму прямо сейчас, со своими значениями переменных и своим временем (/rest/v1/uc/ivrscript_runtimes). Обработчиков у одного сценария может быть сотня одновременно, и каждый живёт в своём контексте.

Редактор работает только со сценарием. Значений переменных конкретного вызова в нём не видно и быть не может.

Участок карты сценария с выносками
Figure 1. Участок карты: компонент, его имя, связь и регион
  1. Компонент — один шаг сценария. Всегда квадрат 32 × 32 с иконкой типа.

  2. Имя компонента — подпись под квадратом. Её задаёт администратор.

  3. Связь — куда управление уходит после этого шага.

  4. Регион — рамка вокруг группы компонентов с подписью в углу.

Кроме того, у сценария есть переменные — они не видны на карте, потому что не привязаны к месту, и живут в отдельном окне.

Компонент

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

Типы компонентов и их свойства описаны в справочнике: Компоненты сценариев, компоненты сценариев IVR, компоненты служебных сценариев. Руководство их не пересказывает.

Три компонента в цепочке
Figure 2. Три компонента подряд: уведомление, воспроизведение, сравнение

По внешнему виду квадрата читается три вещи.

Иконка

Тип компонента. Иконки нарисованы одним набором, и похожие типы выглядят похоже: у всего, что управляет вызовом, в знаке трубка; у отправки и приёма — стрелка во всю высоту слева.

Цвет подложки

Группа, к которой тип относится. Группы те же, что во вкладке Компоненты: зеленоватая — управление, серая — работа с данными, песочная — обмен сообщениями, розовая — телефония.

Подпись снизу

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

Имя стоит давать говорящее. «Воспроизведение 4» ничего не скажет ни вам через месяц, ни коллеге; «Приветствие в нерабочее время» скажет.

Настройки компонента — его свойства — живут не на карте, а во вкладке Свойства панели справа. Про них ниже.

Связи

Связь — стрелка от одного компонента к другому. Она отвечает на вопрос «что дальше»: закончив шаг, вызов уходит по связи в следующий компонент.

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

Цвет линии подсказывает, о чём речь:

Цвет Что означает

Серо-синий

Обычный ход событий

Зелёный

Условие выполнилось: «Правда», ветка меню, успешный ответ

Красноватый

Что-то пошло не так: «Ложь», ошибка, истекло время

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

Регион

Регион — прямоугольная рамка с подписью. Он ничего не делает с вызовом: это пометка на карте, которой администратор отделяет одну смысловую часть сценария от другой.

Регион на карте
Figure 3. Регион «Обработка категории ресурсов» очерчивает участок сценария и несёт его подпись

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

Заодно регион перемещается вместе со всем содержимым: переложить целый кусок сценария получается одним движением.

Выделяется регион кликом по рамке или по его подписи — по содержимому клик выделит компонент, а не область. Shift и клик по региону перебирает такты: сам регион → регион с содержимым → только содержимое → ничего; подробно — в главе о регионах.

Переменные

Переменная — именованное место, куда сценарий что-то кладёт и откуда потом берёт: набранный абонентом номер, ответ базы, счётчик попыток.

Окно управления составом переменных
Figure 4. Окно «Переменные»

На карте переменных нет: они не привязаны к шагу и принадлежат сценарию целиком (Переменная). Их состав правится в отдельном окне — кнопка Переменные над панелью справа. Там же видно, сколько раз каждая упоминается: переменная, у которой ноль упоминаний, скорее всего осталась от прошлых правок.

Свойства: разбираем «Меню»

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

Возьмём Меню — компонент, который разветвляет вызов по значению своего аргумента (Компонент Меню). Сам он ничего не спрашивает у абонента: нажатую кнопку собирает кто-то до него — «Ввод DTMF», «Воспроизведение» с настроенными символами прерывания или другой компонент телефонии, — и кладёт в переменную. Меню уже сравнивает её значение со своим списком.

Компонент «Меню» с ветками на карте
Figure 5. Меню на карте: три исходящие ветки

От квадрата уходят три стрелки. Две подписаны цифрами 1 и 2 — это ветки для нажатых кнопок. Третья подписана «Прочее» — по ней вызов уйдёт, если нажали что-то ещё или не нажали ничего.

Теперь то же самое в панели справа.

Свойства компонента «Меню»
Figure 6. Свойства «Меню» во вкладке «Свойства»

Панель читается сверху вниз.

Заголовок Меню #6

Тип компонента и его номер в сценарии. Номер присваивается при создании и не меняется; по нему компонент отличается от такого же соседнего.

Переключатель справа от заголовка

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

Поле с именем

То самое имя, которое видно на карте под квадратом. Здесь оно правится.

Строка Общие

Заголовок группы свойств. У компонентов посложнее групп несколько.

Аргументdtmf

Что именно сравнивать. Здесь взято значение переменной dtmf — в неё предыдущий шаг и положил нажатую кнопку (Аргумент, Переменная). Курсив у значения означает, что это не константа, а ссылка на переменную. Кнопка справа открывает окно, где можно выбрать другой источник: константу, другую переменную, выражение или шаблон.

Значения2 пункта

Таблица «нажали столько — идём туда». Два пункта — те самые ветки 1 и 2 на карте. Кнопка открывает таблицу целиком.

Переход, прочееHookdown

Куда идти, если ни один пункт не подошёл. Это и есть ветка «Прочее» на карте. Выпадающий список перечисляет компоненты сценария.

Обратите внимание на главное: карта и панель — два взгляда на одно и то же. Ветки в таблице Значения — это стрелки на карте. Изменив таблицу, вы измените стрелки; протянув стрелку на карте, вы измените таблицу.

Как то же самое выглядит в сохранённом сценарии

Знать это администратору не обязательно, но иногда полезно — например, когда разбираетесь со службой поддержки. Лишние поля из примера убраны.

{
  "oId": 6,
  "oType": 105,
  "name": "Main Menu",
  "arg": {
    "argType": 2,
    "varType": 2,
    "variable": "cbffcae4-bd3c-4bd0-b8db-0ba06f9e7c4a"
  },
  "values": {
    "items": [
      {
        "value": {
          "argType": 1,
          "varType": 2,
          "value": "1"
        },
        "transfer": 73
      },
      {
        "value": {
          "argType": 1,
          "varType": 2,
          "value": "2"
        },
        "transfer": 69
      }
    ]
  },
  "transferFalse": 91
}

arg — тот самый Аргумент: argType: 2 означает «значение переменной», а variable — какой именно. values.items — таблица веток: нажали 1 — переход к компоненту 73. transferFalse — ветка «Прочее».

Не все свойства видны всегда. Часть полей появляется только при определённом значении соседнего поля: незачем спрашивать про длину паузы, если пауза выключена. Если знакомое поле «пропало» — почти наверняка дело в этом. Подробнее — в главе про инспектор.

Что дальше

Понятий, введённых здесь, хватит, чтобы читать остальные главы:

  • компонент — шаг сценария, квадрат на карте;

  • связь — стрелка, ответ на вопрос «что дальше»;

  • регион — рамка с подписью, разметка карты для человека;

  • переменная — именованное место для значения, живёт вне карты;

  • свойства — настройки компонента, правятся в панели справа.

◀ Редактор сценариев

2. Первый запуск ▶