Сценарии
Общее описание сценариев
Сценарии позволяют описывать последовательность диалога autoFAQ с пользователями. Диалог может включать в себя переписку бота с пользователями, получение и сохранение данных во внешних системах и шаги по обработке информации.
AutoFAQ позволяет создавать сценарии любой сложности. Количество реплик и вопросов пользователю, запросы в прочие системы и логика обработки полученных данных никак не ограничены.
Сценарии могут быть подключены к документам в базе знаний или к событиям в диалогах (интеграции). В первом случае AutoFAQ запустит сценарий если по запросу пользователя будет найден документ - вместо текстового ответа сервис начнет переписку с пользователем по полученному сценарию. Во втором случае AutoFAQ запустит сценарий если в диалоге произойдет указанное событие - в этом случае сервис приостановит обработку диалога, выполнит сценарий и после продолжит работу над диалогом.
Описание сценариев в системе ведется при помощи языка DSL AutoFAQ. Текст сценария состоит из последовательных операций (шагов).
Для открытия окна редактирования сценария в полноэкранном режиме необходимо нажать клавишу “F11”. Для выхода из полноэкранного режима необходимо нажать “F11” или “Esc”.
В окне редактирования сценария можно вызывать подсказки по шагам сценариев комбинацией клавиш “Ctrl+Пробел”.
Описание языка DSL AutoFAQ
Последовательность шагов
Каждый сценарий описывается последовательностью шагов, склеенных между собой оператором +. Все шаги выполняются последовательно, один за другим. Каждый шаг должен располагаться на новой строчке. Пример текста сценария, который включает в себя сообщение и вопрос бота:
сообщениеПользователю("Спасибо, данные получил!") +
комментарий("Данные пользователя обновлены, завершаю работу") +
завершитьШаги могут иметь модификаторы, которые уточняют поведение шага. Модификатор шага указывается через точку, например:
задатьПользователюВопрос("Я правильно понял, что вы заблудились в лесу?")
.сохранитьРезультат("answer") +Внутри сценария возможны ветвления, для оформления ветвления используется шаг если с соответствующими модификаторами, например:
если("{what} == да").то(
задатьПользователюВопрос("Укажи нужное время").сохранитьРезультат("time")
).иначе(
сообщениеПользователю("Ну и ладно")
) +DSL AutoFAQ поддерживает использование переменных в шагах. Для использования значения переменной надо указать имя переменной переменной в фигурных скобках {...}, например:
сообщениеПользователю("Получил сообщение {userSaid}") +Кроме того в коде сценария поддерживается использование комментариев. Для оформления комментария строка должна начинаться с символа //. Строка, начинающаяся с // выполняться не будет.
// передача файла через идентификатор файла в хранилище
вызвать.внешнийСервис("{url}","POST").сТеломСообщения("{query}").сохранитьРезультат() +
// уведомляю пользователя
сообщениеПользователю("Зарегистрировал обращение") +
// комментарий("Все готово") +
завершитьДля завершения сценария необходимо указать один из шагов завершения сценария:
завершить- простое завершение сценария, диалог остается в работе у бота;завершитьСНовымЗапросом()- завершение сценария и эмуляция получения нового запроса от пользователя;завершитьИПеревестиНаОператора- завершение сценария и принудительный перевод диалога в очередь операторам;завершитьИЗакрытьДиалог()- завершение сценария и принудительное закрытие диалога.
Если в шаге сценария применен один из шагов завершения, то сценарий может завершить свою работу досрочно, например:
если("{http_code} != 200").то(
комментарий("Данные пользователя не обновлены") +
завершить
)+
комментарий("Обовлены данные пользователя. Новые данные отправлены в CRM") +
завершитьПеременные в сценариях
Для хранения данных в сценариях возможно создавать переменные 4-х типов:
переменные сценария;
переменные диалога;
переменные пользователя;
переменные сервиса.
Ко всем переменным можно обратиться через указание названия переменной в обрамлении фигурными скобками {userSaid}, например:
сообщениеПользователю("Получил сообщение {userSaid}") +Любая переменная может быть создана или изменена в любом сценарии - в сценарии документа либо в сценарии интеграции на событие.
Переменные сценария
Значение переменной сценария сохраняется только в рамках текущего сценария и будет потеряно после завершения сценария. Подходят для передачи информации между шагами одного сценария.
задатьПользователюВопрос("Как дела?").сохранитьРезультат("answer") +
если("{answer} == Хорошо").то(
комментарий("Пользователь сказал что дела хорошо")
) +
завершитьПеременные диалога
Значение переменной диалога будет доступно в любом сценарии в рамках текущего диалога, включая все сценарии из документов и интеграций. Переменная может быть определена в момент создания диалога, заполнена в течение опроса пользователя и использована для передачи информации в CRM систему в момент завершения диалога.
Переменные диалога выводятся на информационной панели оператора и в истории запросов. Единого списка переменных диалога нет, набор переменных диалога определяют сценарии. В разных диалогах одного сервиса набор переменных диалога и их значений может быть разным.
Переменные пользователя
Значение переменной пользователя сохраняется в профиле пользователя и доступно во всех диалогах этого пользователя. Переменные пользователя делятся на основные и дополнительные. Основные переменные - это ФИО пользователя, электронная почта, телефон и логин. Список дополнительных переменных пользователя может быть произвольным и определяется логикой сценариев. Все переменные пользователя отображаются на информационной панели оператора и в истории запросов.
Если значение переменной пользователя поменяется, то это отразится на всех диалогах с этим пользователем, включая уже завершенные.
Переменные сервиса
Особенный тип переменных, которые не могут быть созданы в рамках сценария. Переменные сервиса доступны во всех сценариях всего сервиса. Их может создать администратор сервиса только через UI в настройках сервиса.
Сценарии могут получить значение переменной или изменить его. Значение переменных сервиса не выводится в информационной панели оператора.
Встроенные переменные
Встроенные переменные содержат общие данные контекста диалога - данные о пользователе, канале перписки и данные самого диалога. Данные переменные доступны с самого начала в любом сценарии, их не надо создавать.
Переменные с контекстом диалога:
serviceId - идентификатор сервиса;
channelId - идентификатор канала, через который ведется переписка;
channelType - тип канала (Telegram, WhatsApp, Widget);
conversationId - идентификатор текущего диалога;
platformInMessageQuery - текст первоначального запроса пользователя, по которому был создан входящий диалог с AutoFAQ;
conversation - объект, который хранит все данные диалога включая данные о пользователе, список всех реплик и событий;
externalFiles - список файлов переданных пользователю или полученных от него в рамках текущего диалога.
Переменные пользователя
userFullName- имя пользователя;userLogin- логин пользователя;userEmail- электронная почта пользователя;userPhone- номер телефона пользователя;userId- идентификатор пользователя;userPayload.*- хранилище дополнительных данных о пользователе.
Прочие встроенные переменные
http_code- код статуса последнего шага API запроса;telegram_message- полный набор информации о пользователе Telegram, содержит в себе локации пользователя, если он ей поделится с ботом
Данные контекста диалога заполнены всегда. Данные пользователя будут заполнены в зависимости от типа канала, так как каждый тип канала передает свой набор данных о пользователе. Данные о пользователе могут быть пополнены в результате работы модуля Идентификация, в рамках переписки с пользователем или через запрос к данным внешнего сервиса.
Справочник шагов сценария
Полный справочник шагов описан в разделе Справочник шагов сценария
Примеры готовых сценариев доступны в разделе Примеры сценариев
Проверка синтаксиса сценария
На странице документа базы знаний есть кнопка “Проверить сценарий”, которая запускает синтаксическую проверку указанного сценария.
Если в сценарии найдены ошибки, тогда открывается модальное окно с перечислением найденных ошибок. Синтаксический анализатор имеет ряд ограничений при описании найденных ошибок - не всегда имеется возможность указать номер строки, не все типы ошибок снабжены русским описанием.