Как подключить webhook моего локального к диалогу? - PullRequest
0 голосов
/ 16 декабря 2018

У меня вопрос по поводу подключения через веб-крючок.
Я обычно редактировал с помощью встроенного редактора dialogflow.
Но теперь я хочу редактировать на своем локальном компьютере.
Поэтому я выполнил некоторые настройки, просматривая два примера.

https://chatbotsmagazine.com/creating-nodejs-webhook-for-dialogflow-2b050f76cd75

https://github.com/dialogflow/fulfillment-temperature-converter-nodejs

[1] Я сделал файл,
(1) Users / a / firebase.js
(2) Users / a / functions/index.js (с модулем пакета)
(3) сервер webhook от ngrok.
(4) Я прикрепил эту ссылку 'https://ngrok~~/webhook' к диалоговому окну webflowok

[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 port 3000.

Я написал server.listen в своем коде.
Но, похоже, в моем коде нет поста webhook.

Итак, в заключение, когдаЯ пишу 'привет' в моем диалоговом потоке, ngrok выдает ошибку 404 not found.

1 Ответ

0 голосов
/ 16 декабря 2018

Похоже, у вас есть несколько вещей, которые вы смешали вместе.

Ваша программа node.js использует два разных метода для прослушивания порта, способ, разработанный для использования CloudФункции для Firebase и способ использования экспресс-библиотеки , но вы не указали, что запускаете программу, используя либо.Давайте рассмотрим каждую вещь, которая работает (или должна работать)

ngrok

ngrok - это перенаправитель портов, поэтому предполагается, что существует другая программа, котораяработает, слушая указанный вами порт.Он не начинает ничего прослушивать сам этот порт.

Облачные функции для Firebase

Часть, начинающаяся с exports.dialogflowFirebaseFulfillment, предназначена для облачных функций для Firebase.Большинство примеров от Google используют это, потому что его легко установить и использовать для начинающих, он хорошо масштабируется в процессе производства и может использовать ежемесячный облачный кредит от Google после того, как вы развернули свое действие.Весь код внутри этого блока - ваш обработчик webhook.

Код, написанный для облачных функций для Firebase, обычно запускается на серверах Google, но для тестирования вы можете использовать команду firebase serve --only functions для его запуска.локально.

экспресс-библиотека

Вы написали код, который начинает прослушивать порт 3000 и для определенного пути (/getName), но что вы возвращаететам не вызывается какой-либо код, который вы использовали ранее.

Параметры req и res соответствуют параметрам request и response в разделе Облачные функции (облачные функции просто используют экспресс под капотом), поэтому вы можете переместить код обработки намерений весли хотите, внутри этого экспресс-обработчика.

Код, написанный с использованием экспресс-библиотеки, запускается с помощью команды node.Вам понадобится общедоступный сервер, когда вы собираетесь выпустить свой код - не пытайтесь запустить сервер производственного уровня через ngrok для подключения к домашней сети.

...