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 方法并存储图像代码或图像本身