Перейти к содержимому
Socialift
Разделы документации
Настройка

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)
КлючиТокен от @BotFatherapi_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 SDKTelegram(token=...)TelegramAccount(api_id=..., api_hash=..., session=...), pip install "socialift[telegram]"
Что держать в секретеТокенapi_hash и строку сессии

Как создать бота Telegram и получить токен

  1. Отправьте /newbot в @BotFather

    Откройте @BotFather в Telegram и отправьте команду /newbot.

  2. Выберите имя и username

    Имя отображается в контактных данных. Username — 5–32 символа: латинские буквы, цифры и подчёркивание, обязательно с окончанием bot (например, shop_support_bot).

  3. Сохраните токен

    BotFather выдаст токен вида 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw. Любой, кто его знает, управляет ботом — храните токен в переменной окружения. Если он утёк, получите новый командой /token в BotFather.

  4. Настройте privacy mode для групп

    По умолчанию бот в privacy mode: в группе он получает только адресованные ему команды, ответы на свои сообщения и служебные сообщения. Если нужно видеть всё — /setprivacy → Disable, затем удалите бота из группы и добавьте снова. Боты-администраторы получают все сообщения в любом случае.

  5. Установите вебхук

    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 и войти в аккаунт

  1. Зарегистрируйте аккаунт в официальном приложении

    Для получения api_id нужен аккаунт, зарегистрированный через официальное приложение Telegram.

  2. Зарегистрируйте приложение на my.telegram.org

    Войдите на my.telegram.org по номеру телефона → API development tools → заполните форму. Пока к одному номеру можно привязать только один api_id.

  3. Скопируйте api_id и api_hash

    api_id — число, api_hash — 32 шестнадцатеричных символа. Никому не показывайте api_hash: с ним можно входить от имени вашего приложения.

  4. Войдите по телефону, коду и 2FA

    auth.sendCode отправляет код: чаще всего он приходит служебным сообщением в само приложение Telegram, но может прийти и по SMS, звонком или иначе. Код передаётся в auth.signIn вместе с phone_code_hash. Если включён двухэтапный пароль, вернётся SESSION_PASSWORD_NEEDED — дальше вход по паролю. Другие сеансы получат уведомление о новом входе.

  5. Храните сессию в секрете

    Строка сессии после входа равноценна паролю: храните её в зашифрованном виде. С ней следующий запуск обходится без кода.

Как подключить Telegram в кабинете Socialift

  1. Подключите бота

    В «Ulanishlar» (подключения) → «Telegram bot» вставьте токен и нажмите «Botni ulash» (подключить бота). Socialift сразу проверяет токен через getMe — невалидный не сохраняется. Если включён privacy mode, появится предупреждение. Один бот подключается только к одному пользователю Socialift. Для бота на странице «Kalitlar» ничего не нужно.

  2. При необходимости направьте вебхук бота в Socialift

    Раздел Playground «Webhook va universal chaqiruv» (вебхук и универсальный вызов) устанавливает вебхук бота на сервер Socialift с отдельным secret_token для каждого бота. У бота один адрес вебхука: этот вызов заменит адрес, установленный вашим сервером (и наоборот).

  3. Добавьте ключ для аккаунта

    В «Kalitlar» (ключи) → «Telegram API (my.telegram.org)» введите api_id и api_hash и нажмите «Saqlash va tekshirish» (сохранить и проверить). Socialift проверяет формат и пробует пару в Telegram через MTProto auth.exportLoginToken — телефон не запрашивается; при API_ID_INVALID ключ отклоняется. Без своего ключа используется ключ Socialift, если он настроен.

  4. Подключите аккаунт

    «Ulanishlar» → «Telegram akkaunt»: номер телефона (+998901234567) → «Kod yuborish» (отправить код) → код (обычно приходит в приложение Telegram, а не по SMS) → «Tasdiqlash» (подтвердить) → при включённой 2FA пароль → «Kirish» (войти). Промежуточное состояние входа живёт около 10 минут.

  5. Отключение

    Для аккаунта «Uzish» (отключить) завершает сеанс и на стороне Telegram — даже утёкшая копия сессии перестанет работать.

Бот: токен и вебхук в Python SDK

Telegram.from_env() читает TELEGRAM_BOT_TOKEN.

telegram_bot.py
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.

telegram_login.py
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).

Источники

  1. Telegram: Bot features — BotFather, privacy mode
  2. Telegram Bot API: setWebhook
  3. Telegram: Obtaining api_id
  4. Telegram: User authorization

Связанные страницы