Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将my local的webhook连接到dialogflow?_Javascript_Node.js_Firebase_Dialogflow Es_Chatbot - Fatal编程技术网

Javascript 如何将my local的webhook连接到dialogflow?

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

我有一个关于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具有

'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使用云功能——它们易于使用。)