node.js - 在 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);
});
解决方案
内联编辑器使用Cloud Functions for Firebase。默认情况下,您的项目使用 Firebase“Spark”计划,该计划将网络连接限制为仅限 Google 服务。
由于连接被拒绝,if (err)
块被触发,并且您没有指定在发生这种情况时将响应发送回用户,因此您收到“空语音响应”错误。
最简单的解决方案是升级到付费计划,例如“Blaze”计划,这将要求您注册信用卡,但它具有免费等级,因此您不会为基本操作水平付费,通常涵盖您的开发和测试,甚至可能涵盖轻型生产使用。
如果发生错误,您可能还应该设置响应。
推荐阅读
- python - 将数据框中的所有列合并到列表中
- python - Python 单元测试:如何正确地对内部具有多个 func 调用的函数进行单元测试
- java - 如何退出返回类型为 int[] 的函数?
- powershell - Powershell - 单元格将 Excel 列格式化为小数位
- makefile - 为什么 Makefile 目标依赖于两个目标,但只运行一次?
- laravel - Laravel 中间件路由到不同的控制器
- android - 不要把位置当作固定的;仅立即使用并调用 holder.getAdapterPosition() 稍后查找
- android - 如何通过 mtp(android 内部存储器)运行具有填充依赖项的 exe,而不是将所有文件复制到 pc
- node.js - 如果未定义数组错误,我如何防止这段特定的代码在我的 ejs 文件中运行
- druid - Druid 使用多个维度进行维度提取功能