DialogFlow with Telegram:如何接收图像并将其与对话一起保存
DialogFlow with Telegram: How to receive an image and save it along with the conversation
我正在使用 DialogFlow 为 Telegram 开发一个聊天机器人,但我无法完成两个主题,也找不到它们的文档。
对话的流程是用户回答一些封闭的问题并发送图像。
我如何获得这张图片?
并与其他答案一起拯救她?
答案需要保存为 form/survey 而不是对话历史记录。
我的聊天机器人也有类似的设置。我将答案存储在 Firebase 数据库中。
为了与 Firestore 数据库交互,您应该实施 Fulfillment
您可以查看有关如何为 DialogFlow 实施 Firebase 的指南here
在这里您可以看到我的代码示例。一般来说,在设置与 Firebase 数据库的连接后,您只想使用 intentMap.set
.
将您的意图映射到您的函数
正如您所说,您正在使用封闭式答案,您可以设置 intets 来处理响应,每个 "final" 意图将触发一个不同的函数,该函数将向数据库写入不同的消息。
要将响应写入 Firesbase 数据库,您只需要使用信息和所需结构实施 admin.database().ref().push().set({})
。
在我的示例中,我还存储了来自聊天有效负载的对话 ID 和日期。
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
//const DialogflowApp = require('actions-on-google').DialogflowApp;
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
admin.initializeApp({
credential : admin.credential.applicationDefault(),
databaseURL: 'ws://YOURDATABASE.firebaseio.com/'
});
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));
var userId;
let conv = agent.conv();
const ROOTREF = admin.database().ref();
const actions = new Map();
let intentMap = new Map();
intentMap.set('Default Fallback Intent', fallback);
intentMap.set('NoTunel', handleWriteToDbNoTunnel(agent));
agent.handleRequest(intentMap);
function assignConv(agent){
userId = agent.parameters.UserId;
return admin.database().ref('Users/'+ userId).set({
Apellido:"XXXX",
Nombre:"XXXX",
chatId:333,
});}
function fallback(agent) {
agent.add(`I didn't understand`);
agent.add(`I'm sorry, can you try again?`);
}
var token = "YOUR TOKEN HERE";
var url = "https://api.telegram.org/bot"+ token;
function handleWriteToDbNoTunnel(agent){
const Dia = new Date();
if(matricula !== "")
return admin.database().ref('Limpieza/').push().set({
chatId: request.body.queryResult.outputContexts[3].parameters.telegram_chat_id+'"',
Field1: answer1,
Field2: answer2,
day: day.getTime()
});
}
});
此外,如果您想存储带有用户响应的图像,您可以从 telegram api 中实现 getfile
方法并存储图像代码或图像本身
我正在使用 DialogFlow 为 Telegram 开发一个聊天机器人,但我无法完成两个主题,也找不到它们的文档。
对话的流程是用户回答一些封闭的问题并发送图像。 我如何获得这张图片? 并与其他答案一起拯救她?
答案需要保存为 form/survey 而不是对话历史记录。
我的聊天机器人也有类似的设置。我将答案存储在 Firebase 数据库中。
为了与 Firestore 数据库交互,您应该实施 Fulfillment
您可以查看有关如何为 DialogFlow 实施 Firebase 的指南here
在这里您可以看到我的代码示例。一般来说,在设置与 Firebase 数据库的连接后,您只想使用 intentMap.set
.
正如您所说,您正在使用封闭式答案,您可以设置 intets 来处理响应,每个 "final" 意图将触发一个不同的函数,该函数将向数据库写入不同的消息。
要将响应写入 Firesbase 数据库,您只需要使用信息和所需结构实施 admin.database().ref().push().set({})
。
在我的示例中,我还存储了来自聊天有效负载的对话 ID 和日期。
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
//const DialogflowApp = require('actions-on-google').DialogflowApp;
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
admin.initializeApp({
credential : admin.credential.applicationDefault(),
databaseURL: 'ws://YOURDATABASE.firebaseio.com/'
});
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));
var userId;
let conv = agent.conv();
const ROOTREF = admin.database().ref();
const actions = new Map();
let intentMap = new Map();
intentMap.set('Default Fallback Intent', fallback);
intentMap.set('NoTunel', handleWriteToDbNoTunnel(agent));
agent.handleRequest(intentMap);
function assignConv(agent){
userId = agent.parameters.UserId;
return admin.database().ref('Users/'+ userId).set({
Apellido:"XXXX",
Nombre:"XXXX",
chatId:333,
});}
function fallback(agent) {
agent.add(`I didn't understand`);
agent.add(`I'm sorry, can you try again?`);
}
var token = "YOUR TOKEN HERE";
var url = "https://api.telegram.org/bot"+ token;
function handleWriteToDbNoTunnel(agent){
const Dia = new Date();
if(matricula !== "")
return admin.database().ref('Limpieza/').push().set({
chatId: request.body.queryResult.outputContexts[3].parameters.telegram_chat_id+'"',
Field1: answer1,
Field2: answer2,
day: day.getTime()
});
}
});
此外,如果您想存储带有用户响应的图像,您可以从 telegram api 中实现 getfile
方法并存储图像代码或图像本身