событий Facebook и Bot Framework
Когда Facebook отправляет событие вашему боту, он отправляет Activity
с Event
ActivityType . Для некоторых событий данные события находятся в свойстве Activity.Value
. Для других событий, таких как PostBack из быстрого ответа, активность будет Message
, а данные будут в Activity.ChannelData
. Например, ваш бот может получить событие postBack в виде действия, подобного этому:
{
channelId: 'facebook',
[...]
type: 'message',
channelData: {
recipient: {...},
sender: {...},
message: {
[...],
quick_reply: {
[...],
payload: '<your payload>'
}
}
}
}
Обработка событий Facebook
Этот ответ будет в значительной степени извлечен из Образца событий Facebook . Я настоятельно рекомендую посмотреть на это для получения дополнительной помощи.
Захват сообщений и событий
Сначала вы хотите захватить сообщения и события на Facebook с помощью onMessage()
и onEvent()
:
this.onMessage(async (turnContext) => {
console.log('Processing a Message Activity.');
// Show choices if the Facebook Payload from ChannelData is not handled
if (!await this.processFacebookPayload(turnContext, turnContext.activity.channelData)) {
if (turnContext.activity.channelId !== 'facebook') {
await turnContext.sendActivity('This sample is intended to be used with a Facebook bot.');
}
await this.showChoices(turnContext);
}
});
this.onEvent(async (turnContext) => {
console.log('Processing an Event Activity.');
// Analyze Facebook payload from EventActivity.Value
await this.processFacebookPayload(turnContext, turnContext.activity.value);
});
Обработка сообщений / событий
Facebook может отправлять различные типы событий. Возможно, вы захотите использовать оператор if или switch для обработки каждого типа :
async processFacebookPayload(turnContext, data) {
// At this point we know we are on Facebook channel, and can consume the Facebook custom payload present in channelData.
const facebookPayload = data;
if (facebookPayload) {
if (facebookPayload.postback) {
// Postback
await this.onFacebookPostback(turnContext, facebookPayload.postback);
return true;
} else if (facebookPayload.optin) {
// Optin
await this.onFacebookOptin(turnContext, facebookPayload.optin);
return true;
[...]
}
return false;
}
В частности, обрабатывать PostBack
Образец просто делает:
async onFacebookPostback(turnContext, postback) {
console.log('Postback message received.');
// TODO: Your postBack handling logic here...
// Answer the postback and show choices
await turnContext.sendActivity('Are you sure?');
await this.showChoices(turnContext);
}
Если вы хотите направить вопрос в QnA Maker, вы можете (используя Образец QnA Maker в качестве руководства):
async onFacebookPostback(turnContext, postback) {
// qnaMaker.getAnswers doesn't accept string input, so we need to adjust our turnContext
// to match what it expects, which is a string in Activity.Text
turnContext.activity.text = postback.payload;
const qnaResults = await this.qnaMaker.getAnswers(turnContext);
// If an answer was received from QnA Maker, send the answer back to the user.
if (qnaResults[0]) {
await turnContext.sendActivity(qnaResults[0].answer);
// If no answers were returned from QnA Maker, reply with help.
} else {
await turnContext.sendActivity('No QnA Maker answers were found.');
}
}