Регистрация ещё не делает бота полезным

BotFather создаёт учётную запись бота и помогает управлять её настройками. Чтобы бот отвечал по вашему сценарию, нужна программа или подходящий сервис, который обрабатывает сообщения. Сначала выберите одну простую задачу: выдавать расписание, отвечать на частый вопрос или принимать заявку. Опишите успешный результат одним предложением. Такой старт помогает не собирать лишние данные и не покупать сложный конструктор до понимания задачи. Если нужен только канал с публикациями, бот может вообще не понадобиться.

BotFather создаёт учётную запись бота и токен. Чтобы бот отвечал, нужна работающая программа; токен храните как секрет.
Схема слева направо. BotFather создаёт учётную запись бота и токен. Чтобы бот отвечал, нужна работающая программа; токен храните как секрет.

Найдите подлинный BotFather

Открывайте BotFather по ссылке из официальной документации Telegram и проверяйте точное имя @BotFather. Не выбирайте похожий профиль только по аватару. Отправьте команду /newbot и следуйте подсказкам: сначала название для отображения, затем уникальное имя пользователя. BotFather сообщит требования и доступность выбранного имени. Название можно сделать понятным человеку, а имя пользователя коротким и удобным для ссылки. Не выдавайте своего бота за официальную поддержку Telegram или другого сервиса: это вводит пользователей в заблуждение.

Обращайтесь с токеном как с ключом

После регистрации BotFather выдаёт токен доступа к Bot API. Он позволяет управлять ботом через программный интерфейс, поэтому его нельзя публиковать в канале, скриншоте, открытом репозитории или клиентском коде сайта. Храните токен в защищённой настройке сервера или секретах выбранной платформы. Если используете конструктор, сначала оцените оператора и объясните себе, почему доверяете ему управление ботом. Передача токена стороннему сервису действительно даёт доступ; это не безобидная настройка внешнего вида.

Подключите обработчик и один сценарий

Для первого опыта создайте отдельного нового бота. Ниже — законченный пример для Python 3.10 или новее, без установки библиотек. Установите Python с python.org и проверьте python3 --version на macOS/Linux либо py -3 --version в Windows. Откройте обычный текстовый редактор и сохраните код следующего раздела в файл telegram-echo-bot.py, а не telegram-echo-bot.py.txt. Затем откройте терминал в папке этого файла.

Этот пример работает только в личной переписке: отвечает на /start и /help, повторяет обычный текст и пропускает фото и сообщения групп. Он не записывает сообщения на диск и не выводит их в журнал. Не добавляйте ему права администратора. Если у бота уже настроен webhook или работает другой обработчик, используйте нового учебного бота: пример не удаляет прежние настройки и не должен конкурировать с работающим сервисом.

Сохраните готовый пример в файл

Скопируйте весь код без изменений. Настоящий токен в него вставлять не нужно: программа прочитает TELEGRAM_BOT_TOKEN из окружения. Ключ нужен только вашему компьютеру и официальному Bot API Telegram.

"""Private-chat echo bot. Python 3.10+, standard library only."""

import json
import os
import sys
from urllib.request import Request, urlopen


class BotError(Exception):
    pass


def make_api(bot_token):
    def call(method, **params):
        try:
            request = Request(
                f"https://api.telegram.org/bot{bot_token}/{method}",
                data=json.dumps(params).encode("utf-8"),
                headers={"Content-Type": "application/json"},
            )
            with urlopen(request, timeout=35) as response:
                result = json.load(response)
            if not result["ok"]:
                raise BotError()
            return result["result"]
        except Exception:
            # Never print an exception containing the bot token or response body.
            raise BotError("Telegram request failed. Check the token and connection.") from None

    return call


def run(api):
    if api("getWebhookInfo").get("url"):
        raise BotError("A webhook is configured. Disable it explicitly before polling.")
    offset = 0
    while True:
        updates = api("getUpdates", offset=offset, timeout=25, allowed_updates=["message"])
        for update in updates:
            offset = update["update_id"] + 1
            message = update.get("message", {})
            chat = message.get("chat", {})
            text = message.get("text")
            if chat.get("type") != "private" or not isinstance(text, str) or not text:
                continue
            command = (text.split(maxsplit=1) or [""])[0].split("@")[0]
            if command in ("/start", "/help"):
                reply = "Bot is running. Send text and I will echo it."
            else:
                reply = text[:4096]
            api("sendMessage", chat_id=chat["id"], text=reply)


def main():
    bot_token = os.environ.get("TELEGRAM_BOT_TOKEN", "").strip()
    if not bot_token:
        print("Set TELEGRAM_BOT_TOKEN before starting the bot.", file=sys.stderr)
        return 1
    try:
        run(make_api(bot_token))
    except KeyboardInterrupt:
        return 0
    except BotError as error:
        print(error, file=sys.stderr)
        return 1
    except Exception:
        print("Bot stopped. Check the bot configuration and try again.", file=sys.stderr)
        return 1
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

Запуск на macOS и Linux через Bash

Откройте Bash в терминале (при необходимости сначала выполните bash) и перейдите в папку файла. Выполните команды ниже. В приглашении Bot token вставьте полученный у BotFather токен и нажмите Enter: символы не отображаются и само значение не попадает в историю команд. Вставляйте блок целиком, включая круглые скобки: оболочка сначала прочитает все команды и только затем попросит токен. Переменная существует только внутри этого блока и исчезнет после завершения программы.

