Я создаю бота Facebook, в который загружены изображения, и он отвечает изображением. Могу ли я отправить изображение во вложении и удалить его с моего сервера, или мне нужно отправить URL-адрес изображения и сохранить изображение на моем сервере?
Facebook Messenger Bot, отправить вложение изображения
Ответы (4)
Вы можете использовать их Upload 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 является «image_url» с URL-адресом вашего изображения.
Вы можете отправлять вложения через API Facebook Messenger, отправляя их напрямую (без использования параметра 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
. Graph API возвращает ответ 400, если payload
не задано.