Как узнать ссылку на картинку отправленной боту telegram?
Как узнать ссылку на картинку отправленной боту telegram от пользователя ?
Нужно получить ссылку на отправленную фотку, что бы переотправить ее на другой сайт.
- Вопрос задан более трёх лет назад
- 15949 просмотров
Комментировать
Решения вопроса 1
После того как пользователь отправляет фотографию, в message приходит информация о картинке, а именно file_id (подробно тут: https://core.telegram.org/bots/api#message )
Зная file_id делаем запрос getFile (https://core.telegram.org/bots/api#getfile)
Получаем file_path
Далее делаем запрос https://api.telegram.org/file/bot/ и получаем картинку.
Но такую ссылку нельзя показывать конечному пользователю, т.к. в ней указывается токен.
Ответ написан более трёх лет назад
Нравится 4 3 комментария
pink2floyd @pink2floyd Автор вопроса
Спасибо большое, я уже собирался бросить все. Еще один маленький вопрос, как мне достать file_id photo ? У document он передается вместе с массивом, у photo вроде как тоже передается потому что если перевести photo в json то там есть file_id, а как через массив вытащить то пишет null
После загрузку фотки создается несколько вариантов (разные размеры), поэтому будет несколько file_id для картинок разного размера.
data->photo[0]->file_id
data->photo[1]->file_id
data->photo[2]->file_id
Как получить ссылку на фотографирую отправленную юзером боту в телеграмм?
Как получить ссылку на фотографию отправленную юзером боту в телеграмме?
Смог только найти как скачать фото, но мне нужна ссылка.
Использую aiogramm.
- Вопрос задан более двух лет назад
- 304 просмотра
Комментировать
Решения вопроса 1

Есть очень костыльный метод, но если очень надо :
file = await bot.get_file(message.photo[-1].file_id) # message - тип того что вам пришло. url = f'https://api.telegram.org/file/bot/'
Ссылка на файл на серверах телеграма будет всегда такой, только другим ее не давайте, в ней ваш токен.
А так, файл можно просто скачать локально.
Ответ написан более двух лет назад
Нравится 1 2 комментария

Любитель поиграть в самолёты @Levman5 Автор вопроса
Делиться ссылкой не буду. Бот будет отсылать ссылку на сервер, сервер скачивает фото, преобразовывает и отправляет ссылку на новое фото юзеру.
Сохранить изображение, которое пользователь отправил боту
Требуется сохранить изображение, которое пользователь отправил боту. Насколько я понял требуется получить file_id и использовать getFile, но не могу разобраться( Подскажите пожалуйста, как это реализовать? с pyTelegramBotAPI знаком совсем недавно
Отслеживать
5,960 3 3 золотых знака 22 22 серебряных знака 44 44 бронзовых знака
задан 17 янв 2017 в 9:19
10.1k 5 5 золотых знаков 22 22 серебряных знака 67 67 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Попробовал код выше, но для фото он не подходит. Модифицировав код получил следующее.
file_info = bot.get_file(message.photo[0].file_id) downloaded_file = bot.download_file(file_info.file_path) src = filepath + message.photo[0].file_id with open(src, 'wb') as new_file: new_file.write(downloaded_file)
Отслеживать
ответ дан 6 янв 2018 в 18:25
51 1 1 серебряный знак 2 2 бронзовых знака
Может кому понадобится.
@bot.message_handler(content_types=['photo']) def handle_docs_photo(message): try: file_info = bot.get_file(message.photo[len(message.photo)-1].file_id) downloaded_file = bot.download_file(file_info.file_path) src='/mnt/files/tmp/'+file_info.file_path; with open(src, 'wb') as new_file: new_file.write(downloaded_file) bot.reply_to(message,"Фото добавлено") except Exception as e: bot.reply_to(message,e )
Отслеживать
51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака
ответ дан 25 апр 2018 в 5:55
41 1 1 бронзовый знак
@bot.message_handler(content_types=['document']) def handle_docs_photo(message): try: chat_id = message.chat.id file_info = bot.get_file(message.document.file_id) downloaded_file = bot.download_file(file_info.file_path) src = 'C:/Python/Project/tg_bot/files/received/' + message.document.file_name; with open(src, 'wb') as new_file: new_file.write(downloaded_file) bot.reply_to(message, "Пожалуй, я сохраню это") except Exception as e: bot.reply_to(message, e)
Принятие всех типов файлов, сохранение в указанную директорию и ответ от бота в виде цитаты последнего сообщения и подписи «Пожалуй, я сохраню это»
если несколько файлов, в т.ч. разных типов:
@bot.message_handler(content_types=['photo', 'document']) def handler_file(message): from pathlib import Path Path(f'files//').mkdir(parents=True, exist_ok=True) if message.content_type == 'photo': file_info = bot.get_file(message.photo[len(message.photo) - 1].file_id) downloaded_file = bot.download_file(file_info.file_path) src = f'files//' + file_info.file_path.replace('photos/', '') with open(src, 'wb') as new_file: new_file.write(downloaded_file) elif message.content_type == 'document': file_info = bot.get_file(message.document.file_id) downloaded_file = bot.download_file(file_info.file_path) src = f'files//' + message.document.file_name with open(src, 'wb') as new_file: new_file.write(downloaded_file)
Как отправить сообщение в группу Telegram
Вы можете не только использовать ботов Aimylogic чтобы отправлять личные сообщения в Telegram, но и добавлять их в групповые чаты в Telegram.
Мы предполагаем, что вы уже создали сценарий бота и знаете, как его опубликовать в канале Telegram, поэтому здесь мы рассмотрим только, как отправлять сообщения в групповой чат.
Подготовьте сценарий
В первую очередь, в качестве стартового экрана добавьте в сценарий текстовый блок, в который скопируйте и вставьте: $rawRequest.message.chat.id

Этот экран должен быть самым верхним и самым левым, чтобы бот выводил это сообщение первым.
Добавьте переменные в сценарий
Также ваш сценарий должен уметь отправлять данные в Telegram. Для этого их нужно записывать в переменную.
Например, добавим блок text to $var, с помощью которого будем записывать сообщение в переменную $message :

Свяжите «Переход после ввода $message » с блоком Http-запрос. Метод запроса — GET .

Теперь создайте URL запроса. Вместо в URL нужно будет вставить токен канала, который вы получили в BotFather.
В поле BODY запроса вставьте следующее:
chat_id_number нужно будет заменить на значение, которое вы получите на этапе активации бота в группе в Telegram.
Вы также можете отправлять любые другие переменные, которые получаете в сценарии. Например, вот так:
Если вы отправляете другие переменные, то перед отправкой запроса убедитесь, что они действительно заполняются в сценарии
Поля RESPONSE и HEADERS заполнять не нужно.
Подготовьте сообщение об ошибке
Свяжите вариант «Завершен с ошибкой» с блоком Текст, куда напишите ошибка $httpStatus
Свяжите вариант «Завершен успешно» с блоком Текст, в котором размещено сообщение об успешной отправке данных, например Спасибо, ваша заявка была отправлена!
Подготовьте группу в Telegram для бота
Теперь нужно создать группу, в которую вы хотите добавить бота, и активировать его.
Создайте группу в Telegram
Создайте группу в Telegram, выбрав Создать группу в меню, и дайте ей название:

Добавьте в группу хотя бы одного участника и нажмите Создать, а затем добавьте в группу вашего бота. Для этого нажмите Добавить участников. Наберите название бота в поиске, выберите бота и нажмите Пригласить:

Активируйте бота
Отправьте в группу команду /start . Бот отправит вам сообщение из набора символов. Это значение, включая знак — , понадобится вам позже:

Добавьте бота в существующую группу
Если у вас уже есть группа в Telegram, в которую вы хотите добавить бота, вам нужно:
- Создать чат с ботом
- Ссылка на бота есть в BotFather, в сообщении, в котором вы получали токен бота
- Перейдите в BotFather
- Напишите команду /mybots
- Выберите нужного бота
- Перейдите в Bot Settings → Group Privacy
- Выберите Turn off
- Должна появиться фраза Privacy mode is disabled for Bot
Удалите $rawRequest
Вернитесь в сценарий бота.
Теперь можно удалить блок, который содержит $rawRequest.message.chat.id .
Опубликуйте бота
Протестируйте бота
Теперь напишите в Telegram боту (не в группу). Ссылка на бота есть в BotFather, в сообщении, в котором вы получали токен бота.

Запустите новую сессию с помощью /start , пришлите боту сообщение и убедитесь, что оно приходит в группу:

Если ваши пользователи напишут боту, сообщения от них также будут публиковаться в группу в Telegram.
Что сделать, чтобы бот отвечал пользователям?
Чтобы бот отвечал пользователям в группе в Telegram, вам нужно добавить бота в администраторы группы.
Если этого не сделать, бот будет реагировать только если пользователь напишет / и затем название интента. Например, /привет .
Вам также может быть интересно
- Как отправить сообщение в Telegram
- Как валидировать городской номер телефона
- Авторизация в Telegram
- Инлайн-кнопки
