dialogflow-es - 使用 NodeJS 客户端来自 Webhook 的响应
问题描述
我构建了一个自定义 webhook 作为 Dialogflow 意图的实现端点。当我使用原始 JSON 响应时,它工作正常,即:{'fullfillmentText':'hi'}
,但似乎无法使用“actions-on-google”库。
他们网站上的代码暗示这应该可以工作:
app.intent('myintent', (conv) => {
conv.close('See you later!');
});
但事实并非如此。Google Home 只是说我的应用没有响应。就目前而言,我的函数(使用 Fn Project)可能必须返回 JSON,如果我返回 JSON 作为响应,它并不期望它会失败。也许有人可以阐明一些?
编辑 1:我正在使用Fn Project开源函数作为服务的自定义 webhook。演示如何使用该项目是我在这里的目的,因此我不想使用内联编辑器或 Google Cloud Functions 或 firebase 或任何其他默认选项。
这是其余的代码
const fdk = require('@fnproject/fdk');
const request = require('request');
const dialogflow = require('actions-on-google');
const app = dialogflow({
debug: true,
});
fdk.handle(function (input) {
app.intent('myintent', (conv) => {
conv.ask('I could not understand. Can you say that again?');
});
return {'fulfillmentText': 'response from webhook'}
});
解决方案
尽管您正在创建app
对象,该对象执行 Intent 处理程序等处理,并通过 向其注册处理程序,但app.intent()
您没有做任何事情来“导出”它,因此app
当 webhook 被触发时,将调用 的方法。调用时,它会获取请求的主体,并将格式化 JSON 以用于响应。
例如,如果您使用的是 Firebase 函数,您将app
通过这些函数连接以进行处理,例如
exports.fulfillment = functions.https.onRequest(app);
但你不是。您正在使用不同的框架。
该库附带了许多开箱即用的框架,但 Fn 项目不是其中之一。理论上,您可以创建自己的Framework 对象,它会为您执行此操作(本文的“框架”部分对此进行了简要讨论,但没有详细说明如何执行此操作)。
正如您所猜测的那样,您可能最简单的方式是仅读取 JSON 请求并自己生成 JSON 响应,而无需使用 actions-on-google 库。或者您可以查看诸如multivocal之类的库,看看是否更容易利用其多框架支持。
推荐阅读
- javascript - 为什么动画回调函数不执行?
- machine-learning - 为什么在分类数据集中用 -99999 替换缺失值
- python - 使用字典从 csv 文件创建图形
- python - 如何根据第一次出现从 DataFrame 中检索行
- vim - vim 颜色方案不在 Windows 命令行中呈现
- javascript - TypeError:无法读取未定义 React.js 的属性“用户名”
- http - [HTTP]为什么分号参数不再常用?
- window-functions - 在 Presto 中进行基于范围的交叉连接的最佳方法是什么?
- linux - Linux alsa:更改 alsa 输出中左/右声道的音量
- python - 测试单元素列表以避免 IndexErrors 的 Pythonic 方法