我尝试通过在Dialogflow上使用Fulfillment(使用Node.js进行编码)来开发聊天机器人,并与Firebase连接。
我将图像存储在Firestore中。 我想显示该图像,但是我是Node.js,Firebase的新手,我不知道。
我已经从Firestore中阅读了有关上载/下载URL的文档,但是我仍然不了解它的概念。
您能向我解释一下搜索方式或措词吗?
I want to show this image from storage
Error: storage is not defined.
'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
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 httpsReference = storage.refFromURL('https://firebasestorage.googleapis.com/v0/b/jenniebot2-94120.appspot.com/o/images%2FPicture5.jpg?alt=media&token=c853681b-2a72-45e4-ac7a-016f62396fa8');
function bodyMassIndex(agent) {
let weight = 80;
let height = 170/100;
let bmi = (weight / (height * height)).toFixed(2);
let result = "none";
if (bmi < 18.5) {
result = "xs";
} else if (bmi >= 18.5 && bmi <= 22.9) {
result = "s";
} else if (bmi >= 23 && bmi <= 24.9) {
result = "m";
} else if (bmi >= 25 && bmi <= 29.9) {
result = "l";
} else if (bmi > 30) {
result = "xl";
}
return admin.firestore().collection('bmi').doc(result).get()
.then(doc => {agent.add(doc.data().description);});
}
function welcome(agent) {
agent.add(`Welcome to my agent!`);
}
let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
intentMap.set('Bmi', bodyMassIndex);
agent.handleRequest(intentMap);
});
答案 0 :(得分:0)
您的代码存在很多逻辑和语法问题。
行
var httpsReference = storage.refFromURL('https://firebasestorage.googleapis.com/v0/b/jenniebot2-94120.appspot.com/o/images%2FPicture5.jpg?alt=media&token=c853681b-2a72-45e4-ac7a-016f62396fa8');
没有任何意义。在此之前,您无需定义storage
,以后也不会在任何地方使用httpsReference
。
给出URL,看起来该文件存储在Firebase Cloud Storage中,这是存储和访问文件的好地方。这与Firebase Cloud Firestore数据库非常不同,后者擅长存储半结构化数据文档。
如果这是真的,那么您将使用类似的东西创建storage
var storage = admin.storage();
表示要从firebase管理员获取Storage服务对象。
但是,如果这是真的-那么现在尚不清楚您打算使用httpsReference
对象做什么。
如果您要做的只是作为Dialogflow响应的一部分在该URL上显示图像,则无需通过API,您只需通过URL即可访问它。如果您立即在浏览器中加载该URL,则会看到该图像。
尚不清楚是要将其作为卡中的图像还是响应中的独立图像,但是无论哪种方式,您都只需要使用URL。也许像
var card = new Card();
card.addTitle("BMI Chart");
card.addImage("https://firebasestorage.googleapis.com/v0/b/jenniebot2-94120.appspot.com/o/images%2FPicture5.jpg?alt=media&token=c853681b-2a72-45e4-ac7a-016f62396fa8");
agent.add(card);
或
const {Image} = require('dialogflow-fulfillment');
var image = new Image();
image.setImage("https://firebasestorage.googleapis.com/v0/b/jenniebot2-94120.appspot.com/o/images%2FPicture5.jpg?alt=media&token=c853681b-2a72-45e4-ac7a-016f62396fa8");
agent.add(image);
答案 1 :(得分:0)
这个问题很容易。我只是要比应该做的难。只需使用Firebase存储形式的URL,并将其放在LINE API(.JSON)中即可。然后使用dialogflow进行响应。
{
"type": "image",
"originalContentUrl": "/URL",
"previewImageUrl": "/URL",
"animated": false
}