Регистрация бота и получение ключа API
Первый шаг — это официальная регистрация. Telegram не позволяет создавать ботов просто так, через обычный интерфейс. Для этого есть специальный мета-бот. Откройте Telegram и в строке поиска введите @BotFather. Это официальный инструмент от команды мессенджера. У него синяя галочка верификации, так что перепутать сложно. Нажмите кнопку «Запустить» или введите команду /start. Появится список команд. Нам нужна /newbot.
После ввода команды BotFather попросит придумать имя. Это то, как бот будет отображаться в списке контактов. Можно писать на русском языке, использовать эмодзи и спецсимволы. Например, «Мой Магазин» или «Умный Помощник». Это просто отображаемое имя, его потом легко изменить.
Дальше — самый важный момент. Нужно придумать уникальный юзернейм. Он обязательно должен заканчиваться на слово «bot». Например, MyCoolShopBot или SuperHelper_bot. Система проверит занятость. Если такой ник уже занят, придется придумывать другой. Юзернейм — это адрес, по которому люди будут находить вашего бота. Его тоже можно изменить, но лучше сразу подобрать стоящий.
Если все прошло успешно, BotFather пришлет длинный код. Это токен. Выглядит он как набор случайных символов, разделенных двоеточием. Скопируйте его и сохраните. Никому не показывайте этот код. Токен — это ключ доступа к управлению ботом. Если он попадет к злоумышленникам, они смогут перехватить управление или удалить вашего бота. Лучше всего хранить его в переменных окружения, а не прямо в коде программы, но об этом позже.
Пока вы у BotFather, имеет смысл сразу сделать пару настроек. Команда /setdescription позволяет написать текст, который видит человек перед тем, как нажать кнопку «Запустить». Команда /setabouttext задает краткое описание, которое высвечивается в поиске. Также можно сразу загрузить аватарку через /setuserpic. Это сделает бота живым и доверительным. Не пренебрегайте этим, пустой бот без фото выглядит подозрительно.
После регистрации бот в Telegram уже существует. На него можно подписаться, отправить ему сообщение, но он не ответит. Потому что у него пока нет «мозгов». Он просто пустая оболочка. Теперь нужно написать программу, которая будет подключаться к серверам Telegram по API и обрабатывать сообщения. Для этого мы будем использовать язык Python. Он популярен, прост в чтении и имеет отличные библиотеки для работы с ботами.
Перед тем как писать код, убедитесь, что у вас установлен Python. Откройте терминал или командную строку и введите `python —version` или `python3 —version`. Если видите номер версии, значит, все хорошо. Если нет, скачайте установщик с официального сайта python.org и поставьте галочку «Add Python to PATH» при установке. Это важно, чтобы система знала, где искать интерпретатор.
Также нам понадобится текстовый редактор. Блокнот Windows не подойдет, он неудобен. Лучше использовать VS Code, PyCharm или Sublime Text. VS Code — отличный бесплатный вариант с подсветкой синтаксиса и плагинами. Когда среда готова, создайте папку для проекта. Назовите ее, например, `my_first_bot`. Внутри создайте файл `main.py`. Это будет главный файл нашей программы.
Для работы с Telegram API существуют разные библиотеки. Самая популярная для новичков — `pyTelegramBotAPI`, или просто `telebot`. Она интуитивно понятна и хорошо документирована. Чтобы ее установить, откройте терминал в папке с проектом и введите команду `pip install pyTelegramBotAPI`. Если у вас macOS или Linux, возможно, придется использовать `pip3`. После установки библиотека готова к работе.
Теперь напишем первую строчку кода. Откройте файл `main.py`. Импортируем библиотеку и создаем экземпляр бота, используя полученный от BotFather токен. Код будет выглядеть примерно так: `import telebot; bot = telebot.TeleBot(‘ВАШ_ТОКЕН_ЗДЕСЬ’)`. Вместо текста в скобках вставьте тот самый длинный код. Лучше не хранить токен прямо в коде, если планируете выкладывать проект на GitHub. Используйте библиотеку `os` или файл `.env`, но для теста сойдет и прямой ввод.
Теперь научим бота отвечать на команды. В Telegram есть специальные команды, которые начинаются со слэша, например `/start` или `/help`. Библиотека telebot использует декораторы для обработки таких событий. Напишем обработчик для команды `/start`. Это первое, что видит пользователь. Код выглядит так: `@bot.message_handler(commands=[‘start’])`. На следующей строке объявляем функцию, которая будет выполняться при получении этой команды: `def send_welcome(message):`. Внутри функции мы отправляем ответ пользователю: `bot.send_message(message.chat.id, «Привет! Я бот.»)`.
Написание кода и настройка логики
Разберем, что здесь происходит. `message.chat.id` — это уникальный идентификатор чата. Каждый пользователь и каждый чат в Telegram имеют свой ID. Чтобы бот отправил сообщение конкретному человеку, ему нужно знать этот ID. Внутри объекта `message` содержится вся информация о входящем сообщении: кто отправил, какой текст, время и так далее. Мы берем оттуда ID чата и отправляем туда текст.
Добавим обработку обычного текста. Если пользователь напишет что-то, кроме команды, бот должен как-то реагировать. Используем декоратор `content_types`. По умолчанию бот ищет команды, но мы можем указать, что нас интересует текст. Код: `@bot.message_handler(content_types=[‘text’])`. Функция может просто эхом возвращать сообщение: `bot.send_message(message.chat.id, f»Ты написал: {message.text}»)`. Это простой способ проверить, что бот получает сообщения правильно.
Чтобы бот работал, его нужно запустить. В самом конце файла добавим строку, которая переведет бота в режим постоянного опроса серверов Telegram: `bot.polling(none_stop=True)`. Параметр `none_stop=True` означает, что если бот потеряет соединение, он попытается переподключиться автоматически, а не выключится. Запустите файл через терминал командой `python main.py`. Если ошибок нет, бот в Telegram начнет отвечать на команды.
Простой echo-бот — это скучно. Давайте добавим интерактивности с помощью кнопок. В Telegram есть два вида кнопок: под полем ввода (ReplyKeyboardMarkup) и внутри сообщения (InlineKeyboardMarkup). Начнем с первых. Они удобны для меню выбора. Импортируем типы клавиатур из библиотеки: `from telebot import types`. Создадим клавиатуру: `markup = types.ReplyKeyboardMarkup(resize_keyboard=True)`. Параметр `resize_keyboard=True` делает кнопки компактными, чтобы они не занимали полэкрана.
Теперь добавим кнопки. `item1 = types.KeyboardButton(«Кнопка 1»)`. `item2 = types.KeyboardButton(«Кнопка 2»)`. Добавляем их в клавиатуру: `markup.add(item1, item2)`. Теперь изменим функцию `/start`, чтобы она отправляла эту клавиатуру вместе с приветствием. Пользователь увидит кнопки под полем ввода. Как нажать на кнопку? Это то же самое, что отправить текстовое сообщение с названием кнопки. Поэтому обработчик текста, который мы писали раньше, сработает и при нажатии на кнопку. Вы можете добавить проверку: `if message.text == «Кнопка 1»:` и выполнять определенное действие.
Inline-кнопки сложнее, но они выглядят профессиональнее. Они прикреплены к конкретному сообщению и могут содержать ссылки или данные для обработки сервером. Создаются они через `types.InlineKeyboardMarkup()`. Кнопки добавляются построчно. `btn_1 = types.InlineKeyboardButton(text=’Ссылка’, url=’https://google.com’)`. `btn_2 = types.InlineKeyboardButton(text=’Нажми меня’, callback_data=’press’)`. Добавляем их в разметку и привязываем к сообщению. Обработка нажатия inline-кнопок происходит через другой декоратор: `@bot.callback_query_handler(func=lambda call: True)`. Внутри функции нужно обязательно вызвать `bot.answer_callback_query(call.id)`, чтобы индикатор загрузки на кнопке исчез.
Для серьезных проектов важно разделять код на файлы. Не стоит писать все в одном `main.py`, когда логика становится сложной. Вынесите функции обработки сообщений в отдельные модули. Например, файл `handlers.py` для обработки команд и `keyboards.py` для создания клавиатур. Это сделает код чистым и понятным. Используйте виртуальное окружение `venv`, чтобы библиотеки проекта не мешали системным библиотекам Python. Это хорошая практика разработчика.
Не забывайте про обработку ошибок. Сеть может пропасть, API Telegram может временно не ответить. Оборачивайте критические участки кода в блоки `try…except`. Логируйте ошибки в файл, чтобы потом понимать, почему бот упал. Библиотека `logging` в Python отлично подходит для этого. Запись логов поможет найти баги, которые не видны при обычном тестировании.
Сейчас ваш бот работает только тогда, когда включен ваш компьютер и запущен файл скрипта. Это ненадежно. Компьютер может уйти в спящий режим, интернет может отключиться, или вы просто закроете терминал. Для постоянной работы нужен сервер. Самый популярный вариант для простых ботов — это VPS (виртуальный выделенный сервер). Это удаленный компьютер, который работает в дата-центре круглосуточно. Популярные провайдеры: Timeweb, Beget, DigitalOcean, Regen.
Выберите сервер с операционной системой Ubuntu. Она бесплатна, стабильна и на ней есть куча инструкций. Минимальной конфигурации для простого бота на Python хватит за глаза: 1 ядро процессора и 512 МБ оперативной памяти. Этого достаточно для обработки тысяч запросов в день. После покупки вам пришлют IP-адрес, логин и пароль от root-пользователя.
Размещение на сервере и обеспечение работы 24/7
Подключиться к серверу можно через протокол SSH. На Windows для этого используется программа PuTTY или встроенный терминал в VS Code. На macOS и Linux достаточно открыть терминал и ввести `ssh root@ваш_ip_адрес`. При первом подключении спросит подтверждение ключа, пишите `yes`. Введите пароль. Обратите внимание: при вводе пароля символы на экране не отображаются, это нормально.
Первым делом на новом сервере нужно обновить списки пакетов. Введите команды `apt update` и `apt upgrade`. Это займет пару минут. Теперь установим Python и pip, если их нет. Команда `apt install python3 python3-pip`. Также понадобится git, если вы планируете заливать код через репозиторий, но можно обойтись и без него, используя SFTP-протокол для передачи файлов. Для передачи файлов с локального компьютера на сервер удобно использовать программу FileZilla.
Создадим папку для бота. `mkdir my_bot` и перейдем в нее `cd my_bot`. Теперь нужно перенести файлы вашего проекта сюда. Если используете FileZilla, введите данные подключения (хост, логин, пароль, порт 22) и просто перетащите файлы из папки на компьютере в папку на сервере. Убедитесь, что вы передали файл с зависимостями `requirements.txt`. Если его нет, создайте его командой `pip freeze > requirements.txt` на своем компьютере перед отправкой.
Установим библиотеки на сервере. Команда `pip3 install -r requirements.txt`. Теперь бот готов к запуску. Если запустить его просто командой `python3 main.py`, он будет работать только до тех пор, пока вы не закроете SSH-сессию. Как только вы выйдете, процесс завершится. Чтобы этого избежать, используются специальные утилиты. Самая простая — `screen`. Установите ее: `apt install screen`. Запустите сессию: `screen -S bot`. В этом новом окне запустите бота: `python3 main.py`. Теперь нажмите `Ctrl+A`, затем `D`. Это «открепит» вас от сессии, но бот продолжит работать на фоне.
Более профессиональный способ — использовать `systemd`. Это система управления сервисами в Linux. Она сама перезапустит бота, если он упадет с ошибкой. Создайте файл сервиса: `nano /etc/systemd/system/bot.service`. Вставьте туда конфигурацию. Укажите путь к python, путь к файлу бота и пользователя. Сохраните файл. Теперь активируем сервис: `systemctl start bot.service` и `systemctl enable bot.service`. Проверьте статус командой `systemctl status bot.service`. Если видите зеленую надпись «active (running)», значит, все отлично. Бот теперь запускается сам при перезагрузке сервера.
Важный момент: безопасность. Не работайте на сервере под пользователем root постоянно. Создайте обычного пользователя и дайте ему права sudo. Настройте firewall (ufw), чтобы открывать только необходимые порты. Обычно для бота ничего открывать не нужно, так как он сам инициирует соединение с Telegram. Но если используете вебхуки, нужно открыть порт 443 или 80. Для начала ботинга лучше использовать Long Polling, как мы сделали, это проще и не требует настройки домена и SSL-сертификата.
Следите за логами. Если бот перестал отвечать, первым делом смотрите логи через `journalctl -u bot.service -f`. Там будут написаны ошибки. Часто бывает, что забывают установить какую-то библиотеку или меняется токен. Мониторинг важен. Можно настроить отправку логов себе в личку, если бот падает, но это уже более сложная задача. Для старта достаточно периодически проверять статус сервиса.
Поддержка бота — это не только код. Это и общение с пользователями. Бот — это лицо вашего проекта. Следите за тем, чтобы ответы были вежливыми и своевременными. Если бот используется для бизнеса, подключите платежные системы. Telegram имеет встроенный API для платежей, но это требует юридического лица и верификации. Для небольших сумм можно использовать криптовалюту или внешние сервисы приема платежей с генерацией ссылки.
Наконец, не забывайте про обновления. API Telegram меняется, библиотеки обновляются. Раз в месяц проверяйте актуальность зависимостей. `pip3 install —upgrade -r requirements.txt`. Тестируйте обновления на локальной машине, прежде чем заливать на боевой сервер. Это убережет вас от ситуаций, когда бот внезапно падает из-за несовместимости версий. Создание бота — это процесс обучения. Начните с простого, усложняйте функционал, экспериментируйте с кнопками и базами данных. Удачи!
Данная статья носит информационный характер.
