我正在用facebook信使API在nodejs中构建一个facebook机器人。我试图通过直接上传heroku服务器本身的图像文件(而不是通过URL),从机器人发送图像,但它不起作用。
以下是控制台的错误日志。
调用Send API 400错误请求失败{消息:'(#100)上载的文件数不正确。必须只上载一个文件。',类型:'OAuthException',代码:100,error_subcode:2018005,FBTrace_ID:'E32OGM/OFXD'}
官方的facebook文档只包含一个curl格式的示例,我不知道如何将这个curl复制成节点格式。
curl \ -F 'recipient={"id":"recipientId"}' \ -F 'message={"attachment":{"type":"image", "payload":{}}}' \ -F 'filedata=@resource/pdf_img/sample.jpg;type=image/jpeg' \ "https://graph.facebook.com/v2.6/me/messages?access_token=PAGE_ACCESS_TOKEN"
//file_loc = __dirname+"/resource/pdf_img/sample.jpg"
function sendImageMessage(recipientId, file_loc){
let fs = require('fs');
var readStream = fs.createReadStream(file_loc);
var messageData = {
recipient : {
id : recipientId
},
message : {
attachment : {
type : "image",
payload :{}
}
},
filedata:readStream
}
callSendAPI(messageData);
}
function callSendAPI(messageData) {
request({
uri: "https://graph.facebook.com/v2.6/me/messages",
qs: {access_token: process.env.PAGE_ACCESS_TOKEN},
method: "POST",
json: messageData
}, function(error, response, body) {
if (!error && response.statusCode == 200) {
var recipientId = body.recipient_id;
var messageId = body.message_id;
if (messageId) {
console.log("Successfully sent message with id %s to recipient %s",
messageId, recipientId);
} else {
console.log("Successfully called Send API for recipient %s",
recipientId);
}
} else {
console.error("Failed calling Send API", response.statusCode, response.statusMessage, body.error);
}
});
}
请任何帮助修复我的节点实现或翻译卷曲到节点将不胜感激。
您可以在请求模块中使用forms/form-data/(它集成了模块'form-data')。但是所有的请求都需要严格化。因此,根据您的示例,以下内容应该完成该工作>>
function sendImageMessage(recipientId, file_loc){
let fs = require('fs');
var readStream = fs.createReadStream(file_loc);
var messageData = {
recipient : {
id : recipientId
},
message : {
attachment : {
type : "image",
payload :{}
}
},
filedata:readStream
}
callSendAPI(messageData);
}
function callSendAPI(messageData) {
var endpoint = "https://graph.facebook.com/v2.6/me/messages?access_token=" + process.env.PAGE_ACCESS_TOKEN;
var r = request.post(endpoint, function(err, httpResponse, body) {
if (err) {return console.error("upload failed >> \n", err)};
console.log("upload successfull >> \n", body); //facebook always return 'ok' message, so you need to read error in 'body.error' if any
});
var form = r.form();
form.append('recipient', JSON.stringify(messageData.recipient));
form.append('message', JSON.stringify(messageData.message));
form.append('filedata', messageData.filedata); //no need to stringify!
}
详情请参阅https://github.com/request/request#forms
为空。对如何发送图像有什么建议吗? 谢了。
我正在使用谷歌云视觉检测图像上的文本。这种方法在80%的情况下有效。另外20%,我得到了这个错误: 当我在谷歌上搜索这个问题时,似乎我需要发送特定的标题和我的请求来解决这个问题,基本上就像这里指定的:https://cloud.google.com/vision/docs/ocr#specify_the_language_optional 但是,我不知道如何用我正在使用的Node.js代码发送这些
我正在Node上开发一个web应用程序。js(express 4),用户可以通过上传到服务器来设置他们的个人资料图像。我们已经限制了文件mimetype和最大文件大小,因此用户上传的png或jpeg图像不能超过200KB。 问题是,我们希望将上传的图像分辨率(服务器端)调整为200x200,以提高页面加载并节省磁盘空间。经过一些研究,所有答案都指向使用基于ImageMagick或GraphicsM
我正在使用Mongoostic,它工作得很好,但我面临的问题是,如何从方法并将其传递给方法? 例如: 你们是怎么解决这个问题的?这是一个非常基本的搜索,用户搜索时,它会将用户重定向到另一个页面,在那里它要么显示已找到的结果,要么未找到。
我是一名服务器端开发人员,学习vanilla JS的诀窍。我需要澄清我的概念,即为我在JS中创建的图像对象发送Ajax POST请求——这个问题与此有关。 想象一下一个网络应用,用户上传照片供他人查看。在上传每个图像时,我使用vanilla JS确认图像的mime类型(通过解释幻数),然后调整图像大小以达到优化目的。 调整大小后,我会: 返回的图像对象必须通过Ajax请求发送到后端。比如: 然而,
我已经在一个项目上工作了很长一段时间,我一直在使用Firebase。我已经实现了应用程序所需的所有Firebase功能。但我唯一的困惑是,FCM。 基本上,我有两个应用程序链接到Firebase项目。一个是消费者应用程序,另一个是管理员应用程序。现在,我正试图通知管理员何时有新订单到达,或何时有用户想与他们聊天。我已经成功地通过消费者应用程序使用node js和Firebase功能通知用户,但我无