Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js 使用Dialogflow实现对API的简单HTTP get请求_Node.js_Dialogflow Es_Dialogflow Es Fulfillment - Fatal编程技术网

Node.js 使用Dialogflow实现对API的简单HTTP get请求

Node.js 使用Dialogflow实现对API的简单HTTP get请求,node.js,dialogflow-es,dialogflow-es-fulfillment,Node.js,Dialogflow Es,Dialogflow Es Fulfillment,我想将dialogflow聊天机器人连接到API。因此,每当我写“古兰经在哪里谈论真主”时,它都会转到这个api,发出HTTP get请求并返回响应 我已经在intent中打开了“Webhook”,并将api链接添加为dialogflow url。但是,如何教dialogflow在每个api调用后连接单词“Allah”或用户可能说的任何其他话,并发出HTTP get请求并返回响应?我需要采取行动吗?为何或者我需要使用内联编辑器,而不是“履行”下的“Webhook” 编辑 app.js const

我想将dialogflow聊天机器人连接到API。因此,每当我写“古兰经在哪里谈论真主”时,它都会转到这个api,发出HTTP get请求并返回响应

我已经在intent中打开了“Webhook”,并将api链接添加为dialogflow url。但是,如何教dialogflow在每个api调用后连接单词“Allah”或用户可能说的任何其他话,并发出HTTP get请求并返回响应?我需要采取行动吗?为何或者我需要使用内联编辑器,而不是“履行”下的“Webhook”

编辑

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存储库:

实际上,您需要编写自己的服务器,并在dialogflow fulfillment中提供指向的链接,我建议您使用firebase函数作为服务器,因为它很容易理解

您还需要使用sys.any实体,因为您的用户可能会说任何话,例如用户可能会说,“古兰经在哪里谈到{sys.any}” Any是指任何文本字符串,我建议您在模板模式而不是示例模式下进行本培训。()

作为观看这些视频的参考,我正在教授如何使用firebase函数作为webhook,以及如何使用数据库来存储您的客户酒店预订,而不是使用您需要的数据库来发出https请求(理想情况下使用npm请求模块)

注意:给定的视频链接位于dialogflow v1上,它已经过时,但它仍然传达了基本思想,因此仍然很有用 注意:firebase函数不允许您在自由模式下发出http请求,内联编辑器也是firebase函数, 其他选项包括express server和heroku的组合
注意:这些视频使用的是对dialogflow的json请求-响应,最终我建议您为此使用dialogflow实现库()

您使用自定义实体。@sid8491我知道我已经这样做了。下一步?您需要在url之后附加参数值,您将使用自定义实体提取该值,您将在webhook代码中执行此操作<代码>url=”https://islam360api.herokuapp.com/“+parameter_value@sid8491所以我必须使用内联编辑器?您可以选择使用内联编辑器或自己的webhook