如何在Dialogflow的承诺中通知用户POST失败?

时间:2019-05-09 08:33:57

标签: node.js dialogflow

在我的dialogflow代理中,为实现目标,我在代码中扮演了一个部分,我称其为诺言,而机器人则用来自服务器的一些数据来响应用户。如果成功,一切都会按预期进行。但是,如果发生错误(例如服务器断电),我想向用户显示一条消息,指出发生了错误,并且他/她不需要等待永恒的答案。

      return new Promise( (resolve,reject) => {
        const request = require('request-promise-native');
        const options = {  
          uri: 'https://server.server.com/example',
          method: 'POST',
          headers: {
            'api-token': 'code'
        },
          body: {
            user:'user_name'
         },
        json: true
    };

    request(options)
        .then(function (body) {
            // POST succeeded
            console.log("got: "+ body);
            agent.add("SUCCESS");
            resolve();
        })
        .catch(function (err) {
            // POST failed...
            console.log("ERROR!: " + err);            
            agent.add("I am sorry for the inconvenience but an error happened during your last call.");
            agent.add("Please try in a while");
            console.log(err.stack);
        });
    });

POST消息失败后的错误消息被打印在日志文件中(因此它位于.catch部分),但是用户没有收到任何消息,agent.add()函数在该文件中不起作用的情况下,这似乎很奇怪。答应程序失败后,如何向用户打印消息?

2 个答案:

答案 0 :(得分:1)

然后,您可以根据发布请求的响应尝试这样做。例如,构建一个promise函数,并在发生错误时拒绝错误。然后,在您的意图处理程序中,获得拒绝的答案,如果函数存在拒绝响应,则显示错误消息。

我对'request-promise-native'不熟悉,但是您可以在promise中使用'request'模块尝试

netlify.toml

然后在您的意图处理程序中

request.post(options, (error, response, body) => {
   if (error) {
     console.log(error);
     reject(error);
   }
   else {
     answer = body;
     resolve(answer);
   }
});

答案 1 :(得分:0)

使用try-catch语句?我不知道会发生什么错误,但是如果您收到错误消息,您肯定可以抓住它吗?