使用 Messenger SDK 发送文件数据

Use Messenger SDK to send file data

我有一个 webviewmessenger bot 打开。

webview我想发送图像数据到对话(没有URL - 来自 canvas).

的数据

我尝试使用 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 用于传输文件位置(我没有)。

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

Invalid image URL provided in message content

当我从浏览器转到 blob url 时,我看到图像 =[

根据 SDK 的 section on sending attachments:

There are three ways to attach an asset to a message:

  • URL
  • File
  • attachment_id

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

上传图片到URL

您的第一个选择是将图像上传到 URL。根据图像内容的私密程度,您可以使用 public 图像托管服务,如 imgur,或者您可以将图像上传到服务器上的 public 位置。如果您想隐藏图像,可以将图像保存在包含随机生成的哈希值的 URL 中,并在附件上传到 Messenger 后立即删除该文件。但是,您可以使用第二个选项将图像完全保密:

从(临时)文件上传图像

您的第二个选择是根据文件位置上传图片。通过将图像上传到服务器上的文件,您可以避免图像对 public 可见。为避免填满服务器 space,您可以在附件上传后手动删除该文件,或者您可以使用临时文件。事实上,SDK的example for sending a file演示了发送保存在/tmp文件夹中的临时文件。