У меня есть бессерверное приложение, в котором я хочу запускать свою логику из запроса чат-бота из Facebook Messenger. Когда я запускаю функцию намерения для test_handler , я получаю правильный ответ. Но после того, как я добавил еще один обработчик для skillRatio , похоже, я получаю ошибку в заголовке, т.е.

Ошибка: платформа НЕ может быть пустой при новой полезной нагрузке

, Мой код приведен ниже.

const serverless = require('serverless-http');
const bodyParser = require('body-parser');
const express = require('express');

const app = express();
app.use(bodyParser.json({ strict: false }));

const {WebhookClient, Payload, Image, Card, Suggestion} = require('dialogflow-fulfillment');
const request = require('request');

app.get('/', function (req, res) {
  res.send('Hello World !!!\n');
  console.log("Testing express lambda\n");
})

app.post('/', function (req, res) {
    const agent = new WebhookClient({request: req, response: res});

    function test_handler(agent) {
      agent.add(`Welcome to my agent on AWS Lambda!`);
      agent.add(new Image("https://image-charts.com/chart?chs=700x190&chd=t:60,40&cht=p3&chl=Hello%7CWorld&chf=ps0-0,lg,45,ffeb3b,0.2,f44336,1|ps0-1,lg,45,8bc34a,0.2,009688,1"))
    }

    function skillRatio(agent) {
      agent.add(`Let me just have a look and I'll gather the data. *Processing Chart Data....Mmmm Pie*. 
        Here we go! Here is the data on your $Skills.original request.`);
      //agent.add(`Feel free to save or share :)`);
      //agent.add(new Image("https://image-charts.com/chart?chs=700x190&chd=t:60,40&cht=p3&chl=Hello%7CWorld&chf=ps0-0,lg,45,ffeb3b,0.2,f44336,1|ps0-1,lg,45,8bc34a,0.2,009688,1"))
    }

    // Run the proper function handler based on the matched Dialogflow intent name
    let intentMap = new Map();
    intentMap.set('super-test', test_handler);
    //intentMap.set('skill-ratio', skillRatio);

    if (agent.requestSource === agent.FACEBOOK) {
      intentMap.set('super-test', test_handler);
      intentMap.set('skill-ratio', skillRatio);
    } else {

    }

    agent.handleRequest(intentMap);
})
module.exports.handler = serverless(app);

Изображения диалогового окна:

Training Phrases enter image description here enter image description here enter image description here

Я пытаюсь запустить код в Messenger. Любая помощь будет очень признательна, так как я так застрял, пытаясь понять это.

3
SmiffyKmc 11 Янв 2019 в 00:27

2 ответа

Лучший ответ

Как оказалось, на изображении ниже пользовательская полезная нагрузка вызвала мою проблему. Если вы получите ту же ошибку

Ошибка: платформа НЕ может быть пустой при новой полезной нагрузке.

Трижды проверьте ответы по умолчанию для всех типов ответов и удалите все, что имеет пустую полезную нагрузку.

enter image description here

1
SmiffyKmc 11 Янв 2019 в 11:57

Ваше решение немного интуитивно понятно и не совсем правильно. Это не проблема с пустой полезной нагрузкой, проблема сохраняется с полезной нагрузкой в целом.

Вы можете попробовать установить платформу вручную так => Как настроить пользовательскую платформу в Dialogflow NodeJS Client

Или выберите один из способов, описанных здесь => https://github.com/dialogflow/dialogflow-fulfillment-nodejs/issues/ 153

Настройка платформы перед инициализацией WebHookClient

if (!request.body.queryResult.fulfillmentMessages)
    return;
request.body.queryResult.fulfillmentMessages = request.body.queryResult.fulfillmentMessages.map(m => {
    if (!m.platform)
        m.platform = 'PLATFORM_UNSPECIFIED';
    return m;
});
0
angularNoob 13 Мар 2020 в 13:18