Использование postBack для отправки текстового сообщения бота с использованием BotFramework v4 и Node.js - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь отправить текстовое сообщение postBack моему боту, но не знаю правильный синтаксис.

Вот мой код:

if (postback.payload == "WHAT_IS_MENTAL_HEALTH") {
      await turnContext.sendActivity("TO-DO: Forward on 'What Is Mental Health?' to Bot Handler");
      ActionTypes.postBack("What Is Mental Health?");
}

Я пытаюсьвперед на текст "Что такое психическое здоровье?"моему боту, чтобы он отозвал ответ QnA Maker на этот вопрос.

Шаги для этого следующие:

  1. Пользователь нажимает кнопку на карте общего шаблона Facebook Messenger.(например, кнопка «Что такое психическое здоровье?»)
  2. Кнопка отправляет полезную нагрузку postBack боту (например, «WHAT_IS_MENTAL_HEALTH»)
  3. Я обнаруживаю полезную нагрузку postBack из Facebook Messenger (например, если(postBack.payload == «WHAT_IS_MENTAL_HEALTH»))
  4. Как только определенная полезная нагрузка postBack обнаружена, я затем хочу отправить дополнительный postBack моему боту в виде текста (например, «Что такое психическое здоровье?»), чтобы он могбыть интерпретированным моей QnA и отвечать правильным ответом, который был запрограммирован в моей базе знаний QnA.

1 Ответ

1 голос
/ 01 июля 2019

событий 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.');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...