API Facebook Messenger не может отправлять вложения - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь отправить вложение через API Facebook, используя Python Запросы, но постоянно получаю следующую ошибку:

"message":"(#100) The parameter recipient is required"

Мой код:

import requests

url = "https://graph.facebook.com/v6.0/me/messages?access_token=<API_TOKEN>"

headers = {
    'Content-Type': 'multipart/form-data;'
}
payload = {
    'recipient': {"id": user_id},
    'message': {
        "attachment": {
            "type": "image",
            "payload": {}
        }
    },
}
files = {
    'filedata': open('C:/Users/user-pc/Downloads/duck.jpg', 'rb')
}
response = requests.post(url, headers=headers, data=payload, files=files)

Мой код основан на следующих двух ссылках:

https://developers.facebook.com/docs/messenger-platform/send-messages/#file

https://developers.facebook.com/docs/messenger-platform/reference/attachment-upload-api/

Примечание: I удалось отправить с помощью CURL и через Почтальон.

На вторичной ноте, можно ли отправить вложение, используя только строку байта вложения? То есть вместо того, чтобы указывать фактический путь к файлу, как мне это сделать в среде сервера?

1 Ответ

0 голосов
/ 14 апреля 2020

Используя https://webhook.site/ Я проверял, что я отправлял на Facebook, и обнаружил, что он фактически не обрабатывает пару ключ-значение в моем словаре должным образом. Итак, проведя некоторые эксперименты, я обнаружил, что вам нужно использовать кортежи, не совсем уверенный, почему, если кто-то может объяснить, это будет высоко ценится.

import requests

url = "https://graph.facebook.com/v6.0/me/messages?access_token=<API_Key>"

payload = {
    'recipient': (None, {"id": user_id}),
    'message': (None, {"attachment": {"type": "image", "payload": {}}}),
}

files = {
    'filedata': ('duck', open('C:/Users/user-pc/Downloads/duck.jpg', 'rb'), 'image/jpg')
}

response = requests.post(url, data=payload, files=files)

print(response.text.encode('utf8'))

Заголовки на самом деле также не нужны Кажется, библиотека запросов делает это автоматически.

Как уже упоминал @CBroe, путь на самом деле не имеет значения, так как в любом случае он просто читает двоичные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...