Facebook Messenger Bot, отправить вложение изображения

Я создаю бота Facebook, в который загружены изображения, и он отвечает изображением. Могу ли я отправить изображение во вложении и удалить его с моего сервера, или мне нужно отправить URL-адрес изображения и сохранить изображение на моем сервере?


person Carpetfizz    schedule 17.04.2016    source источник


Ответы (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"   
person Alvin Reyes    schedule 25.06.2017

    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

person Naramsim    schedule 25.04.2016
comment
Знаете ли вы, как это сделать через python, особенно когда файл представляет собой изображение PIL, которое я не могу сохранить на сервере? - person rusty; 11.01.2017
comment
Не знаю, попробуйте найти библиотеку Python, обертывающую FB API. Что такое изображение PIL? - person Naramsim; 11.01.2017
comment
Вот как это сделать на питоне, используя запросы и дополнительную библиотеку request_toolbelt. gist.github.com/fatfingers/d7c090068a68b8b7238bd85374b6e34c - person kar; 09.07.2017


У меня такая же проблема, но ответа так и не нашел.
На данный момент единственным способом отправки изображений с помощью бота Facebook является «image_url» с URL-адресом вашего изображения.

person Grynets    schedule 17.04.2016
comment
Да, это то, что говорит API :( Мое временное решение будет заключаться в том, чтобы предложить пользователю загрузить изображение в течение n часов, прежде чем задание cron сотрет его с сервера. - person Carpetfizz; 17.04.2016

Вы можете отправлять вложения через 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 не задано.

person thehiredgun    schedule 03.02.2020