【问题标题】:Response from Webhook using NodeJS Client使用 NodeJS 客户端来自 Webhook 的响应
【发布时间】:2019-02-02 20:14:17
【问题描述】:

我构建了一个自定义 webhook 作为 Dialogflow 意图的实现端点。当我使用原始 JSON 响应时,它工作正常,即:{'fullfillmentText':'hi'}, 但似乎无法使用“actions-on-google”库。

他们网站上的代码暗示这应该可以工作:

app.intent('myintent', (conv) => {
    conv.close('See you later!');
});

但事实并非如此。 Google Home 只是说我的应用没有响应。就目前而言,我的函数(使用 Fn Project)可能必须返回 JSON,如果我返回 JSON 作为响应,它并不期望它会失败。也许有人可以解释一下?

编辑 1: 我正在使用自定义 webhook,使用 Fn Project 开源函数作为服务。演示如何使用该项目是我在这里的目的,因此我不想使用内联编辑器或 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'}
});

【问题讨论】:

  • 您能否更新您的问题以显示其余代码?由于多种原因,Webhook 可能无法响应。您是否在内联代码编辑器中运行它?能否包含执行中的错误日志?
  • 更新了其余代码。

标签: dialogflow-es actions-on-google


【解决方案1】:

虽然您正在创建 app 对象,该对象执行 Intent 处理程序处理等,并通过 app.intent() 向其注册处理程序,但您没有对 "export" 做任何事情,所以 app 的触发 webhook 时调用方法。调用时,它会获取请求的正文,并将格式化 JSON 以用于响应。

例如,如果您使用 Firebase 函数,则可以连接 app 以通过函数处理类似

exports.fulfillment = functions.https.onRequest(app);

但你不是。您使用的是不同的框架。

该库附带了许多开箱即用的 frameworks,但 Fn 项目不是其中之一。理论上,您可以创建自己的 Framework object,它会为您完成此操作(this article 的“框架”部分对此进行了简要讨论,但没有详细说明如何操作)。

如您所料,您最简单的做法可能是自己 read the JSON request and generate the JSON response 自己而不使用 actions-on-google 库。或者您可以查看 multivocal 之类的库,看看是否更容易利用其多框架支持。

【讨论】: