如何使用Dialogflow与Heroku通信

时间:2018-02-24 20:33:05

标签: node.js dialogflow

我目前使用Google Cloud Functions Firebase构建了一个DialogFlow聊天机器人。这一切都很好,但我想不要使用firebase,我想使用Heroku,我怎么能让DialogFlow向Heroku服务发出请求。

我已经知道我应该添加heroku的URL,并且必须是HTTPS和正确的响应格式。

我不知道的是,如何在DailogFlow和使用node.js的Heroku之间建立连接,以便我可以发送响应,例如:

sendResponse('Hello, this is responsing from Heroku')

使用firebase我必须有这样的函数:

    exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
  if (request.body.result) {
    processV1Request(request, response);
  } else if (request.body.queryResult) {
    // processV2Request(request, response);
  } else {
    console.log('Invalid Request');
    return response.status(400).end('Invalid Webhook Request (expecting v1 or v2 webhook request)');
  }
});

我不知道在外面使用Firebase时是否需要这个,在这种情况下Heroku!因为我没有使用firebase这个代码会发生什么:

functions.https.onRequest((request, response) => {

如果我没有使用firebase,我没有“functions”变量。

1 个答案:

答案 0 :(得分:2)

大多数代码可以不加改变地使用 - Firebase云函数使用node.js / express.js,而Dialogflow库假设请求和响应对象是来自带有JSON正文解析器中间件的express.js的对象

有问题的行是让Firebase Cloud Functions处理器发现并处理它的语法糖。所以你要替换那一行

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {

更像这样的东西

const express = require('express');
const app = express();
app.use( express.json() );

app.get('/', (req, res) => processWebhook( req, res ));

app.listen(3000, () => console.log('App listening on port 3000!'));

var processWebhook = function( request, response ){
  // ... the console logging and all the processing goes here