使用 Dialogflow fulfillment 对 API 的简单 HTTP get 请求
Simple HTTP get request to API using Dialogflow fulfillment
我想将我的 dialogflow 聊天机器人连接到 this API. so that, whenever I write "Where does Quran talk about Allah", it goes to this api and make HTTP get request to https://islam360api.herokuapp.com/Allah 和 returns 响应。
我已经在 Intent 中打开了 "Webhook",并在 dialogflow fulfillment url 中添加了 api link。但是如何教 dialogflow 在每次 api 调用 https://islam360api.herokuapp.com 之后连接单词 "Allah" 或用户可能会说的任何其他内容,并使 HTTP get 请求和 returns 响应?我需要使用操作吗?做什么的?或者我是否需要使用内联编辑器,而不是 "Webhook" under fulfillment?
编辑
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
实际上你需要自己编写服务器并在 dialogflow fulfillment 中提供 link,我建议你使用 firebase 函数作为你的服务器,因为它很容易理解。
您还需要使用 sys.any 实体,因为您的用户可能会说任何话,例如用户可能还会说 "where does Quran talk about {sys.any}"
Any 表示任何文本字符串,我建议您在模板模式而不是示例模式下进行意图训练阶段。 (https://dialogflow.com/docs/intents/training-phrases)
作为参考观看这些视频,我正在教授如何使用 firebase 函数作为 fulfillment webhook 以及如何使用数据库来存储客户的酒店预订,而不是使用数据库,您需要发出 https 请求(最好使用 npm请求模块 https://www.npmjs.com/package/request)
注意:给定的视频 link 在已过时的 dialogflow v1 上,但它仍然传达了基本思想,因此仍然有帮助
注意:firebase 函数不允许您在自由模式下发出 http 请求,内联编辑器也是 firebase 函数,
其他选项是带有 heroku 组合的快速服务器
注意:这些视频使用 json 对 dialogflow 的请求响应,最终我建议您为此目的使用 dialogflow fulfillment 库 (https://github.com/dialogflow/dialogflow-fulfillment-nodejs)
我想将我的 dialogflow 聊天机器人连接到 this API. so that, whenever I write "Where does Quran talk about Allah", it goes to this api and make HTTP get request to https://islam360api.herokuapp.com/Allah 和 returns 响应。
我已经在 Intent 中打开了 "Webhook",并在 dialogflow fulfillment url 中添加了 api link。但是如何教 dialogflow 在每次 api 调用 https://islam360api.herokuapp.com 之后连接单词 "Allah" 或用户可能会说的任何其他内容,并使 HTTP get 请求和 returns 响应?我需要使用操作吗?做什么的?或者我是否需要使用内联编辑器,而不是 "Webhook" under fulfillment?
编辑
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
实际上你需要自己编写服务器并在 dialogflow fulfillment 中提供 link,我建议你使用 firebase 函数作为你的服务器,因为它很容易理解。
您还需要使用 sys.any 实体,因为您的用户可能会说任何话,例如用户可能还会说 "where does Quran talk about {sys.any}" Any 表示任何文本字符串,我建议您在模板模式而不是示例模式下进行意图训练阶段。 (https://dialogflow.com/docs/intents/training-phrases)
作为参考观看这些视频,我正在教授如何使用 firebase 函数作为 fulfillment webhook 以及如何使用数据库来存储客户的酒店预订,而不是使用数据库,您需要发出 https 请求(最好使用 npm请求模块 https://www.npmjs.com/package/request)
注意:给定的视频 link 在已过时的 dialogflow v1 上,但它仍然传达了基本思想,因此仍然有帮助 注意:firebase 函数不允许您在自由模式下发出 http 请求,内联编辑器也是 firebase 函数, 其他选项是带有 heroku 组合的快速服务器 注意:这些视频使用 json 对 dialogflow 的请求响应,最终我建议您为此目的使用 dialogflow fulfillment 库 (https://github.com/dialogflow/dialogflow-fulfillment-nodejs)