首页 > 解决方案 > 在 DialogFlow 中使用内联编辑器进行 http 请求调用

问题描述

以下是我正在调用的函数,但每次我遇到错误错误时 - MalformedResponse 无法将 Dialogflow 响应解析为 AppResponse,因为语音响应为空。

$ 下面是完整的代码

function callExternalAPI () {
    return new Promise((resolve, reject) => {
       let path = 'path';
       console.log('API Request: ' + path);
       http.get({host: host, path: path}, (res) => {
       let body = ''; 
       res.on('data', (d) => { body += d; }); 
       res.on('end', () => {
         let response = JSON.parse(body);
         let output = 'response';
         console.log(output);
         resolve(output);
      });
      res.on('error', (error) => {
         console.log(`Error calling the weather API: ${error}`);
         reject();
      });
  });
  let intentMap = new Map();
  intentMap.set('CardView',callExternalAPI);
  agent.handleRequest(intentMap);
});

标签: node.jsdialogflow-es

解决方案


内联编辑器使用Cloud Functions for Firebase。默认情况下,您的项目使用 Firebase“Spark”计划,该计划将网络连接限制为仅限 Google 服务。

由于连接被拒绝,if (err)块被触发,并且您没有指定在发生这种情况时将响应发送回用户,因此您收到“空语音响应”错误。

最简单的解决方案是升级到付费计划,例如“Blaze”计划,这将要求您注册信用卡,但它具有免费等级,因此您不会为基本操作水平付费,通常涵盖您的开发和测试,甚至可能涵盖轻型生产使用。

如果发生错误,您可能还应该设置响应。


推荐阅读