Google Cloud Storage将文件上传到Facebook附件API

时间:2018-05-24 00:41:47

标签: facebook google-cloud-storage

我有一个应用程序,我正在尝试创建一个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)上传的文件数不正确。必须上传一个文件。

有谁知道发生了什么事?

由于

1 个答案:

答案 0 :(得分:1)

有一件事我忘了提到这一切都必须在无服务器上完成。但我通过使用tmpdir = path.join(os.tmpdir(), filename)然后fs.createReadStream(tmpdir)将图像下载到tmpdir来解决这个问题,这是有效的。