ApiAiApp不是构造函数

时间:2017-08-03 20:08:05

标签: dialogflow actions-on-google

我正在使用api.ai在node.js客户端库下面进行测试,我复制了本页给出的示例中的确切代码。

https://developers.google.com/actions/reference/nodejs/ApiAiApp

但每次我得到

TypeError: ApiAiApp is not a constructor
 at /app/index.js:9:15
 at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)

这是我的index.js文件:

var express = require('express');
var request = require('request');
var exps = express();

const ApiAiApp = require('actions-on-google').ApiAiApp;

exps.post('/hook', function(request, response) {

  const app = new ApiAiApp({request, response});

  response.status(200)
  response.json({
      speech: "Hello from hook",
      displayText: "Hello from hook",
      source: 'HOOK'
  })
  console.log("RESPONSE :::: \n");
  console.log(response);
});

exps.listen((process.env.PORT || 8000), function() {
    console.log("App up and running, listening.")
})

的package.json

{
  "name": "googleActionNode",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "Sukhvinder Singh",
  "dependencies": {
    "actions-on-google": "1.2.0",
    "body-parser": "^1.15.0",
    "express": "^4.13.4"
  },
  "devDependencies": {},
  "repository": {
    "type": "git",
    "url": "git+https://github.com/sukhvinder1/googleActionNode.git"
  },
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/sukhvinder1/googleActionNode/issues"
  },
  "homepage": "https://github.com/sukhvinder1/googleActionNode#readme"
}

如果我下线,一切正常。

  const app = new ApiAiApp({request: request, response: response});

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

您收到此错误的原因是您正在调用的方法不属于您最初使用的版本的google动作。

在版本1.0中,您可以通过这种方式调用它:

 const Assistant = require('actions-on-google').ApiAiAssistant;

后来的版本将其更改为

 const Assistant = require('actions-on-google').ApiAiApp;

以后的版本仍然允许使用较早的名称,但它已被弃用,您应该切换到新名称和最新的库版本。

不过,您可能想看看我写的这个例子:https://github.com/greenido/bitcoin-info-action/blob/master/index.js 它显示了我们希望使用google上的操作的方式(例如,使用Map将操作连接到意图)。

我希望它有所帮助。

答案 1 :(得分:0)

该文件中有很多东西让我感到困惑,我想知道它是否也会混淆node.js。

  • 您不需要为ActionsSdkAppApiAiApp创建定义。我会尝试删除ActionsSdkApp,看看是否有效。

  • 您不应该致电status()json()(对于res这个我不认为存在于该版本文件中的{ "version": "0.1.0", "command": "python", "isShellCommand": true, "showOutput": "always", "args": ["${file}"] } 个对象)。

  • 这些行号不匹配,但我会假设还有其他因素可能会使问题混淆。