Telegram ID – це ідентифікатор об’єкта в базі даних сервісу Telegram. Тому, такі абстракції як користувач, чат, канал мають свої унікальні ідентифікатори. Зазвичай необхідність дізнатись свій Telegram ID користувача чи ID канала наприклад по логіну ( @username ) появляєтсья тоді, коли є потреба відправляти ціленаправлено відправляти чи одержувати повідомлення зі своїх або чужих телеграм ботів. Тобто він позволяє чітко ідентифікувати одержувача чи відправника повідомлення.
Для одержання даних про Telegram ID програма (застосунок на телефоні, веб версія чи комп’ютерний клієнт) повинна звернутись до Telegram API з відповідним запитом, на що вона і одержить у відповідь необхідну інформацію, в тому числі в Telegram ID. Для цього сам Telegram дає можливість використовувати TelegramBot API, які використовують боти з обрізаним доступом до інформації, і API на якому написані клієнтські програми, тобто API з більш широким доступом. Так от в основному звичайного TelegramBot API достатньо для одержання Telegram ID, і він є більш популярним із-за можливості його використання за допомогою звичайних POST і GET запитів.
Коли користувач наприклад пробує дізнатись ID чату через будь-який чужий TelegramBot, відправивши імя користувача @username чи переславши повідомлення з чату чи каналу, то в цей момент може відбутись слідуюче:
– TelegramBot звичайно поверне TelegramID
– А одночасно він дізнається @username потенційного власника каналу/чату і його BIO інформацію
– У своїх базах він помітить цього користувача і чат як активного, живого
– Передасть цю інформацію спамерам (можете пошукати інформацію в Google щоб дізнатись скільки це коштує)
– Дальше спамери потенційно будуть збирати і аналізувати інформацію, додавати в групи, відправляти особисті повідомлення
Тому, розуміючи, що звертатись до потенційних зловмисників за інформацією, це не сама хороша ідея, потрібно знати альтернативу.
Власне тому я і вирішив написати текст цієї публікації. Адже в Google чи Youtube найперше що можна получити у вигляді інструкцій – це пораду знайти якогось чужого TelegramBot, який по своїй доброті душевній надасть інформацію про Telegram ID повністю бесплатно і без SMS реєстрації.
Це при тому, що для роботи TelegramBot як мінімум потрібен хостинг, за який власник однозначно повинен платити гроші, а монетизувати якимось чином такого TelegramBot немає можливості.
Після того, як я попробував застерегти від використання чужих TelegramBot, для визначення Telegram ID, можна запропонувати альтернативу – створити свій TelegramBot, і використовуючи TelegramBot API KEY одержати доступ до Telegram API, через який вже одержати необхідну інформацію.
Так, звичайно прийдеться потратити 1 хвилину щоб одержати TelegramBot API KEY у офіційного бота Telegram – @BotFather, але я вважаю, що це найбільш простий і правильний варіант, яким потрібно користуватись. Інструкцію писав тут.
Як получити Telegram ID свого TelegramBot?
Тепер маючи API KEY, ми можемо дізнатись Telegram ID нашого бота.
Його можна знайти до знака двокрапки у токені, який видав @BotFather.
Проте, можна також сформувати URL у такому вигляді:
https://api.telegram.org/bot123456789:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc/getMe
Після чого перейти по ньому з браузера (звичайним користувачам не маючим відношення до програмування і автоматизації так буде швидше і зручніше), чи відправити за допомогою GET чи POST запита використовуючи будь-яку доступну під руками програму.
Я зазвичай використовую для відправки запитів програму ZennoPoster, але можна також і використовуючи CURL, Postman, і просто JavaScript в консолі браузера Google Chrome. І в результаті який приходить у вигляді JSON ми побачимо потрібний ідентифікатор нашого TelegramBot:
{ "ok":true, "result": { "id":4839574812, "is_bot":true, "first_name":"---", "username":"userbot", "can_join_groups":true, "can_read_all_group_messages":false, "supports_inline_queries":false } }
Як дізнатись Telegram ID чата чи канала по @username?
Для цього потрібно сформувати такий URL, який уже буде звертатись до методу getChat.
https://api.telegram.org/bot123456789:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc/getChat?chat_id=@zennolabchat
Власне відправивши GET чи POST запит, або перейшовши по сформованому URL через браузер одержимо результат, який буде містити крім іншої інформації Telegram ID. У груп цей ідентифікатор має від’ємне значення (по цьому і відрізняємо що це не Telegram ID звичайного користувача при необхідності):
{"ok":true,"result":{"id":-100111111111,"title":"---",...}}
Як дізнатись Telegram ID користувача відносно його @username?
На жаль, ми не можемо вказати @username звичайного користувача, і одержати у відповідь його Telegram ID.
Тому, для того, щоб одержати необхідний ідентифікатор ми повинні написати своєму боту будь-яке повідомлення.
Після чого сформувати URL який буде визивати API метод getUpdates який повертає всі повідомлення які були надіслані нашому TelegramBot:
https://api.telegram.org/bot123456798:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc/getUpdates
Як і попередні рази відпрвити GET чи POST запит – і одержуємо результат в якому буде необхідний Telegram ID.
Так от, тепер ми знаємо, що найбільш зручним способом одержати необхідну інформацію від API Telegram можна за допомогою свого TelegramBot і саме використовуючи метод getUpdates.
Все що нам необхідно – це просто переслати нашому боту повідомлення від користувача з іменем наприклад @username, чи з групи, чи з каналу – і в результатах getUpdates ми побачимо необхідні Telegram ID.
А уже виходячи з цієї інформації потрібно розуміти, що коли якийсь спамер пише в приватні повідомлення, а ми не чекали цього повідомлення – то можливо не варто відповідати на нього (тому що повідомлення може бути передано якомусь боту, який одержить необхідну інформацію).
До цього моменту я розказував саме про те, що можна одержати Telegram ID за допомогою доступу до API Telegram. Для цього ми використовували автентифікацію запитів ключем нашого TelegramBot, якого безкоштовно одержали у офіційного бота – @BotFather (про якого пишуть в документації).
Але, потрібно розуміти, що будь-який клієнт ( програма ) в Telegram також використовує API. І на відміну від TelegramBot API в ньому немає таких обмежень на одержання інформації. Тому, коли задача стоїть одержати Telegram ID будь-яким чином, то слідуючим напрямком в дослідженні є одержання api_id і api_hash до цього API. Після чого вже можна визивати необхідні методи, які вже можуть повертати інформацію. Проте взаємодія з цим API є більш складною – я покищо не розібрався як саме відправляти POST і GET запити використовуючи тільки api_id і api_hash без використання сторонніх бібліотек. В цій публікації я згадую цей спосіб, тому що він існує і у випадку необхідності може бути використаний.