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!
Объявляет интент, по которому диалог может перейти в стейт.
event
event!
Объявляет событие, по которому диалог может перейти в стейт.

Теги реакций

Теги реакций задают реакции, которые выполняет бот при попадании в стейт.

Тег Описание
a Отправляет текстовый ответ.
audio Отправляет аудиофайл.
buttons Отправляет кнопки, по которым возможен переход в другие стейты.
go Выполняет отложенный переход в другой стейт. При этом реакции указанного стейта не выполняются, но обработка следующего запроса происходит в контексте этого стейта.
go! Выполняет немедленный переход в другой стейт. При этом выполняются все реакции указанного стейта.
if
elseif
else
Обеспечивают ветвление сценария — выполнение различных реакций в зависимости от заданных условий.
image Отправляет изображение.
inlineButtons Отправляет инлайн-кнопки.
Нажатие на инлайн-кнопку вызывает отправку данных или переход по ссылке. Инлайн-кнопки отображаются не под диалогом, а внутри него в виде реплик чат-бота.
newSession Запускает новую сессию.
random Выполняет одну из случайно выбранных вложенных реакций.
script Выполняет код на JavaScript.

Специальные теги

Специальные теги выполняют сложные или часто повторяющиеся действия бота или фрагменты сценариев.

Тег Описание
Email Отправляет сообщение на указанный email.
GoogleSheets Реализует интеграцию с сервисом Google Таблицы, с помощью которой вы сможете получать данные из таблиц или записывать данные в таблицы.
HttpRequest Отправляет HTTP-запрос. С помощью этого тега бот может получать данные из внешнего ресурса и сохранять их в переменные.
InputFile Позволяет получить от пользователя файл: например, фотографию товара или файл с данными юридического лица.
Sms Отправляет SMS на указанный номер телефона (только на российские номера).
TelegramPayment Отправляет форму оплаты через Telegram.
TransferCallToOperator Переводит звонок на оператора, например, когда задачу нельзя решить без участия человека (для ботов в телефонном канале).
TransferToOperator Переводит диалог на оператора платформы онлайн-чатов (для текстовых ботов).

Помимо использования готовых специальных тегов, вы также можете создавать собственные.