Telegram: токен бота и api_id/api_hash для аккаунта
К Telegram подключаются двумя способами. Бот — через Bot API с токеном, который выдаёт /newbot в @BotFather: он видит только то, что разрешено ботам, и получает обновления через вебхук или polling. Аккаунт — через MTProto: зарегистрируйте приложение на my.telegram.org, получите api_id и api_hash, затем войдите по номеру телефона, коду и, если включён, паролю 2FA.
Обновлено:
Бот или аккаунт: что выбрать?
Для автоматизации общения с клиентами — бот: ответы, уведомления, посты в канал, модерация групп. Это официально, безопасно и требует только токена. Для того, что ботам недоступно, — аккаунт (MTProto): история переписок, список участников группы, действия от имени реального пользователя. Риск выше: аккаунты из неофициальных API-клиентов попадают под наблюдение, а за спам и флуд — вечный бан.
Чем бот отличается от аккаунта
| Бот (Bot API) | Аккаунт (MTProto) | |
|---|---|---|
| Ключи | Токен от @BotFather | api_id + api_hash с my.telegram.org и вход по телефону |
| Вход | Не нужен — хватает токена | Телефон → код → пароль 2FA (если включён) |
| Сообщения в группах | В privacy mode — только команды, ответы и т. п. (если режим не выключен и бот не админ) | Всё, что видит пользователь |
| Обновления | Вебхук (setWebhook) или getUpdates — не одновременно | Сессия подключённого клиента |
| Кабинет Socialift | «Ulanishlar» (подключения) → «Telegram bot» (ключ не нужен) | «Kalitlar» (ключи) → «Telegram API (my.telegram.org)» + «Ulanishlar» → «Telegram akkaunt» |
| Python SDK | Telegram(token=...) | TelegramAccount(api_id=..., api_hash=..., session=...), pip install "socialift[telegram]" |
| Что держать в секрете | Токен | api_hash и строку сессии |
Как создать бота Telegram и получить токен
Отправьте /newbot в @BotFather
Откройте @BotFather в Telegram и отправьте команду
/newbot.Выберите имя и username
Имя отображается в контактных данных. Username — 5–32 символа: латинские буквы, цифры и подчёркивание, обязательно с окончанием
bot(например,shop_support_bot).Сохраните токен
BotFather выдаст токен вида
110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw. Любой, кто его знает, управляет ботом — храните токен в переменной окружения. Если он утёк, получите новый командой/tokenв BotFather.Настройте privacy mode для групп
По умолчанию бот в privacy mode: в группе он получает только адресованные ему команды, ответы на свои сообщения и служебные сообщения. Если нужно видеть всё —
/setprivacy→ Disable, затем удалите бота из группы и добавьте снова. Боты-администраторы получают все сообщения в любом случае.Установите вебхук
setWebhookтребует HTTPS-адрес и порт 443, 80, 88 или 8443. Передайтеsecret_token(1–256 символов:A-Z,a-z,0-9,_,-) — Telegram будет присылать его в заголовкеX-Telegram-Bot-Api-Secret-Token. Пока вебхук установлен,getUpdatesне работает; неполученные обновления хранятся не дольше 24 часов.
Как получить api_id и api_hash и войти в аккаунт
Зарегистрируйте аккаунт в официальном приложении
Для получения api_id нужен аккаунт, зарегистрированный через официальное приложение Telegram.
Зарегистрируйте приложение на my.telegram.org
Войдите на my.telegram.org по номеру телефона → API development tools → заполните форму. Пока к одному номеру можно привязать только один api_id.
Скопируйте api_id и api_hash
api_id— число,api_hash— 32 шестнадцатеричных символа. Никому не показывайте api_hash: с ним можно входить от имени вашего приложения.Войдите по телефону, коду и 2FA
auth.sendCodeотправляет код: чаще всего он приходит служебным сообщением в само приложение Telegram, но может прийти и по SMS, звонком или иначе. Код передаётся вauth.signInвместе сphone_code_hash. Если включён двухэтапный пароль, вернётсяSESSION_PASSWORD_NEEDED— дальше вход по паролю. Другие сеансы получат уведомление о новом входе.Храните сессию в секрете
Строка сессии после входа равноценна паролю: храните её в зашифрованном виде. С ней следующий запуск обходится без кода.
Как подключить Telegram в кабинете Socialift
Подключите бота
В «Ulanishlar» (подключения) → «Telegram bot» вставьте токен и нажмите «Botni ulash» (подключить бота). Socialift сразу проверяет токен через
getMe— невалидный не сохраняется. Если включён privacy mode, появится предупреждение. Один бот подключается только к одному пользователю Socialift. Для бота на странице «Kalitlar» ничего не нужно.При необходимости направьте вебхук бота в Socialift
Раздел Playground «Webhook va universal chaqiruv» (вебхук и универсальный вызов) устанавливает вебхук бота на сервер Socialift с отдельным
secret_tokenдля каждого бота. У бота один адрес вебхука: этот вызов заменит адрес, установленный вашим сервером (и наоборот).Добавьте ключ для аккаунта
В «Kalitlar» (ключи) → «Telegram API (my.telegram.org)» введите
api_idиapi_hashи нажмите «Saqlash va tekshirish» (сохранить и проверить). Socialift проверяет формат и пробует пару в Telegram через MTProtoauth.exportLoginToken— телефон не запрашивается; приAPI_ID_INVALIDключ отклоняется. Без своего ключа используется ключ Socialift, если он настроен.Подключите аккаунт
«Ulanishlar» → «Telegram akkaunt»: номер телефона (
+998901234567) → «Kod yuborish» (отправить код) → код (обычно приходит в приложение Telegram, а не по SMS) → «Tasdiqlash» (подтвердить) → при включённой 2FA пароль → «Kirish» (войти). Промежуточное состояние входа живёт около 10 минут.Отключение
Для аккаунта «Uzish» (отключить) завершает сеанс и на стороне Telegram — даже утёкшая копия сессии перестанет работать.
Бот: токен и вебхук в Python SDK
Telegram.from_env() читает TELEGRAM_BOT_TOKEN.
import asyncio
import os
from socialift import Telegram
async def main() -> None:
# TELEGRAM_BOT_TOKEN, SOCIALIFT_LICENSE_KEY
async with Telegram.from_env() as bot:
me = await bot.get_me() # самый дешёвый способ проверить токен
print(me["username"], me.get("can_read_all_group_messages"))
await bot.set_webhook(
"https://example.com/tg",
secret_token=os.environ["TG_WEBHOOK_SECRET"],
allowed_updates=["message"],
)
asyncio.run(main())Явно: Telegram(token="123456789:AA..."). Входящий запрос проверяйте через socialift.webhooks.verify_telegram_request(headers, secret_token) — Telegram не подписывает тело, защита только в этом заголовке.
Аккаунт: api_id, api_hash и вход в Python SDK
Нужен pip install "socialift[telegram]". TelegramAccount.from_env() читает TELEGRAM_API_ID, TELEGRAM_API_HASH и TELEGRAM_SESSION.
import asyncio
import os
from getpass import getpass
from socialift import TelegramAccount
async def main() -> None:
phone = "+998901234567"
async with TelegramAccount(api_id=os.environ["TELEGRAM_API_ID"],
api_hash=os.environ["TELEGRAM_API_HASH"]) as tg:
sent = await tg.send_code(phone)
result = await tg.sign_in(phone, code=input("Код: "), phone_code_hash=sent["phone_code_hash"])
if result.get("two_factor_required"):
await tg.sign_in_password(getpass("Пароль 2FA: "))
print(tg.export_session()) # равноценно паролю — храните зашифрованным
asyncio.run(main())При следующем запуске: TelegramAccount(api_id=..., api_hash=..., session=сохранённая_сессия) — код не запрашивается.
Частые ошибки
- Токен бота остался в коде, репозитории или логах.
- Бот не видит сообщения в группе — включён privacy mode или после
/setprivacyбота не добавили в группу заново. getUpdatesвызывают при установленном вебхуке.- Вебхук без
secret_token— любой, кто знает адрес, может прислать поддельное обновление. - Вебхук на неподдерживаемом порту или по HTTP.
- Для одного бота вебхук ставят и на своём сервере, и в Socialift — побеждает последний
setWebhook. - api_hash лежит в открытом доступе или строка сессии хранится незашифрованной.
- Массовые рассылки или флуд с аккаунта — риск вечного бана.
- Код ждут по SMS, а он пришёл в приложение Telegram.
Частые вопросы
Как получить токен бота Telegram?
Отправьте /newbot в @BotFather, задайте имя и username с окончанием bot — BotFather вернёт токен. Токен даёт полный контроль над ботом, храните его в секрете; если он утёк, получите новый командой /token.
Где взять api_id и api_hash?
Войдите на my.telegram.org по номеру телефона и заполните форму в разделе API development tools — появятся api_id и api_hash. К одному номеру пока привязывается только один api_id.
Почему бот не видит сообщения в группе?
По умолчанию боты работают в privacy mode и получают в группе только команды, ответы на свои сообщения и служебные сообщения. Выполните в BotFather /setprivacy → Disable и добавьте бота в группу заново либо сделайте его администратором.
Можно ли использовать вебхук и getUpdates одновременно?
Нет. Пока установлен вебхук, getUpdates не работает. Чтобы перейти на polling, сначала вызовите deleteWebhook (в SDK — bot.delete_webhook()).
Безопасно ли подключать личный аккаунт Telegram к API?
Технически возможно, но осторожно: аккаунты, входящие через неофициальные API-клиенты, автоматически попадают под наблюдение, а за флуд, спам и накрутку подписчиков или просмотров — вечный бан. Строку сессии и api_hash храните как пароль.
Нужны ли в Socialift ключи для бота?
Нет. Бот подключается в «Ulanishlar» (подключения) → «Telegram bot» только по токену BotFather. Карточка «Telegram API (my.telegram.org)» на странице «Kalitlar» (ключи) нужна лишь для аккаунта (MTProto).