Перейти к основному содержимому
Версия: 3.0

Событие диалога (event)

Каждое сообщение клиента превращается в событие event, которое проходит через NLU, хуки, звенья и переходы. Условия переходов и действия читают из него данные. Ниже поля, которые нужны на практике.

Сообщение​

ПолеЧто содержитПример
event.previewТекст сообщения как строка; для кнопки название кнопки'Проверить баланс'
event.typeТип сообщения: text, quick_reply (кнопка меню), postback (кнопка карточки), file, image, session_reset и другие'quick_reply'
event.payloadСодержимое по типу: для текста { type, text }, для кнопки { type, text, payload }, где payload значение кнопки в верхнем регистре; для файла ссылка и имяevent.payload.payload === 'BALANCE'
event.channelКанал: api для iQChannels и Converse API, web для эмулятора и веб-чата
event.targetИдентификатор клиента в канале (из iQChannels приходит идентификатор обращения клиента)
event.botIdИдентификатор бота
event.idИдентификатор события; нужен действию «Отправить оценку» (temp.eventId)

Кнопки меню приходят как quick_reply с названием в text и значением в payload; набранный вручную текст приходит как text. Условие «Если нажата кнопка» конструктора переходов учитывает оба случая.

Понимание языка​

ПолеЧто содержит
event.nlu.intent.name, event.nlu.intent.confidenceЛучшее намерение и уверенность (0–1). none, если ничего не подошло
event.nlu.intentsВсе кандидаты с уверенностью
event.nlu.entitiesИзвлечённые сущности: name, type, data.value
event.nlu.slotsЗаполненные слоты намерения: event.nlu.slots.<слот>.value
event.nlu.languageЯзык, на котором распознавалась фраза; event.nlu.detectedLanguage определённый язык текста
event.nlu.includedContextsКонтексты, в которых искалось намерение

Условие по намерению из конструктора: event.nlu.intent.name === 'вопрос по кредиту' && event.nlu.intent.confidence >= 0.6.

Состояние​

ПолеЧто содержит
event.state.temp, event.state.session, event.state.user, event.state.botПеременные диалога, см. «Переменные и память диалога». В условиях и действиях доступны короткие имена temp, session, user, bot
event.state.context.currentFlow, currentNodeГде сейчас клиент (служебное)
event.state.session.lastMessagesПоследние реплики: кто сказал, откуда ответ (replySource), уверенность

Решение платформы​

ПолеЧто содержит
event.suggestionsКандидаты на ответ: ответы QnA с уверенностью, предложения модулей; у каждого decision.status (elected, dropped) и причина
event.decisionЧто выбрано: источник (qna, decisionEngine) и подробности

Эти поля показывает «Панель отладки» Studio: откройте вкладку «Отладчик», выберите сообщение в эмуляторе и увидите намерение, сущности, кандидатов и причину решения. Так удобно проверять условия перед тем, как вписывать их в переходы.

В действии​

const text = event.preview                 // что написал клиент
const amount = event.nlu.slots.amount?.value
if (event.type === 'quick_reply') {
temp.choice = event.payload.payload // значение кнопки
}
await iqbot.events.replyToEvent(event, [{ type: 'text', text: `Вы написали: ${text}` }])

Поля event.nlu, event.suggestions и event.decision только для чтения; менять можно event.state.* и, в хуках before_incoming_middleware, сам event.payload (например, чтобы нормализовать текст).