(
    read -r -s -p "Bot token: " TELEGRAM_BOT_TOKEN
    printf '\n'
    export TELEGRAM_BOT_TOKEN
    python3 telegram-echo-bot.py
)

Запуск в Windows через PowerShell

Выберите этот вариант вместо Bash, если используете Windows. Запустите PowerShell в папке файла, выполните команды ниже и введите токен в скрытом приглашении. Команда py -3 использует установленный Python 3; если она не найдена, сначала установите Python и откройте терминал заново. Блок finally очищает переменную после завершения программы.

& {
    $botCredential = Read-Host "Bot token" -AsSecureString
    $env:TELEGRAM_BOT_TOKEN = [System.Net.NetworkCredential]::new("", $botCredential).Password
    try {
        py -3 telegram-echo-bot.py
    } finally {
        Remove-Item Env:TELEGRAM_BOT_TOKEN -ErrorAction SilentlyContinue
        $botCredential.Dispose()
    }
}

Проверьте первый ответ и остановку

Пока программа работает, откройте личный чат именно со своим ботом и отправьте /start. Ожидаемый ответ: Bot is running. Send text and I will echo it. Затем отправьте Привет — бот должен вернуть тот же текст. /help показывает подсказку. Фото и сообщения групп остаются без ответа — это ограничение примера, а не ошибка.

Остановите программу сочетанием Ctrl+C. Следующее сообщение не получит немедленного ответа: компьютер больше не обрабатывает обновления. Если отправить сообщение во время остановки и быстро запустить бота снова, Telegram может ещё хранить его в очереди, и пример ответит после запуска. В этом примере нет постоянного хранения offset, поэтому после перезапуска возможна повторная обработка незавершённого пакета. Не используйте его для платежей или действий, которые нельзя повторять.

При сообщении Telegram request failed проверьте сеть и актуальность токена, затем запустите программу снова. Проверьте, что запущен один экземпляр. A webhook is configured означает, что этот бот уже подключён другим способом: создайте нового учебного бота либо самостоятельно разберитесь с действующим подключением. Ошибки намеренно не печатают URL запроса или токен; не публикуйте ключ ради диагностики.

Это локальный учебный запуск. Для постоянной работы нужен собственный постоянно включённый сервер или доверенная платформа, защита секретов, обработка ошибок и ограничений API, а для заявок и платежей — продуманное хранение состояния. Официальная документация core.telegram.org/bots/api описывает getUpdates и sendMessage; здесь они уже соединены в минимальный проверяемый сценарий.

Оформите бота и ограничьте права

В настройках BotFather добавьте описание, изображение и список поддерживаемых команд. Для работы в группе отдельно разберитесь с режимом приватности и административными правами: доступ к сообщениям зависит от роли и конфигурации. Не назначайте бота администратором ради проверки приветствия в личном чате. Если сценарий собирает контакты или заявки, объясните пользователю, куда они попадут и зачем нужны. Для первого прототипа лучше обойтись тестовыми данными, чем хранить настоящие телефоны без подготовленной процедуры доступа и удаления.

Пример: бот с расписанием занятий

Учебный клуб хочет выдавать расписание без постоянных ответов администратора. Бот после /start объясняет, что показывает занятия на текущую неделю, а /help сообщает контакт организатора. Пользователь выбирает день и получает время с часовым поясом. Для этой задачи не нужны номер телефона, доступ к кошельку и права администратора канала. Проверка включает обычный день, день без занятий и неизвестную команду. Хороший ответ на ошибку предлагает вернуться к меню, а не оставляет человека ждать бесконечно.

Если бот молчит или токен утёк

Если бот не отвечает, проверьте, запущен ли обработчик, верен ли токен и приходят ли обновления. Посмотрите журналы без публикации секретов. При утечке токена отзовите его через управление BotFather, получите новый и обновите защищённую настройку обработчика; затем убедитесь, что старый больше не используется. Удаление сообщения с токеном не отменяет уже скопированный доступ. Если бот получил лишние права в группе, снимите их отдельно. Смена токена не исправляет автоматически неправильные разрешения или утёкшую пользовательскую базу.

Что проверить перед публичной ссылкой

Пройдите сценарий с отдельного разрешённого аккаунта: начало, полезное действие, ошибка и обращение за помощью. Убедитесь, что пользователю не показываются технические журналы, ключи и чужие данные. Определите, кто следит за работоспособностью и как отключить проблемную функцию. Если бот принимает платежи, это отдельный этап разработки с правилами оплаты и поддержки; не добавляйте его между делом. Первый запуск считается удачным, когда простая задача выполняется предсказуемо, а человек понимает ограничения бота и следующий шаг.

Оставьте понятную инструкцию владельцу

Даже если бот небольшой, запишите, где находится его обработчик, кто имеет доступ к настройкам и как остановить ответы при ошибке. В инструкции не должно быть самого токена: достаточно указать защищённое место хранения. Отдельно сохраните список команд и назначение каждого разрешения. Если разработчик уходит из проекта, пересмотрите доступы и ответственность за обслуживание. Бот может продолжать работать после завершения общения с подрядчиком, поэтому управление им не должно зависеть от памяти одного человека.