Не могу отправить фото с помощью бота в телеграмме, с помощью post запроса
Решил не расписывать все слова а сразу показать кодом:
@api_view(['POST', 'GET'])
def send_post_request_telegram_bot(request):
if request.method == 'POST':
data = JSONParser().parse(request)
response = requests.post(
url='https://api.telegram.org/bot{0}/{1}'.format('мой токен', 'SendMessage'),
data={'chat_id': -538035856, 'text': data["name"]}
).json()
response = requests.post(
url='https://api.telegram.org/bot{0}/{1}'.format('мой токен', 'SendPhoto'),
data={'chat_id': -538035856, 'text': data["photo"]} !!!
)
return Response({'data': 'data', 'status': 'OK'})
if request.method == 'GET':
return render(request, 'news/request_to_telegram_bot.html')
Проблема в том что я не знаю как в строке !!! засунуть фото, в доке написано вот так: Разместите файл с использованием multipart/form-data обычным способом, которым файлы загружаются через браузер. Максимальный размер фотографий-10 МБ, других файлов-50 МБ. но я не понимаю как это сделать помогите пожалуйста
Правка, спустя несколько часов разбирательств получилось такое дело:
@api_view(['POST', 'GET'])
def send_post_request_telegram_bot(request):
if request.method == 'POST':
response = requests.post(
url='https://api.telegram.org/bot{0}/{1}'.format('xxx',
'SendMessage'),
data={'chat_id': -538035856, 'text': request.POST["name"]}
).json()
response = requests.post(
url='https://api.telegram.org/bot{0}/{1}'.format('xxx',
'SendPhoto'),
data={'chat_id': -538035856, 'text': request.FILES}
).json()
print(request.FILES)
response = requests.post(
url='https://api.telegram.org/bot{0}/{1}'.format('xxx`введите сюда код`',
'SendMessage'),
data={'chat_id': -538035856, 'text': request.POST["msg"]}
).json()
return Response({'data': 'data', 'status': 'OK'})
`
Теперь просто отправляется name и msg но photo которое я точно с помощью postman отправляю не прилетает, оно в реквесте есть я проверял принтом 
Ответы (1 шт):
Если вы заглянете в официальную документацию Telegram к методу sendPhoto, то увидите, что передать нужно ключ не text, а photo. Вы же в своем коде указываете только text. Плюс, чтобы отправить изображение, потребуется использовать аргумент files, в который требуется передать словарь с ключом photo, и значением - байты или объект буферизированных байтов изображения. Используйте, также конструкцию with-as, чтобы автоматически закрывать открытое изображение.
Пример:
import requests
token = 'token'
with open('Test.png', 'rb') as file:
print(file) # <_io.BufferedReader name='Test.png'>
r = requests.post(f'https://api.telegram.org/bot{token}/sendPhoto',
data={'chat_id': 123456789},
files={"photo": file})
print(r.json())
Если же вы хотите отправлять file_id изображения, которые уже есть на сервере Telegram, то можно обойтись и без аргумента files:
import requests
token = 'token'
r = requests.post(f'https://api.telegram.org/bot{token}/sendPhoto',
data={'chat_id': 123456789,
"photo": 'Ваш file_id изображения'})
print(r.json())

