2017-08-03 236 views
1

我使用api.ai在node.js客戶端庫下面進行測試,我複製了本頁給出示例的確切代碼。ApiAiApp不是構造函數

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" 
} 

如果我commnent出在線以下,一切工作正常。

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

任何人都可以幫我嗎?

+0

就在你嘗試調用new之前,看看你是否可以做一個console.log(ApiAiApp);和console.log(typeof ApiAiApp); – Prisoner

+0

同時發佈您的package.json以及您正在使用的谷歌操作版本 – Prisoner

+0

由於@Prisoner將我指向了正確的文檔,我刪除了我的答案。我會根據他的想法來了解如何進行調試以使其工作。 –

回答

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 它顯示了我們希望與谷歌操作(例如使用地圖連接動作到意圖)的方式。

我希望它有幫助。

0

該文件中有一堆東西讓我感到困惑,我不知道它是否也令人困惑的node.js。

  • 你不應該需要創建兩個ActionsSdkApp和​​的定義。我會嘗試刪除ActionsSdkApp一個,看看是否有效。

  • 您不應該致電status()json()(對於res對象,我認爲該對象不存在於此版本的文件中)。

  • 行號不匹配,但我會假設有其他的事情可能會混淆這個問題。

+0

感謝您的回覆,我剛剛編輯了我的問題。我希望現在不是很混亂。 但是,我仍然得到相同的錯誤。 – Sukh