Параметр выполнения webhook диалога не работает в API post - PullRequest
0 голосов
/ 22 декабря 2019

Я делаю код в webhook, где я хочу вызвать API POST, и я хочу вызвать этот API, для этого мне нужно передать какой-то параметр, но всякий раз, когда я пытаюсь передать параметр, поступающий из диалогового потока, выдает ошибку. Мой код такой:

//Self Hosted Express Server

const bodyParser = require('body-parser')
var request = require('request-promise-native');
const { dialogflow } = require('actions-on-google');
const assistant = dialogflow({
  clientId: "305xxxxxx7-rv9kocdq2xxxxouuq8f9ul2eg.apps.googleusercontent.com"
});


module.exports = (app) => {
  const logger = console;

assistant.intent('Sales',(conv, params) => {
 var  pcode = params.myproduct;

// console.log(pcode)

    const token = '3369708919812376';
    const serviceID = '502';
    const P_STATE_CD = 'ALL';
    const P_FO_CD = 'ALL';
    const P_DISTT_CD = 'ALL';
    const P_DATE = '16/12/2019';
    const  P_PRD_GROUP = pcode;
    const P_PERSONAL_NO = '106296';
        var data = {"token" : token,"serviceID" : serviceID,"P_STATE_CD" : P_STATE_CD,"P_FO_CD" : P_FO_CD,"P_DISTT_CD" : P_DISTT_CD,"P_DATE" : P_DATE,"P_PRD_GROUP" : P_PRD_GROUP ,"P_PERSONAL_NO" : P_PERSONAL_NO };
        var sdata = JSON.stringify(data);

                    const options = {
                        method: 'POST',
                        uri: 'http://chatbotWebservice/resources/webservice/service' ,
                        body: JSON.parse(sdata) ,
                        json: true
                    }
        return request(options)
            .then( body => {
                 var unit = body
                unit.intent = "Sales"
                unit.value1 = unit.saleInfo[0].QMTD
                unit.value2 = unit.saleInfo[0].QYTD
                unit.value3 = unit.saleInfo[0].O_UOM
                unit.value4 = null
                unit.value5 = null

                delete unit.saleInfo
                var unit2 = JSON.stringify(unit)
                console.log(unit2)

          conv.ask(unit2);
              })
              .catch( err => {
               console.error( err );
               conv.ask('Something went wrong. What should I do now?');
                 });
  })

И такая ошибка

TypeError: Cannot read property '0' of undefined
    at request.then.body (/home/dbalounge/GoogleDF/service.js:40:44)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Пожалуйста, помогите мне с этим. Заранее спасибо

1 Ответ

0 голосов
/ 22 декабря 2019

Очевидно, body появляется в виде строки, возможно, потому что сервер не устанавливает правильный Content-Type для ответа, а request игнорирует параметр json: true. Таким образом, вы должны использовать JSON.parse на нем, а затем получить доступ к saleInfo

return request(options)
   .then( body => {
    var unit = JSON.parse(body)
    unit.intent = "Sales"
    unit.value1 = unit.saleInfo[0].QMTD
    /* ... */
 });

Помимо того, что body: JSON.parse(sdata) в вашем вызове не требуется, вы переводите data в sdataчтобы снова разобрать его, просто используйте data напрямую:

const options = {
    method: 'POST',
    uri: 'http://chatbotWebservice/resources/webservice/service' ,
    body: data,
    json: true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...