我有一个应用程序,我正在尝试创建一个Facebook机器人,它需要发送照片卡给用户。但是,要这样做,我需要获得Facebook attachment_id,因为我无法直接从网上传文件。 (https://developers.facebook.com/docs/messenger-platform/reference/attachment-upload-api/)
我的应用程序位于Firebase上,出于某种原因,当我尝试使用此URL时,它会出现此错误:
{ “错误”:{ “message”:“(#546)我们不允许您尝试附加的文件类型。请使用其他格式重试。”, “type”:“OAuthException”, “代码”:546, “error_subcode”:1545026, “fbtrace_id”:“H8qfi28cNvp” } }
我尝试的任何网址都会发生这种情况,但这里是一个测试https://memes-dev.mymemestore.com/mms-tp1pESD7hgWWLiOUziHz.jpg
所以我尝试使用Google Cloud Storage nodejs api来获取读取流并像这样发送
const stream = gcs().bucket('my bucket').file('mms-tp1pESD7hgWWLiOUziHz.jpg').createReadStream();
const message = new formdata();
message.append('message', '{"attachment":{"type":"image", "payload":{"is_reusable":true}}}');
message.append('filedata', stream);
fetch('https://graph.facebook.com/v2.6/me/message_attachments?access_token=<PAGE ACCESS TOKEN>',
{
method: 'POST',
headers: message.getHeaders(),
body: message
})
.then(res => {
console.log(res);
return res.json();
})
.then(json => {
console.log(json);
});
但是这给了我以下错误
(#100)上传的文件数不正确。必须上传一个文件。
有谁知道发生了什么事?
由于
答案 0 :(得分:1)
有一件事我忘了提到这一切都必须在无服务器上完成。但我通过使用tmpdir = path.join(os.tmpdir(), filename)
然后fs.createReadStream(tmpdir)
将图像下载到tmpdir来解决这个问题,这是有效的。