Перейти к основному содержимому

JAICP DSL

JAICP DSL — язык, на котором пишутся сценарии ботов в JAICP. Он предоставляет удобный формат для описания логики, по которой работает бот.

Основу JAICP DSL составляют теги. Каждый тег имеет название, которое оканчивается двоеточием. Кроме того, у каждого тега могут быть:

  • Значение, которое указывается непосредственно после названия. Значение есть у большинства тегов и напрямую задает их поведение.
  • Параметры — пары «ключ — значение», которые отделяются от названия или значения тега (если оно есть) двумя вертикальными чертами. Если параметров несколько, они отделяются друг от друга запятыми. Параметры позволяют модифицировать поведение тега.
  • Вложенные данные, которые указываются на отдельной строке после объявления тега и выделяются отступами. В качестве вложенных данных выступают другие теги.
tag1: value1
tag2: value2 || paramKey = "paramValue", booleanParam = true
подсказка
Степень вложенности управляется отступами, как в языках Python или YAML. В одном и том же файле сценария на каждый уровень вложенности должно быть одинаковое число пробелов (обычно 4).

В 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Переводит диалог на оператора платформы онлайн-чатов (для текстовых ботов).
подсказка
Помимо использования встроенных тегов действий, вы также можете создавать собственные.