Javascript 如何将my local的webhook连接到dialogflow?
我有一个关于webhook connect的问题。Javascript 如何将my local的webhook连接到dialogflow?,javascript,node.js,firebase,dialogflow-es,chatbot,Javascript,Node.js,Firebase,Dialogflow Es,Chatbot,我有一个关于webhook connect的问题。 我通常使用dialogflow的内联编辑器进行编辑。 但现在我想在本地编辑。 所以我做了一些设置,看了两个例子。 [1] 我制作了一个文件, (1) 用户/a/firebase.js (2) Users/a/functions/index.js(带包模块) (3) ngrok提供的webhook服务器。 (4) 我已将此链接“”附加到dialogflow webhook上 [2] firebase.js具有 {} [3] index.js
我通常使用dialogflow的内联编辑器进行编辑。
但现在我想在本地编辑。
所以我做了一些设置,看了两个例子。
[1] 我制作了一个文件,
(1) 用户/a/firebase.js
(2) Users/a/functions/index.js(带包模块)
(3) ngrok提供的webhook服务器。
(4) 我已将此链接“”附加到dialogflow webhook上
[2] firebase.js具有
{}
[3] index.js具有
'use strict';
const express = require('express');
const bodyParser = require('body-parser');
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
const request = require('request');
const { dialogflow } = require('actions-on-google');
const app = dialogflow();
const admin = require('firebase-admin');
const server = express();
//admin.initializeApp();
process.env.DEBUG = 'dialogflow:debug';
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
function hello(agent) {
agent.add(`Welcome to my agent!`);
}
function fallback(agent) {
agent.add(`I didn't understand`);
agent.add(`I'm sorry, can you try again?`);
}
let intentMap = new Map();
intentMap.set('hello', hello);
intentMap.set('Default Fallback Intent', fallback);
agent.handleRequest(intentMap);
});
var port = process.env.PORT || 3000;
// create serve and configure it.
server.get('/getName',function (req,res){
res.send('Swarup Bam');
});
server.listen(port, function () {
console.log("Server is up and running...");
});
服务器通过
ngrok端口3000
本地启动
我已经编写了服务器。请在我的代码中收听。
但我的代码中似乎没有webhook帖子。
总之,当我在dialogflow中写“hello”时,ngrok给出了一个404Not found
错误。看起来有几个东西混在一起了
您的node.js程序正在使用两种不同的方法来侦听端口,一种是设计用于使用的方法,另一种是使用的方法,但您尚未表示您正在使用这两种方法运行程序。让我们看看每一件正在(或应该)运行的事情
ngrok
ngrok
是一个端口转发器,因此它假设有另一个正在运行的程序正在侦听您指定的端口。它不会在该端口本身上启动任何侦听操作
Firebase的云功能
以exports.dialogflowFirebaseFulfillment
开头的部分用于Firebase的云函数。谷歌的大多数例子都使用它,因为它很容易为初学者设置和使用,在生产中可以很好地扩展,并且一旦你部署了你的行动,就可以使用谷歌每月的云积分。此块中的所有代码都是webhook处理程序
为Firebase的云函数编写的代码通常在Google的服务器上运行,但为了进行测试,您可以使用该命令在本地运行它
express库
您已经编写了开始侦听端口3000和特定路径的代码(/getName
),但返回的代码没有调用以前的任何webhook代码
req
和res
参数与云函数部分中的request
和response
参数匹配(云函数仅在引擎盖下使用express),因此如果需要,您可以将意图处理代码移动到此express处理程序中
使用express库编写的代码使用节点
命令启动。在发布代码时,您需要一个公共服务器-不要试图通过ngrok运行生产级服务器到您的家庭网络连接。您能否更新您的问题,以澄清“没有webhook输出”的含义。你在尝试什么?当你尝试时,你看到了什么?您是如何在本地启动服务器的?请更新问题-不要试图在评论中给出详尽的答案,只需在更新问题后回复即可。评论最好是要求澄清,这样我们可以创建一个问题,为您和其他可能有类似问题的人解释您的情况。我编辑了我的问题并删除了评论。非常感谢您提供如何使用stackoverflow的建议:)非常感谢你,囚犯。我发现我必须学习更多关于服务器的基本知识。我只是复制人。希望我提供的链接能让你开始使用两种不同的服务器技术。(我建议Firebase使用云功能——它们易于使用。)