Как узнать file id telegram
Перейти к содержимому

Как узнать file id telegram

  • автор:

Объясните суть FILE ID в Телеграм?

Телеграм рекомендует использовать file id файлов, которые уже были загружены на их сервер для того, чтобы не загружать повторно одни и те же файлы.

Так вот. У меня есть бот, при нажатии на кнопку он отправляет фотографию, которая давно загружена на сервер Телеграм. Я узнал file_id этой фотки и вписал в код бота

if message.text == «Фото»:
bot.send_photo(message.chat.id, «FILEID»)

Но, непонятно почему, у этой фотки которая выскакивает из бота при нажатии на кнопку, постоянно меняется file id. Я проверял.

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

  • Вопрос задан более двух лет назад
  • 3515 просмотров

Комментировать
Решения вопроса 1

SoreMix

soremix @SoreMix Куратор тега Python

Предположу, что это просто связанно с различными техническими особенностями. Если посмотреть, то можно заметить, что отправля одно и то же изображение, в нем есть одинаковые части, которые и идентифицируют изображение. Остальное — может данные о сервере, где она загруженна / дата загрузки / последнего доступа / и другая любая скучная информация, которую захочет разработчик, ну либо что угодно другое.

Если переживаете о том, что file_id меняется и может перестать находить картинку спустя какое-то время — то все нормально, в данный момент телеграм говорят, что file_id — строка постоянная, так что файл никуда не пропадет, даже если file_id меняется при повторной загрузке / отправке

Can I count on file_ids to be persistent?
Yes, file_ids can be treated as persistent.

Ответ написан более двух лет назад
Нравится 2 3 комментария
TeleQuest123 @TeleQuest123 Автор вопроса

Ага. Да, да, в начале и в конце id фотки символы везде одинаковые и лишь незначительно меняются в середине. Возможно это данные которые, как Вы говорите, о последнем доступе и т.д.
Хорошо, но тоже самое происходит, если я загружаю фотку с собственного сервера, имею ввиду, если указываю относительный путь к файлу на своём сервере. Символы id в начале и в конце тоже одинаковые и лишь незначительно меняются в середине. Значит ли это, что Телеграм не загружает повторно мою фотку с моего сервера, а сделал это лишь однажды и при нажатии на кнопку бота, то фотка уже загружается с Телеграмовского сервера, а не с моего?

Это всё меня интересует, чтобы избежать лимитов на клики в Телеграме.

Спасибо Вам большое!

SoreMix

soremix @SoreMix Куратор тега Python

FNTSYhub, что такое лимиты на клике?
Если вы отправляете изображение с помощью send_photo через file_id, естественно, она загружается уже с сервера телеграма, вы же не вписываете путь до файла на вашем сервере.

Если вы загружаете фото боту через клиент, то так же можно увидеть, что id схожи, если отправлять одно и то же изображение, так что он берет уже копию с сервера и не сохраняет дубль у себя.

В общем-то, схема выглядит так:
Отправляете боту уникальное изображение, он присваивает ему file_id и сохранят на сервере для дальнейшей работы. Если отправляете это же изображение еще раз — он проверяет, не была ли загружена эта картинка ранее, если была — то в объекте Message уже будет такой же (почти) file_id, который ссылается на первоначальный.

TeleQuest123 @TeleQuest123 Автор вопроса

SoreMix, Читал на форумах, что существует лимит на клики в ботах. Типо, если сделать тысячу кликов и будет загружена в ленту тысячу раз одна и та же фотка с чужого сервера, то бот накрывается, так как Телеграму не нравится, что идёт нагрузка на их сервер, именно поэтому они рекомендуют использовать file id, чтобы один раз загрузился файл на их сервер, а потом в боте хоть миллион кликов можно делать.

How telegram bot can get file_id of uploaded file?

In telegram API documentation I see: «You can either pass a file_id as String to resend a photo that is already on the Telegram servers», but I can’t find ways to get file_id of uploaded file. How can I get it?

asked May 12, 2016 at 14:10
Arsenii Sigiller Arsenii Sigiller
141 1 1 gold badge 1 1 silver badge 4 4 bronze badges

7 Answers 7

Its depended to your content_types ,for example:

message.video.file_id 
message.audio.file_id 
message.photo[2].file_id 

For more see this link.

answered May 14, 2016 at 10:28
Farbod Ahmadian Farbod Ahmadian
727 6 6 silver badges 18 18 bronze badges

This is the easiest way I’ve found to do it.

Upload your file to any chat and forward the message to @RawDataBot. It will return something like this:

< "update_id": 754677603, "message": < "message_id": 403656, "from": < "id": xxx, "is_bot": false, "first_name": "xxx", "username": "xxx", "language_code": "en" >, "chat": < "id": xxx, "first_name": "xxx", "username": "xxx", "type": "private" >, "date": 1589342513, "forward_from": < "id": xxx, "is_bot": false, "first_name": "xxx", "username": "xxx", "language_code": "en" >, "forward_date": 1589342184, "document": < "file_name": "filename.pdf", "mime_type": "application/pdf", "file_id": "This_Is_The_Thing_You_Need", "file_unique_id": "notthis", "file_size": 123605 >> > 

What you need is the string under file_id . Once you have copied that, you can simply the following code to send the message.

 context.bot.sendDocument(chat_id=update.effective_chat.id, document = "Your_FILE_ID_HERE") 

answered May 13, 2020 at 4:09
424 1 1 gold badge 6 6 silver badges 16 16 bronze badges

Depending on the method (File type) which you chose to send a file, after sending a file to Telegram a response is returned. For example if you send a MP3 file to Telegram using sendAudio method, Telegram returns an Audio object which contains the file ID. Source: https://core.telegram.org/bots/api#audio

answered May 12, 2016 at 16:49
852 7 7 silver badges 12 12 bronze badges

In addition to the answers above, you can log Updates that comes to your bot, Either from https://api.telegram.org/bot’.BOT_TOKEN.’/getUpdates or throw updates that come in your application. there you will find a Json property like below:

 < "update_id" = 1111111, "message" = < "message_id" = 1111111, "from" = < "id" = 111111, . >"chat" = < "id" = 111111, . >"date" = 111111, "photo" = < < "file_id" = HERE IS YOU FILE ID 1, "file_size" =>XXXX, "width" => XX, "height" => XX, > > > > 

answered Jan 25, 2019 at 5:13
532 5 5 silver badges 21 21 bronze badges

Say you receive a Message with an array of PhotoSize

As you can see, there’s a file_id , you can use this to send a photo through sendPhoto .

If we assume Update is an object, with in it a Message object, which in turn provides a Chat object with in it a id of the chat where the initial message came from and an array of PhotoSize (excuse me for using PHP here, but that’s my main language. )

$update->message->photo is how you can access the array. Use some kind of For loop to iterate over the items, or just access the first one if the array isn’t bigger than 1.

After that, you can use the result(s) to extract the file_id and send it as a string via sendPhoto ‘s photo parameter and the Chat ID via the chat_id parameter.

I hope this helped!

P.S. Here is a diagram of my current implementation of the API, i hope it brings some clarity to you!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *