Это будет небольшая статья, если вы уже знаете, как установить и подключить Dialogflow с Messenger.

Psst: полный код в конце этой статьи.

Проблема

Я изо всех сил пытался понять, как обрабатывать стикеры и изображения Messenger по отдельности.

Единственное упоминание об этом было ответом на Stackoverflow, и в моем случае этого было недостаточно.

Событие «FACEBOOK_MEDIA» также принимает все виды медиафайлов, изображений и стикеров. Мне пришлось их разделить.

Решение

Решение очень простое, но я потратил много времени, чтобы понять это.

# 1 Dialogflow

В намерении Dialogflow добавьте «FACEBOOK_MEDIA» как событие. Например, я назвал намерение «изображениями».

В качестве ответа вы можете указать что-нибудь как резервное. Мы отправим ответы с node.js

И, наконец, включите «Выполнение› Включить вызов веб-перехватчика… »

№2 Node.js

С другой стороны, нам понадобится всего пара строк кода. Итак, сначала нам понадобится функция для обработки намерений «изображений», например:

function imagesFunc (agent) {/ * здесь код… * /}

После этого добавьте новую intentMap для этой функции. Вот так:

intentMap.set («изображения», imagesFunc)

Теперь давайте добавим код внутрь функции imagesFunc.

Прежде всего, нам нужно захватить ввод пользователя после срабатывания события «FACEBOOK_MEDIA». После этого мы просто извлечем стикер_id из ответа.

const sticker_id = agent.request_.body.originalDetectIntentRequest.payload.data.message.sticker_id;

Возможны два результата: не определено и фактический идентификатор стикера. Как вы полагаете, теперь мы можем создать IF ELSE следующим образом:

if (sticker_id! = undefined) {// это наклейка
agent.add («Хорошая наклейка!»);
} else {// это не наклейка
agent.add («Спасибо за изображение!»);
}

Вот и все! Все просто, правда? :)

Полный код:

Https://gist.github.com/stefanmm/4e78abd119f04105864c6bfafe73b0f8