Почему в Messenger не могут отображаться расширенные сообщения, поскольку они отображаются во внутреннем тестере?

У меня есть чат-бот Dialogflow. Во внутреннем тестере Dialogflow все работает нормально, но в версии, отображаемой на facebook, я не могу получить подсказки или предложения. Даже когда я заменяю их кодом другого работающего чат-бота.

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion, Payload} = require('dialogflow-fulfillment');
var answers = [];

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });

  function welcome(agent) {
    agent.add('Hi! Do you want to discover your lockdown personality?');
    agent.add(new Card({
        title: '1. How has the COVID-19 crisis',
        imageUrl: 'https://ejoy-english.com/blog/wp-content/uploads/2018/08/shutterstock_524250877-e1496428580440.jpg',
        text: 'impacted the stability of your life?',
      })
    );
    agent.add(new Suggestion("1 more exasperated and hopeless"));
    agent.add(new Suggestion("2 less freaked out than other people"));
    agent.add(new Suggestion("3 More calm and hopeful"));
    agent.add(new Suggestion("4 More scared and panicked"));
    agent.add(new Suggestion("5 More surprised and baffled"));
  }
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);


  agent.handleRequest(intentMap);
});

Вот что я получаю на Facebook:

И во внутреннем тестере Dialogflow:

Он хорошо работает в Slack, и мне удалось создать другого чат-бота, который также использует расширенные сообщения без использования полезной нагрузки JSON, и он хорошо работал в мессенджере. Я не знаю, почему в Messenger не могут отображаться насыщенные сообщения с помощью этого конкретного чат-бота.

2 ответа

Встроенный тестер DialogFlow - хороший способ проверить ход разговора и проверить распознавание намерений, однако при рендеринге ответа (от быстрых ответов до вложений) вам необходимо учитывать, что у Facebook есть другой механизм рендеринга (такой же каналы), поэтому определенные типы не воспроизводятся хорошо, и они определенно не стандартизированы.

Я считаю, что решение в этом случае - предоставить настраиваемую полезную нагрузку Facebook, которую ожидает платформа Messenger.

Например, для кнопок:

 {
  "facebook": {
    "attachment": {
      "type": "template",
      "payload": {
        "template_type": "button",
        "text": "Can I ask you a few questions?",
        "buttons": [
          {
            "title": "Yes",
            "payload": "Yes",
            "type": "postback"
          },
          {
            "payload": "No",
            "title": "No",
            "type": "postback"
          }
        ]
      }
    }
  }
}

Когда вы используете библиотеку DialogFlow Fulfillment, вы хотите посмотреть на объект Payload.

agent.add(new Payload(agent.FACEBOOK, {/*your custom payload here*/});

Я заметил что-то странное в ответе HTTP для моей службы webhook выполнения диалогового процесса: полученная полезная нагрузка JSON содержит 4 нежелательных символа, вставленных в начало JSON, когда я использую клиент Dialogflow Messenger, встроенный на мою веб-страницу. Но эти символы не появляются в полезной нагрузке ответа JSON, когда я использую тестер "Попробовать сейчас" в консоли Dialogflow Agent.

Эти дополнительные символы могут вызвать недопустимый JSON, что нарушит отображение карточек и быстрых ответов в клиенте обмена сообщениями. Это ошибка в Dialogflow Messenger, которая вызывает проблемы с рендерингом?

)]}' <---What are these???
{
  "responseId": "xxxxx",
  "queryResult": {
    "queryText": "baby shower",
    "parameters": {
      "occassionType": "baby shower"
    },
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Ok, you are looking for your baby shower",
    "fulfillmentMessages": [{
      "text": {
        "text": ["Ok, you are looking for your baby shower"]
      }
    }, {
      "payload": {
        "queryResult": {
          "action": "input.welcome",
          "allRequiredParamsPresent": true,
          "diagnosticInfo": {
            "webhook_latency_ms": 191.0
          },
          "fulfillmentMessages": [{
            "text": {
              "text": ["Hi! My name is Buffie. XXXXXXX"]
            }
          }, {
            "card": {
              "buttons": [{
                "postback": "https://somewhere.com",
                "text": "Button"
              }],
              "imageUri": "https://www.gstatic.com/webp/gallery/4.jpg",
              "subtitle": "This is some example text...",
              "title": "Card Title"
            }
          }],
          "fulfillmentText": "Hi! My name is Buffie, how can I help you",
          "intent": {
            "displayName": "Default Welcome Intent",
            "name": "projects/xxxxx/xxxxx"
          },
          "intentDetectionConfidence": 1.0,
          "languageCode": "en",
          "parameters": {
          },
          "queryText": "hi"
        },
        "responseId": "XXXXXXXX",
        "webhookStatus": {
          "message": "Webhook execution successful"
        }
      }
    }],
    "intent": {
      "name": "projects/xxxxx/xxxx/xxxx",
      "displayName": "Occassion"
    },
    "intentDetectionConfidence": 1.0,
    "languageCode": "en"
  }
}

Другие вопросы по тегам