События
Сценарии в JAICP поддерживают два способа взаимодействия с ботом:
- Запросы — сообщения, которые пользователь отправляет боту текстом или голосом. Их обрабатывает движок понимания естественного языка (NLU), после чего бот переходит в подходящий стейт и выполняет его реакции.
- События — действия, которые происходят в сценарии бота, в аккаунте JAICP или в канале, который подключен к проекту. В обработке событий не участвует NLU. Если бот может попасть в стейт, который ожидает событие, он сразу переходит в стейт и выполняет реакции.
События могут иметь произвольную природу, например:
- Когда пользователь отправляет в чат файл, канал отправляет событие о получении файла.
- Сам движок NLU генерирует событие, если он не смог распознать запрос.
- Внешний серви с при помощи события может оповестить бота, что пользователь вошел в аккаунт.
Типы событий
Системные события
Системные события по умолчанию доступны во всех сценариях JAICP. Подробнее о доступных событиях вы можете узнать в справочнике системных событий.
Пользовательские события
Разработчик может предусмотреть в сценарии обработку событий с произвольными именами. Такие события обычно используются для интеграции бота во внешние сервисы, например чат-приложения или CRM.
- Если бот подключен к каналу Chat API,
внешний сервис может отправить в чат произвольное событие с помощью методов
/chatapi/{token}
и/chatapi/{token}/async
. - Встроенный сервис
$pushgate
позволяет создавать из сценария события по расписанию, а также пушбэки — специальные сущности для обработки событий через Pushgate API. - Пользовательские события также можно использовать в сценарии, чтобы активировать бота при запуске текстовых рассылок.
Использование в сценарии
Чтобы задать событие, по которому диалог может перейти в стейт, используйте глобальный тег event!
или локальный тег event
.
После тега указывается название события.
state: NoMatch
event!: noMatch
a: Извините, я вас не понял. Попробуйте переформулировать вопрос.
state: InnerNoMatch
event: noMatch
a: К сожалению, я опять не смог вас понять. Перевожу запрос на оператора.
Некоторые события могут иметь вложенные данные.
Их можно получить в стейте, который сработал по событию, через объект $request
одним из способов:
$request.data.eventData
$request.rawRequest.eventData
stickerEvent
содержат метаданные стикера: размер, наличие анимации, соответствующий эмодзи и другую информацию.Пример значения $request.data.eventData
{
"file_id": "CAACAgIAAxkBAAIEEmHxVulVK5-ctf22Mes9jGXRBVTdAAIdFwACKyEFAAHPqSzw8fRaOyME",
"file_unique_id": "AgADHRcAAishBQAB",
"width": 512,
"height": 512,
"is_animated": false,
"thumb": {
"file_id": "AAMCAgADGQEAAgQSYfFW6VUrn5y1_bYx6z2MZdEFVN0AAh0XAAIrIQUAAc-pLPDx9Fo7AQAHbQADIwQ",
"file_unique_id": "AQADHRcAAishBQABcg",
"width": 128,
"height": 128,
"file_size": 2436
},
"emoji": "😭",
"set_name": "madl4bor",
"file_size": 30934
}