Практика работы с Telegram

Как сделать бота-автоответчика Telegram на Python

Минимальный учебный бот для ответов на личные текстовые сообщения. Создание, запуск и проверка без платного конструктора.

Редакция Telecobra · Обновлено 18 сентября 2026

Подготовьте отдельного бота

  1. Создайте нового тестового бота через официальный BotFather и сохраните его токен у себя.
  2. Установите Python 3 и создайте отдельную папку для примера. Сторонние библиотеки этому коду не нужны.
  3. Задайте токен переменной окружения TG_BOT_TOKEN средствами своей оболочки.
  4. Сохраните код ниже как bot_reply.py. Не используйте токен бота, у которого уже работает другой обработчик.
  5. Запустите python bot_reply.py, откройте чат с ботом и отправьте /start.

Этот пример отвечает от имени бота. Он не подключается к вашему личному аккаунту и не требует подписки Telecobra. Компьютер или сервер, на котором работает процесс, должен оставаться включённым.

Код

import json, os
from pathlib import Path
from urllib.request import Request, urlopen

TOKEN = os.environ["TG_BOT_TOKEN"]
STATE = Path("offset.txt")

def api(method, body):
    req = Request("https://api.telegram.org/bot" + TOKEN + "/" + method,
        data=json.dumps(body).encode(),
        headers={"Content-Type": "application/json"})
    with urlopen(req, timeout=40) as response:
        data = json.load(response)
    if not data.get("ok"):
        raise RuntimeError("Bot API rejected the request")
    return data["result"]

def main():
    if api("getWebhookInfo", {}).get("url"):
        raise SystemExit("У бота уже настроен webhook. Используйте нового тестового бота.")
    offset = int(STATE.read_text()) if STATE.exists() else 0
    while True:
        for update in api("getUpdates", {"offset": offset, "timeout": 25,
                                        "allowed_updates": ["message"]}):
            msg = update.get("message", {})
            chat = msg.get("chat", {})
            if chat.get("type") == "private" and "text" in msg:
                text = msg["text"].strip()
                answer = ("Здравствуйте! Напишите /help." if text == "/start"
                          else "Это учебный автоответчик. Для решения вопроса обратитесь к оператору.")
                api("sendMessage", {"chat_id": chat["id"], "text": answer})
            offset = update["update_id"] + 1
            temp = STATE.with_suffix(".tmp")
            temp.write_text(str(offset))
            temp.replace(STATE)

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        pass
    except Exception as exc:
        # Не выводим URL запроса: он содержит токен.
        raise SystemExit("Остановка: " + type(exc).__name__) from None

Проверка результата

  1. После /start должно прийти приветствие. После /help или обычного текста — фиксированный учебный ответ.
  2. Отправьте фото без подписи: этот пример не обрабатывает вложения.
  3. Остановите процесс сочетанием Ctrl+C и убедитесь, что новые сообщения больше не получают ответ.
  4. Сохраните offset.txt рядом с программой при повторном запуске: он отмечает обработанные обновления.
  5. При ошибке процесс останавливается. Проверьте токен, соединение, наличие другого обработчика и ответ Telegram до повторного запуска.

Код проверен на синтаксис офлайн. Живой бот и отправки в пользовательские диалоги для подготовки статьи не запускались.

Границы учебного решения

Пример использует getUpdates для получения входящих событий и sendMessage для ответа. Его нельзя запускать параллельно с webhook или вторым процессом для того же бота. Он не содержит ИИ, базы подписчиков и очереди рассылки.

Сбой после отправки, но до сохранения offset может привести к повторному ответу при перезапуске. Для рабочего сервиса нужны устойчивый журнал обработки, разбор ошибок и ограничений, мониторинг процесса и передача вопроса оператору. Эти задачи не решаются одним получением токена.

Бесплатный код и стоимость эксплуатации

За этот пример не требуется покупать конструктор. При этом хостинг, поддержка и подключение платной модели могут иметь стоимость. Если нужен ответ пользовательского аккаунта с учётом контекста, рассмотрите ИИ-автоответчик Telecobra. Если нужны уведомления подписчикам бота, используйте отдельную схему рассылки.

Источники и документация

Одна платформа · разные задачи

Подписка Telecobra

Соберите инструменты для работы с Telegram в одном кабинете. Сроки доступа, цены и условия — на странице подписки.

В этой инструкции описана только часть возможностей платформы. Полный список доступен в разделе функций.