Я пытаюсь выяснить, как заставить Facebook Messenger показывать последующие приглашения от QnA Maker, используя BotFramework v4 и Node.js.
Мне удалось получить дополнительные подсказки, показывающиев WebChat:
Я справился с этим после того, как следовал великому совету Мэтта Станнетта в этой теме: Как реализовать карточки в вопросе QnA, в котором есть последующие запросы ииспользует их в карточках
Однако, когда дело доходит до их появления в Facebook Messenger, я действительно борюсь.
Я надеялся, что это будет так же просто, как определитьВ моем коде onMessage есть несколько быстрых ответов channelData for Facebook, так как мне просто нужно, чтобы Facebook передавал простую текстовую информацию.Я думал, что смогу сделать это подобным образом, я получил подсказки, показывающие для Webchat, код ниже:
this.onMessage(async (context, next) => {
this.logger.log('Processing a Message Activity');
const qnaResults = await this.qnaMaker.getAnswers(context);
// Show choices if the Facebook Payload from ChannelData is not handled
if (!await this.processFacebookPayload(context, context.activity.channelData)) {
if (context.activity.channelId == 'facebook') {
if (qnaResults[0]) {
const { answer, context: { prompts }} = qnaResults[0];
let reply;
if (prompts.length) {
const quickReply = {
channelData: {
"messaging_type":"RESPONSE",
"message":{
"text":"test1", //answer,
"quick_replies":[
{
"content_type":"text",
"title":"test2",//prompts.map({ displayText }),
"payload":"test3",//prompts.map({ displayText })
}
]
}
}
}
reply = quickReply;
} else {
reply = answer;
}
await context.sendActivity(reply);
// If no answers were returned from QnA Maker, reply with help.
} else {
await context.sendActivity('I\'m sorry, I don\'t have an answer for that. Please ask me something else, such as: \n\n "What Is Mental Health?" \n\n "What Is NeuroDiversity" \n\n "Help"');
}
} else {
// If an answer was received from QnA Maker, send the answer back to the user.
if (qnaResults[0]) {
const { answer, context: { prompts }} = qnaResults[0];
let reply;
if (prompts.length) {
const card = {
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"text": answer,
wrap: true
}
],
"actions": prompts.map(({ displayText }) => ({ type: "Action.Submit", title: displayText, data: displayText })),
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.1"
}
reply = { attachments: [CardFactory.adaptiveCard(card)] };
} else {
reply = answer;
}
await context.sendActivity(reply);
// If no answers were returned from QnA Maker, reply with help.
} else {
await context.sendActivity('I\'m sorry, I don\'t have an answer for that. Please ask me something else, such as: \n\n "What Is Mental Health?" \n\n "What Is NeuroDiversity" \n\n "Help"');
}
}
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
Это не работает, хотя.Я получаю ответы QnA на все вопросы, которые я задаю, у которых в QnA Maker не задано последующее приглашение, поэтому я знаю, что утверждение IF правильно идентифицирует Facebook как канал и что ответ имеет последующие приглашениясвязано с этим.Я думаю, что у меня просто нет правильного кода для быстрых ответов в Facebook.
Кто-нибудь может помочь?
Заранее спасибо!