我试图让愚蠢的名字制作者使用我服务器上托管的webhook工作 . 使用PTs-V2我能够看到Dialogflow的JSON帖子 .
... { “颜色”: “红”, “数字”:6} ...
使用Hurl.it我能够成功将帖子发送到我的服务器并获得正确的响应 .
{“演讲”:“好吧,你这个愚蠢的名字是红色的!我希望你喜欢它 . 下次见 . ”......
但是,当我尝试将自己的服务器用于Dialogflow时,它不起作用 . 不确定是否有我遗漏的东西 .
Webhook在服务器上
'use strict';
const https = require('https');
const fs = require('fs');
var privatekey = fs.readFileSync('...');
var certificate = fs.readFileSync('...');
var credentials = {key: privatekey, cert: certificate};
process.env.DEBUG = 'actions-on-google:*';
var DialogflowApp = require('actions-on-google').DialogflowApp;
const express = require('express');
const bodyParser = require('body-parser');
let app = express();
app.use(bodyParser.json({type: 'application/json'}));
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(443);
const NAME_ACTION = 'make_name';
const COLOR_ARGUMENT = 'color';
const NUMBER_ARGUMENT = 'number';
app.get('/', function(req, resp) {
resp.send("Hello!");
console.log('app.get');
});
app.post('/', function (request, response){
console.log('app.post');
const app = new DialogflowApp({request: request, response: response});
console.log('Request headers: ' + JSON.stringify(request.headers));
console.log('Request body: ' + JSON.stringify(request.body));
// Make a silly name
function makeName (app) {
let number = app.getArgument(NUMBER_ARGUMENT);
let color = app.getArgument(COLOR_ARGUMENT);
app.tell('Alright, your silly name is ' +
color + ' ' + number +
'! I hope you like it. See you next time.');
}
let actionMap = new Map();
actionMap.set(NAME_ACTION, makeName);
app.handleRequest(actionMap);
});
谢谢你的帮助 .
编辑:当我在端口上运行网站的Apache服务器时,来自Dialogflow的响应
"status":{"code":206,"errorType":"partial_content",“ errorDetails ": " Webhook调用失败 . 错误:无法解析webhook JSON响应:java.lang.IllegalStateException:预期BEGIN_OBJECT但是在第1行第1行路径为$ .", " webhookTimedOut”:假},
JS服务器在端口而不是Apache上运行时的响应
"status":{"code":206,"errorType":"partial_content",“ errorDetails ": " Webhook调用失败 . 错误:Webhook响应为空.", " webhookTimedOut”:false},
Dialogflow Setup(截图)
我的JS服务器永远不会收到帖子 .