События
Сценарии в 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
}
Справочник системных событий
События NLU
Событие | Описание |
---|---|
match | Классификатор распознал запрос пользователя, но бот не смог перейти ни в какой стейт сценария по интенту с наибольшим весом. |
noMatch | Классификатор не распознал в запросе пользователя ни один интент или паттерн с достаточной степенью уверенности. |
match
не актуально, а вместо event!: noMatch
используется паттерн q!: *
.События ограничений запроса
Событие | Описание |
---|---|
lengthLimit | Превышено ограничение на длину запроса пользователя. |
timeLimit | Превышено ограничение на время обработки запроса. |
nluSystemLimit | Превышено одно из системных ограничений:
Это событие нельзя настроить в конфигурационном файле |
События переполнения $session и $client
Событие | Описание |
---|---|
sessionDataSoftLimitExceeded | Достигнуто мягкое ограничение на объем данных в $session . |
sessionDataHardLimitExceeded | Достигнуто жесткое ограничение на объем данных в $session . |
clientDataSoftLimitExceeded | Достигнуто мягкое ограничение на объем данных в $client . |
clientDataHardLimitExceeded | Достигнуто жесткое ограничение на объем данных в $client . |
События отправки SMS
Событие | Описание |
---|---|
smsSuccessEvent | SMS-сообщение было успешно отправлено получателю. |
smsFailedEvent | SMS-сообщение не было отправлено получателю. |