Простой HTTP-запрос на получение API с использованием Dialogflow - PullRequest
4 голосов
/ 16 марта 2019

Я хочу подключить своего диалогового окна chatflow к этому API. так что всякий раз, когда я пишу «Где Коран говорит об Аллахе», он переходит к этому API и отправляет HTTP-запрос get на https://islam360api.herokuapp.com/Allah и возвращает ответ.

Я включил "Webhook" в намерении и добавил ссылку api в качестве URL-адреса выполнения диалогового потока. Но как научить диалоговому потоку объединять слово «Аллах» после или что-либо еще, что пользователь может сказать при каждом вызове API в https://islam360api.herokuapp.com и сделать HTTP-запрос на получение и возврат ответа? Нужно ли использовать действие? Зачем? или мне нужно использовать встроенный редактор вместо "Webhook" при исполнении?

EDIT

app.js

const sqlite3 = require('sqlite3').verbose();

const express = require("express");

// Notice that the execution mode is set to verbose to produce long stack traces.

var app = express();

var ayats=[];


app.get("/:find",function(request, response)

{

    let db = new sqlite3.Database("./file.db",(err) => {

        if (err){

        console.log("Not connected to sqlite")

        }

        else{

            console.log("Connected to sqlite")

        }

    });

    // The sqlite3.Database() returns a Database object and opens the database connection automatically.

    

    let sql = `SELECT SuratNameEng, AyatNo, English FROM surah`;

 

db.all(sql, [], (err, rows) => {

  if (err) {

    throw err;

  }

  rows.forEach((row) => {

    ayats.push(JSON.stringify({Translation: row.English,SuratName: row.SuratNameEng,AyatNo: row.AyatNo}));

  });

  console.log(ayats);

  ayats.forEach(function(element) {

    if (element.toLowerCase().includes(request.params.find.toLowerCase())===true)

    {

      element=JSON.parse(element)

      response.write(JSON.stringify({speech: "In"+ element.SuratName+", Ayat Number: "+element.AyatNo+", Quran says: "+ element.Translation, displayText: "In"+ element.SuratName+", Ayat Number: "+element.AyatNo+", Quran says: "+ element.Translation}))

    }

  });

  response.send();

});



empty();

function empty() {

    ayats.length = 0;

}


db.close((err) => {

    if (err) {

      return console.error(err.message);

    }

    console.log('Close the database connection.');

  });

    

})

 

// It is a good practice to close a database connection when you are done with it. 

var port = process.env.PORT || 3000;

app.listen(port,()=>console.log("Active"));

Github хранилище: https://github.com/ukashasohail/i360-api

1 Ответ

2 голосов
/ 16 марта 2019

На самом деле вам нужно написать свой собственный сервер и дать ссылку на выполнение диалогового потока, я рекомендую вам использовать функции firebase в качестве сервера, так как это легко понять.

Вам также необходимо использовать сущность sys.any, поскольку ваш пользователь может сказать что-нибудь, например, пользователь может сказать: «где Коран говорит о {sys.any}» Любое означает любую текстовую строку, я бы порекомендовал вам провести эти обучающие этапы намерений в режиме шаблона вместо режима примера. (https://dialogflow.com/docs/intents/training-phrases)

https://youtu.be/XfTQ3Z_-6Sk

https://youtu.be/QqMdzrvfNBo

https://youtu.be/eLocziyi-Qw

В качестве справки. Посмотрите эти видео, я учу, как использовать функции Firebase в качестве веб-крюка для выполнения и как использовать базу данных для хранения бронирования отелей ваших клиентов, вместо использования базы данных вам нужно сделать запрос https (в идеале, используя модуль запроса npm). https://www.npmjs.com/package/request)

Примечание: данная ссылка на видео находится в диалоговом потоке v1, который устарел, но все же передает основную идею, поэтому все еще полезен Примечание: функции firebase не позволяют вам делать http-запрос в свободном режиме, встроенный редактор также является функцией firebase, другие варианты - экспресс сервер с комбинацией героку Примечание: в этих видео используется ответ на запрос json для диалогового потока. В конечном счете, я бы порекомендовал вам использовать для этого библиотеку выполнения диалогового потока (https://github.com/dialogflow/dialogflow-fulfillment-nodejs)

...