Meta Messenger 发送消息 API 设置文件名

问题描述 投票:0回答:1

我正在使用 Meta Messenger API 以编程方式向 Messenger 发送消息(https://developers.facebook.com/docs/messenger-platform/reference/send-api/https://developers.facebook。 com/docs/messenger-platform/reference/attachment-upload-api)并且很好。我可以发送带有或不带有附件的消息。

我的问题是针对带有附件的邮件。我能够成功使用 API,但无法设置附件的文件名(如果附件的类型为

file
)。

如何设置附件的文件名,以便收件人(Messenger 用户)可以在消息线程中看到它?现在看来 API 会自动从附件的 URL 中检索它。我使用的是 Azure Blob 存储,文件存储为 GUID,真实文件名存储在

Content-Despotision
文件名字段中。

以下是调用示例供参考。

https://graph.facebook.com/v16.0/{fb.PageId}/messages?recipient={{'id':'{psid}'}}&messaging_type=RESPONSE&message={{'attachment':{{'type':'file','payload':{{'url':'{HttpUtility.UrlEncode(blobClient.Uri.ToString() + token)}','is_reusable':true" + "}}}" + $"&access_token={fb.PageToken}";

facebook facebook-graph-api facebook-messenger-bot
1个回答
0
投票

根据我的经验,payload url 的最后一部分用作文件名。显然,facebook API 需要文件系统形式的 url(就像 Apache httpd 所做的那样),例如:

https://example.com/files/folder/file.png

此处,

file.png
将用作附件名称。如果您的下载 API 的名称不同,例如
.../resourceId/download
,您可以调整路由以接受
.../resourceId/download/{optionalFileName}
并像以前一样处理请求。 Facebook API 将捕获最后一部分并用作文件名。

Spring 控制器中的示例:

@GetMapping(value = {
        "/resources/{id}/download",
        "/resources/{id}/download/{fileNameForFbApi}"
}, produces = "application/octet-stream")
public ResponseEntity<StreamingResponseBody> downloadFile(
        @PathVariable long id,
        @PathVariable(required = false) String fileNameForFbApi
) {
    // ... process the request using only id
}
© www.soinside.com 2019 - 2024. All rights reserved.