在谷歌api.ai行动不发送身体在POST请求与nodejs和expression

我试图在我的电脑上运行api.ai中的 action-on-google和sillyNameMaker例子。 我用express和一个ngrok隧道build立了一个nodejs服务器。 当我尝试向api.ai上的我的代理发送请求时,我的服务器收到POST请求,但主体看起来是空的。 有什么我没有正确设置?

这是我的index.js文件:

'use strict'; var express = require('express') var app = express() const ApiAiAssistant = require('actions-on-google').ApiAiAssistant; function sillyNameMaker(req, res) { const assistant = new ApiAiAssistant({request: req, response: res}); // Create functions to handle requests here const WELCOME_INTENT = 'input.welcome'; // the action name from the API.AI intent const NUMBER_INTENT = 'input.number'; // the action name from the API.AI intent const NUMBER_ARGUMENT = 'input.mynum'; // the action name from the API.AI intent function welcomeIntent (assistant) { assistant.ask('Welcome to action snippets! Say a number.'); } function numberIntent (assistant) { let number = assistant.getArgument(NUMBER_ARGUMENT); assistant.tell('You said ' + number); } let actionMap = new Map(); actionMap.set(WELCOME_INTENT, welcomeIntent); actionMap.set(NUMBER_INTENT, numberIntent); assistant.handleRequest(actionMap); function responseHandler (assistant) { console.log("okok") // intent contains the name of the intent you defined in the Actions area of API.AI let intent = assistant.getIntent(); switch (intent) { case WELCOME_INTENT: assistant.ask('Welcome! Say a number.'); break; case NUMBER_INTENT: let number = assistant.getArgument(NUMBER_ARGUMENT); assistant.tell('You said ' + number); break; } } // you can add the function name instead of an action map assistant.handleRequest(responseHandler); } app.post('/google', function (req, res) { console.log(req.body); sillyNameMaker(req, res); }) app.get('/', function (req, res) { res.send("Server is up and running.") }) app.listen(3000, function () { console.log('Example app listening on port 3000!') }) 

和我得到的错误:

 TypeError: Cannot read property 'originalRequest' of undefined at new ApiAiAssistant (/Users/clementjoudet/Desktop/Dev/google-home/node_modules/actions-on-google/api-ai-assistant.js:67:19) at sillyNameMaker (/Users/clementjoudet/Desktop/Dev/google-home/main.js:8:21) 

我试图打印req.body,但它是未定义的…在此先感谢您的帮助。

你和google-on-google包都在假设你如何使用Express。 缺省情况下,Express不会填充req.body属性(请参阅req.body的参考 )。 相反,它依赖于附加的中间件,比如body-parser 。

你应该可以添加body parser到你的项目中

 npm install body-parser 

然后使用它来将请求正文parsing为JSON(API.AI发送和在Google上使用操作),并在定义app后将其附加到Express:

 var bodyParser = require('body-parser'); app.use(bodyParser.json());