繁体   English   中英

Dialogflow Fulfillment Webhook - 请求有效负载始终为空

[英]Dialogflow Fulfillment Webhook - Request Payload is always blank

我已经在内联编辑器中尝试了自动化的 Fulfillment Webhook 和 Coded in Node,但我似乎无法填充 PAYLOAD。 我成功连接到我的 API,但它正在寻找 PAYLOAD 中为空的 orderNumber? 需要什么才能让有效负载包含我的参数?

意图图片意图图片1

意向图 2意向图 2

以下来自诊断信息的信息

{
  "responseId": "7b8c877b-fc06-405a-8428-1959493f870d-a14fa99c",
  "queryResult": {
    "queryText": "10620054",
    "parameters": {
      "orderNumber": "10620054"
    },
    "allRequiredParamsPresent": true,
    "outputContexts": [
      {
        "name": "projects/rrd-order-bot-cxniiq/agent/sessions/199d2c42-4d42-15b6-6329-b116a51991e9/contexts/order",
        "lifespanCount": 5,
        "parameters": {
          "orderNumber": "10620054",
          "orderNumber.original": "10620054"
        }
      },
      {
        "name": "projects/rrd-order-bot-cxniiq/agent/sessions/199d2c42-4d42-15b6-6329-b116a51991e9/contexts/status",
        "lifespanCount": 5,
        "parameters": {
          "orderNumber": "10620054",
          "orderNumber.original": "10620054"
        }
      },
      {
        "name": "projects/rrd-order-bot-cxniiq/agent/sessions/199d2c42-4d42-15b6-6329-b116a51991e9/contexts/status",
        "lifespanCount": 5,
        "parameters": {
          "orderNumber": "10620054",
          "orderNumber.original": "10620054"
        }
      }
    ],
    "intent": {
      "name": "projects/rrd-order-bot-cxniiq/agent/intents/9a5f61e5-e2cc-44c9-8cb3-53a5d43ec0fc",
      "displayName": "Order information"
    },
    "intentDetectionConfidence": 0.01,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "payload": {}
  },
  "session": "projects/rrd-order-bot-cxniiq/agent/sessions/199d2c42-4d42-15b6-6329-b116a51991e9"
}

下面是除了自动 Webhook 之外我尝试过的内联编辑器代码。

// See https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// for Dialogflow fulfillment library docs, samples, and to report issues
'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
//var querystring = require('querystring');

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

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  function welcome(agent) {
    agent.add(`Welcome to my agent!`);
  }

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }

  function orderHandler(agent) {
    const order = agent.parameters.orderNumber;
    const https = require('https');
    const querystring = require('querystring');

    const parameters = {orderNumber: order};

    const post_data = querystring.stringify(parameters);

    const options = {
      hostname: 'xxxxxxxxxxxx', (removed for question)
      port: 443,
      path: '/RRD_OrderStatusWeb/v1/getRRDOrderStatus',
      method: 'POST' 
    };

const request = https.request(options, (response)=>{
    let chunks_of_data = [];

    response.on('data', (fragments) => {
        chunks_of_data.push(fragments);
    });

    response.on('end', () => {
        let response_body = Buffer.concat(chunks_of_data);
        console.log(response_body.toString());
    });

    response.on('error', (error) => {
        console.log(error);
    });
});

request.on('error', (error) => {
    console.log('Error Code: ' + error.code);
    console.log('Error Message: ' + error.message);
});

request.write(post_data);
request.end();    


    //agent.add('intent called: ' + order);
}

  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);
  intentMap.set('Order information', orderHandler);
  agent.handleRequest(intentMap);
});

我的 JASON API 调用的正确选项在这里。 目前这里只分块响应长度......

// See https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// for Dialogflow fulfillment library docs, samples, and to report issues
'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

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

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  function welcome(agent) {
    agent.add(`Welcome to my agent!`);
  }

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }

  function orderHandler(agent) {
    const order = agent.parameters.orderNumber;
    const https = require('https');
//    const querystring = require('JSON');
//    const parameters = {orderNumber: order};
    var auth = "Basic " + new Buffer("userid here" + ":" + "password here").toString("base64");

    const post_data = JSON.stringify({
      orderNumber: order
    });

    const options = {
      hostname: 'host url here',
      port: 443,
      path: 'path here',
      method: 'POST',
      headers: {
        'Authorization': auth,
        'Content-Type': 'application/json',
        'Content-Length': post_data.length
    }
    };

const request = https.request(options, (response)=>{
var chunks = '';

  response.on("data", function (chunk) {
    console.log(chunk.length);
    chunks += chunk;
  });

  response.on("end", function () {
    const object = JSON.parse(chunks);
    console.log(object.length);
    console.log(Buffer.byteLength(chunks, 'utf8') / 1024 + " kbytes");
  });
});

request.on('error', (error) => {
    console.log('Error Code: ' + error.code);
    console.log('Error Message: ' + error.message);
});

//agent.add('request data ' + request + post_data);    

request.write(post_data);
request.end();    

}

  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);
  intentMap.set('Order information', orderHandler);
  agent.handleRequest(intentMap);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM