【问题标题】:Use Messenger SDK to send file data使用 Messenger SDK 发送文件数据
【发布时间】:2019-10-03 11:23:02
【问题描述】:

我有一个从messenger bot 打开的webview

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

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

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

消息内容中提供的图片 URL 无效

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

【问题讨论】:

  • 你能保存文件吗?您可以使用 tmp 文件并将该文件的位置作为 filedata 参数发送。
  • @FThompson。确实。但如果没有其他方法,这是默认解决方案。因为我没有兴趣下载到用户的电脑文件:(

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


【解决方案1】:

根据 SDK 的section on sending attachments

有三种方法可以将资产附加到消息中:

  • 网址
  • 文件
  • attachment_id

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

将图片上传到 URL

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

从(临时)文件上传图片

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

【讨论】:

  • 我在 webview 中(带有 messenger SDK 的简单 html)。那里没有办法吗?
  • @HodayaShalom 根据this tutorial,Webview 可以包含 HTML、CSS 和 JavaScript。您需要在 Webview 中使用 JavaScript 将图像数据发送到将数据转换为 URL 或 tmp 文件的服务器。您可能需要将该服务器的 URL 列入白名单。有关白名单的信息,请参阅 the Webview reference
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多