【发布时间】:2016-08-08 22:53:50
【问题描述】:
我正在创建一个已上传图片的 Facebook 机器人,它会以图片作为响应。我可以通过附件发送图片并将其从服务器上删除,还是必须发送图片的 URL 并将图片保留在服务器上?
【问题讨论】:
我正在创建一个已上传图片的 Facebook 机器人,它会以图片作为响应。我可以通过附件发送图片并将其从服务器上删除,还是必须发送图片的 URL 并将图片保留在服务器上?
【问题讨论】:
您可以通过 Facebook Messenger API 发送附件,方法是使用 多部分请求 直接发布(不使用 payload.url 选项)。这里是 PHP & Guzzle (尽管任何好的 HTTP 请求包都应该这样做,不管脚本语言如何):
use GuzzleHttp\Client;
$client = new Client();
$graphRequest = $client->request('POST', 'https://graph.facebook.com/v5.0/me/messages', [
'query' => [
'access_token' => $facebookInfo['pageAccessToken']
],
'multipart' => [
[
'name' => 'messaging_type',
'contents' => 'RESPONSE',
],
[
'name' => 'recipient',
'contents' => json_encode(['id' => $yourRecipientPSID]),
],
[
'name' => 'message',
'contents' => json_encode(['attachment' => ['type' => 'file', 'payload' => []]]),
],
[
'name' => 'filedata',
'contents' => fopen($yourFilePath, 'r'),
'filename' => $yourFileName,
],
],
]);
请注意,attachments.payload 参数已设置,但 null。如果未设置 payload,Graph API 将返回 400 响应。
【讨论】:
您可以使用他们的上传 API 将您的附件上传到他们的服务器。
curl -X POST -H "Content-Type: application/json" -d '{
"message":{
"attachment":{
"type":"image",
"payload":{
"url":"http://www.messenger-rocks.com/image.jpg",
"is_reusable":true,
}
}
}
}' "https://graph.facebook.com/v2.6/me/message_attachments?access_token=PAGE_ACCESS_TOKEN"
上传调用会响应一个 attachment_id,它可以用来将附件发送给用户而无需再次上传。
curl -X POST -H "Content-Type: application/json" -d '{
"recipient": {
"id": "USER_ID"
},
"message": {
"attachment": {
"type": "image",
"payload": {
"attachment_id": "1745504518999123"
}
}
}
}' "https://graph.facebook.com/me/messages?access_token=PAGE_ACCESS_TOKEN"
【讨论】:
curl \
-F recipient='{"id":"USER_ID"}' \
-F message='{"attachment":{"type":"image", "payload":{}}}' \
-F filedata=@/tmp/testpng.png \
"https://graph.facebook.com/v2.6/me/messages?access_token=PAGE_ACCESS_TOKEN"
您可以在此处找到有关如何附加 jpg 或 png 的官方示例。 https://developers.facebook.com/docs/messenger-platform/send-api-reference#examples
【讨论】:
我有同样的问题,但仍然没有找到答案。
目前,使用 Facebook bot 发送图像的唯一方法是“image_url”和您的图像 url。
【讨论】: