JAICP DSL
JAICP DSL — язык, на котором пишутся сценарии ботов в JAICP. Он предоставляет удобный формат для описания логики, по которой работает бот.
Основу JAICP DSL составляют теги. Каждый тег имеет название, которое оканчивается двоеточием. Кроме того, у каждого тега могут быть:
- Значение, которое указывается непосредственно после названия. Значение есть у большинства тегов и напрямую задает их поведение.
- Параметры — пары «ключ — значение», которые отделяются от названия или значения тега (если оно есть) двумя вертикальными чертами. Если параметров несколько, они отделяются друг от друга запятыми. Параметры позволяют модифицировать поведение тега.
- Вложенные данные, которые указываются на отдельной строке после объявления тега и выделяются отступами. В качестве вложенных данных выступают другие теги.
tag1: value1
tag2: value2 || paramKey = "paramValue", booleanParam = true
В JAICP DSL используются теги следующих типов:
Декларативные теги
Декларативные теги описывают общую структуру сценария: определяют состояния, на основе которых строится логика работы бота, задают подключаемые файлы, а также выполняют инициализацию кода и паттернов.
Тег | Описание |
---|---|
init | Задает блок кода, который будет выполнен при загрузке сценария один раз. Обычно такой код выполняет инициализацию глобальных переменных и функций. |
patterns | Объявляет именованные паттерны, используемые в сценарии. |
require | Используется для подключения файлов к сценарию. |
state | Объявляет стейт — состояние, в котором может находиться контекст диалога. Стейты могут неограниченно вкладываться друг в друга. |
theme | Объявляет тему. Стейты могут находиться только внутри темы. |
Теги активации
Теги активации определяют действия пользователей или события, которые могут перевести контекст диалога в тот или иной стейт. Все теги активации делятся на два вида: локальные и глобальные.
- По локальному тегу переход в стейт возможен только из ближайшего родительского, из соседних или дочерних стейтов.
- По глобальному тегу диалог может перейти в стейт из любого другого стейта в сценарии. Названия глобальных тегов заканчиваются на
!
.
Тег | Описание |
---|---|
q q! | Объявляет паттерн, по которому диалог может перейти в стейт. |
intent intent! | Объявляет интент, по которому диалог может перейти в стейт. |
intentGroup intentGroup! | Объявляет группу интентов, по которым диалог может перейти в стейт. |
event event! | Объявляет событие, по которому диалог может перейти в стейт. |
Теги реакций
Теги реакций задают реакции, которые выполняет бот при попадании в стейт.
Тег | Описание |
---|---|
a | Отправляет текстовый ответ. |
audio | Отправляет аудиофайл. |
buttons | Отправляет кнопки, по которым возможен переход в другие стейты. |
go | Выполняет отложенный переход в другой стейт. При этом реакции указанного стейта не выполняются, но обработка следующего запроса происходит в контексте этого стейта. |
go! | Выполняет немедленный переход в другой стейт. При этом выполняются все реакции указанного стейта. |
if elseif else | Обеспечивают ветвление сценария — выполнение различных реакций в зависимости от заданных условий. |
image | Отправляет изображение. |
inlineButtons | Отправляет инлайн-кнопки. Нажатие на инлайн-кнопку вызывает отправку данных или переход по ссылке. Инлайн-кнопки отображаются не под диалогом, а внутри него в виде реплик чат-бота. |
random | Выполняет одну из случайно выбранных вложенных реакций. |
script | Выполняет код на JavaScript. |
timeout | Задает автоматический переход в другой стейт, если от пользователя нет ответа. |
video | Отправляет видеофайл. |
newSession | Устарело Создает новую сессию. |
Теги действий
Теги действий выполняют сложные и часто повторяющиеся действия бота или фрагменты сценариев.
Тег | Описание |
---|---|
Confirmation | Позволяет запросить у пользователя подтверждение какого-либо действия. |
Email | Отправляет сообщение на указанный email. |
EndSession | Завершает текущую сессию пользователя и очищает все сессионные данные. |
GoogleSheets | Реализует интеграцию с сервисом Google Таблицы. С помощью этого тега бот может получать данные из таблиц или записывать в них данные. |
HttpRequest | Отправляет HTTP-запрос. С помощью этого тега бот может получать данные из внешнего ресурса и сохранять их в переменные. |
InputFile | Позволяет запросить у пользователя файл и сохранить ссылку на него в переменную. |
InputNumber | Позволяет запросить у пользователя число в указанном диапазоне и сохранить его в переменную. |
InputPhoneNumber | Позволяет запросить у пользователя номер телефона и сохранить его в переменную. Поддерживаются только российские номера. |
InputText | Позволяет запросить у пользователя произвольный текст и сохранить его в переменную. |
Sms | Отправляет SMS на указанный номер телефона. Поддерживаются только российские номера. |
TelegramPayment | Отправляет форму оплаты через Telegram. |
TransferCallToOperator | Переводит звонок на оператора (для ботов в телефонном канале). |
TransferToOperator | Переводит диалог на оператора платформы онлайн-чатов (для текстовых ботов). |