对话框流v2代码未运行

时间:2018-04-26 19:13:10

标签: webhooks actions-on-google dialogflow

我正在根据v2测试新代码。链接:Build Your First App with Dialogflow 代码:

'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', conv => {
  console.log("-----welcome intent-----");
  conv.ask('Welcome');
});

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

但是当我模拟它时,它会显示:

MalformedResponse
'final_response' must be set.

我该怎么办? 虽然已启用Fulfillment,但请求未达到该功能。

---------修订------------

现在,当我尝试将该功能部署到firebase时,我收到此错误:

Function load error: Code in file index.js can't be loaded
Is there a syntax error in your code?
Detailed stack trace: TypeError: dialogflow is not a funct
    at Object.<anonymous> (/user_code/index.js:6:13)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at getUserFunction (/var/tmp/worker/worker.js:388:24)
    at loadUserCode (/var/tmp/worker/worker.js:444:18)

我无法理解???

这是我的 package.json:

{
  "name": "some name",
  "description": "some desc",
  "version": "0.0.1",
  "author": "Google Inc.",
  "engines": {
    "node": "~4.2"
  },
  "dependencies": {
    "actions-on-google": "^1.0.0",
    "firebase-admin": "^5.11.0",
    "firebase-functions": "^1.0.0",
    "dialogflow": "^0.3.0",
    "request": "^2.85.0",
    "uuid": "^3.0.1"
  }
}

------更新2 ------ 我已将节点更改为:

"engines": {
        "node": "~6.0"

还是同样的问题

-----更新3 --------

部署完成,但是当请求转到它时,它会显示:

enter image description here

5 个答案:

答案 0 :(得分:1)

确认您正在使用的google动作库版本。您的"actions-on-google": "^1.0.0"依赖项指定库的1.x版本,但其余的用法是通过2.0.0语法。该错误表明没有dialogflow对象,该库也在库的版本2中提供,但不是版本1.

要使用2.0.0及更高版本,您需要将package.json中的行更改为

"actions-on-google": "^2.0.0"

然后运行

npm update

答案 1 :(得分:0)

确保在Dialogflow信息中心中启用了fulfillment,并且v2的API 已开启?同时检查您在履行中使用的意图名称是否与Dialogflow中的名称相匹配。

您的代码对我来说很好。它可能是一个配置问题。

答案 2 :(得分:0)

检查您正在使用的节点版本。如果您使用 private onRequestA = withClient(client => client.getResponseA()); ,则需要至少使用节点6时,package.json建议您使用节点4。

由于Firebase云功能也是节点6,因此您也应该切换到本地开发。 (对于LTS,节点本身的版本为8,并且正在使用版本9,因此您当然应该考虑更新。)

答案 3 :(得分:0)

尝试将conv.ask('Welcome')更改为conv.close('Welcome');

还会删除console.log("-----welcome intent-----");行仅用于测试

答案 4 :(得分:0)

更改了package.json:

"engines": {
    "node": "~6.11.1"
  },
  "dependencies": {
    "actions-on-google": "^2.0.0",
    "firebase-admin": "^5.11.0",
    "firebase-functions": "^1.0.0",
    "dialogflow": "^0.3.0",
    "request": "^2.85.0",
    "uuid": "^3.0.1"
  }

这有效