gpt4 book ai didi

node.js - actions-on-google api.ai 不会使用 Nodejs 和 Express 在 POST 请求中发送正文

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:34 25 4
gpt4 key购买 nike

我正在尝试运行 sillyNameMaker example来 self 电脑上的 actions-on-google 和 api.ai。我设置了一个带有express的nodejs服务器和一个ngrok隧道。当我尝试在 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 但它未定义...提前感谢您的帮助。

最佳答案

您和 actions-on-google 软件包都在对您如何使用 Express 做出假设。默认情况下,Express 填充 req.body 属性(请参阅 reference for req.body )。相反,它依赖于额外的中间件,例如 body-parser这样做。

您应该能够将正文解析器添加到您的项目中

npm install body-parser

然后使用它将请求正文解析为 JSON(API.AI 发送并 actions-on-google 使用),并在定义 app 后立即将其附加到 Express:


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

关于node.js - actions-on-google api.ai 不会使用 Nodejs 和 Express 在 POST 请求中发送正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43543965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com