使用Messenger SDK发送文件数据

时间:2019-05-16 08:32:37

标签: javascript file blob facebook-messenger facebook-messenger-bot

我有一个webviewmessenger bot打开。

我要从webview发送图像数据到对话中( 没有URL -来自画布的数据)

我尝试将Messenger SDK beginShareFlow 与文件数据附件一起使用:

function uploadImage(data) {
        let message = {
            "attachment": {
                "type": "image",
                "payload": {
                    "is_reusable": true
                },
                "filedata": data
            }
        };

        MessengerExtensions.beginShareFlow(function (share_response) {
                // User dismissed without error
                if (share_response.is_sent) {
                    // The user actually did share.
                    //close the webview
                    MessengerExtensions.requestCloseBrowser(function success() {
                        // webview closed
                    }, function error(err) {
                        console.log(err);
                    });
                }
            },
            function (errorCode, errorMessage) {
                // An error occurred in the process
                console.log(errorMessage);
            },
            message, "current_thread");
    }

但是我得到一个错误:

Messenger Extensions unexpected error.

希望获得帮助=]

编辑:

我发现filedata用于传输文件位置(我没有)。

所以我尝试了其他解决方案:

  • 我是从我的blob箱创建的,并试图在filedata中传递它-没有用
  • 我创建了一个blob文件(通过添加名称和日期)并尝试移动了位置-没用
  • 我从blob创建了一个 url ,并尝试将其作为url( 不是文件数据 )移动-并获得了错误:
  

邮件内容中提供的图片网址无效

当我从浏览器转到Blob网址时,我看到的图像= [

1 个答案:

答案 0 :(得分:5)

根据SDK的section on sending attachments

  

有三种方法可以将资产附加到邮件中:

     
      
  • URL
  •   
  • 文件
  •   
  • attachment_id
  •   

attachment_id是指以前上传的URL /文件附件。发送原始文件数据不是一种选择。您必须将图像上传到URL或将其保存到文件。 Blob URL不起作用,因为它们仅引用存储在本地系统内存中的数据。您需要将该数据移动到服务器上的图像或文件中。

将图像上传到URL

您的第一个选择是将图像上传到URL。根据图像内容的私密性,您可以使用诸如imgur之类的公共图像托管服务,也可以将图像上载到服务器上的公共位置。如果要隐藏图像,可以将图像保存在包含随机生成的哈希的URL上,并在附件上载到Messenger后立即删除该文件。但是,您可以使用第二个选项将图像完全保密:

从(临时)文件上传图像

您的第二个选择是根据文件位置上传图像。通过将图像上传到服务器上的文件,可以避免图像对公众可见。为避免占用服务器空间,可以在附件上传后手动删除文件,也可以使用临时文件。实际上,SDK的example for sending a file演示了如何发送保存在/tmp文件夹中的临时文件。