События
Сценарии в 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 | Превышено одно из системных ограничений:
 chatbot.yaml, но можно отследить его в сценарии. | 
События переполнения $session и $client
| Событие | Описание | 
|---|---|
sessionDataSoftLimitExceeded | Достигнуто мягкое ограничение на объем данных в $session. | 
sessionDataHardLimitExceeded | Достигнуто жесткое ограничение на объем данных в $session. | 
clientDataSoftLimitExceeded | Достигнуто мягкое ограничение на объем данных в $client. | 
clientDataHardLimitExceeded | Достигнуто жесткое ограничение на объем данных в $client. | 
События отправки SMS
| Событие | Описание | 
|---|---|
smsSuccessEvent | SMS-сообщение было успешно отправлено получателю. | 
smsFailedEvent | SMS-сообщение не было отправлено получателю. | 
События аккаунта
| Событие | Описание | 
|---|---|
tariffBlocked | Аккаунт JAICP заблокирован за неуплату. | 
События входящих каналов
| Событие | Описание | 
|---|---|
fileEvent | Пользователь отправил боту файл. | 
fileTooBigEvent | Пользователь отправил файл размером выше 50 Мбайт. | 
fileEvent и fileTooBigEvent поддерживаются во всех входящих каналах, кроме Jivo, Zendesk и Zendesk Chat.
В чат-виджете поддерживается только событие fileEvent.Битрикс24
| Событие | Описание | 
|---|---|
CRM_SUCCESS_EVENT | Событие CRM Битрикс24 обновлено. | 
CRM_FAILED_EVENT | Событие CRM Битрикс24 не обновлено. | 
ONAPPINSTALL | Приложение установлено. | 
ONAPPUPDATE | Приложение обновлено. | 
ONIMBOTMESSAGEADD | Бот получил сообщение. | 
ONIMBOTMESSAGEUPDATE | Бот обновил сообщение. | 
ONIMBOTMESSAGEDELETE | Бот удалил сообщение. | 
ONIMCOMMANDADD | Бот получил команду. | 
ONIMJOINCHAT | Бот получил информацию о том, что он добавлен в чат. | 
ONIMBOTDELETE | Бот удален. | 
edna WhatsApp 2.0
| Событие | Описание | 
|---|---|
locationEvent | Пользователь отправил локацию. | 
Microsoft Teams
| Событие | Описание | 
|---|---|
acceptFile | Пользователь согласился принять файл. | 
declineFile | Пользователь отказался принять файл. | 
Telegram
| Событие | Описание | 
|---|---|
stickerEvent | Пользователь отправил стикер. | 
telegramSendContact | Пользователь отправил контакт. | 
telegramSendLocation | Пользователь отправил локацию. | 
telegramApiRequestFailed | Не удалось получить файл, который отправил пользователь. | 
telegramCallbackQuery | Пользователь нажал на инлайн-кнопку с параметром callback_data. Его значение доступно как $request.rawRequest.callback_query.data. | 
telegramPaymentSuccessEvent | Пользователь совершил успешный платеж. | 
telegramPaymentFailedEvent | Платеж не прошел, или возникла ошибка из-за того, что неправильно заполнены параметры формы оплаты. | 
telegramPrecheckoutEvent | Telegram сделал проверку наличия товара. | 
telegramPaymentSuccessEvent, telegramPaymentFailedEvent и telegramPrecheckoutEvent нужно обрабатывать, только если вы настраиваете оплату в Telegram через тип ответа telegramPayment.
Если вы используете тег действия TelegramPayment, то обработка этих событий уже встроена в него.Viber
| Событие | Описание | 
|---|---|
viberSendLocation | Пользователь отправил локацию. | 
viberSendSticker | Пользователь отправил стикер. | 
viberSendContact | Пользователь отправил контакт. | 
viberUnsubscribe | Пользователь отписался от бота. Бот не может посылать новые сообщения. | 
conversationStarted | Бот отправил приветственное сообщение до начала сессии. | 
conversationStarted возможно расхождение количества уникальных пользователей на странице Управление аккаунтом с данными, которые есть у аккаунт-менеджера.
Для получения актуальной информации обратитесь к аккаунт-менеджеру.Vonage
Когда в канал Vonage WhatsApp приходит любое нетекстовое сообщение, в сценарий отправляется событие с названием его типа, например event: audio.
В eventData передаются все данные запроса от канала.
WeChat
| Событие | Описание | 
|---|---|
weChatSendLocation | Пользователь отправил локацию. | 
weChatAnyMessage | Не удалось распознать тип сообщения от пользователя. | 
События операторских каналов
| Событие | Описание | 
|---|---|
livechatFinished | Оператор закрыл чат с пользователем. | 
noLivechatOperatorsOnline | Все операторы оффлайн. | 
События телефонии
| Событие | Описание | 
|---|---|
speechNotRecognized | Бот не смог распознать речь абонента в течение 5 секунд. | 
hangup | Абонент завершил звонок. | 
botHangup | Бот завершил звонок при помощи метода $dialer.hangUp. | 
transfer | Звонок переведен на оператора. | 
noDtmfAnswerEvent | Абонент не ввел DTMF-сообщение в тональном наборе. | 
onCallNotConnected | Бот не смог дозвониться до абонента. | 
bargeInIntent | Абонент сделал попытку перебить бота в режиме перебивания по условию. |