Создание и подключение Telegram-бота: быстрый старт
Чтобы создать бота в Telegram, нужно зарегистрировать его через официального бота @BotFather, получить уникальный токен доступа и настроить сервер для обработки запросов к Telegram Bot API. Бот работает как посредник: он отправляет HTTP-запросы к серверам Telegram и получает обновления о действиях пользователей.
Эта инструкция проведет вас через все этапы: от регистрации до запуска первого скрипта на Python, который отвечает на команду /start.
Оглавление
Регистрация бота и получение токена {#registration}
Первый шаг — создание учетной записи бота в системе Telegram. Это делается через диалог с «отцом всех ботов».
- Найдите в поиске Telegram бота @BotFather (у него есть синяя галочка верификации).
- Отправьте команду
/newbot. - Следуйте инструкциям:
- Введите имя бота (например,
Мой Тестовый Бот). Оно может быть любым и меняться позже. - Введите username (например,
my_test_bot_2026). Оно должно быть уникальным, заканчиваться наbotили_botи не может быть изменено в будущем.
- Введите имя бота (например,
- Если имя свободно, BotFather пришлет сообщение с поздравлением и API Token.
Токен выглядит примерно так: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz.
Никогда не публикуйте токен в открытом доступе (на GitHub, в чатах или на форумах). Любой, кто владеет токеном, может управлять вашим ботом, читать сообщения и рассылать спам от его имени.
Принцип работы Bot API {#how-it-works}
Telegram Bot API — это HTTP-интерфейс. Ваш код взаимодействует с серверами Telegram двумя основными способами получения обновлений (сообщений от пользователей):
- Long Polling (getUpdates): Ваш сервер периодически «спрашивает» у Telegram: «Есть ли новые сообщения?». Простой метод для разработки и тестирования, не требует публичного IP или SSL-сертификата.
- Webhook: Вы указываете Telegram URL вашего сервера. Как только пользователь пишет боту, Telegram сам отправляет данные (POST-запрос) на ваш адрес. Этот метод предпочтителен для продакшена, так как экономит ресурсы и работает в реальном времени.
Все запросы к API строятся по схеме:
https://api.telegram.org/bot<ТОКЕН>/<МЕТОД>
Например, чтобы отправить сообщение, используется метод sendMessage.
Пример кода на Python (Long Polling) {#python-example}
Для быстрого старта используем метод Long Polling. Вам понадобится Python 3 и библиотека requests.
Установите библиотеку:
pip install requests
Создайте файл bot.py и вставьте следующий код. Замените YOUR_TOKEN на токен, полученный от BotFather.
import requests
import time
TOKEN = "YOUR_TOKEN"
BASE_URL = f"https://api.telegram.org/bot{TOKEN}"
def send_message(chat_id, text):
"""Отправляет текстовое сообщение в чат."""
url = f"{BASE_URL}/sendMessage"
payload = {
"chat_id": chat_id,
"text": text,
"parse_mode": "HTML" # Позволяет использовать жирный шрифт и ссылки
}
try:
response = requests.post(url, json=payload)
response.raise_for_status()
except Exception as e:
print(f"Ошибка отправки сообщения: {e}")
def get_updates(offset=None):
"""Получает новые обновления от Telegram."""
url = f"{BASE_URL}/getUpdates"
params = {"timeout": 100, "offset": offset}
try:
response = requests.get(url, params=params)
response.raise_for_status()
return response.json()
except Exception as e:
print(f"Ошибка получения обновлений: {e}")
return {"result": []}
def main():
print("Бот запущен...")
last_update_id = None
while True:
updates = get_updates(last_update_id)
if updates and updates.get("result"):
for update in updates["result"]:
last_update_id = update["update_id"] + 1
# Проверяем, есть ли в обновлении сообщение
if "message" in update:
message = update["message"]
chat_id = message["chat"]["id"]
text = message.get("text", "")
# Реакция на команду /start
if text == "/start":
send_message(chat_id, "Привет! 👋\nЯ простой бот, созданный с помощью <b>Python</b>.")
# Эхо-ответ на любой другой текст
elif text:
send_message(chat_id, f"Вы написали: {text}")
time.sleep(1) # Пауза, чтобы не перегружать API
if __name__ == "__main__":
main()
Запустите скрипт командой python bot.py. Найдите своего бота в Telegram, нажмите «Запустить» или отправьте /start.
Настройка Webhook для продакшена {#webhook-setup}
Когда бот готов к реальной работе, переключитесь на Webhook. Для этого вам потребуется:
- Сервер с публичным IP-адресом.
- Доменное имя с действующим SSL-сертификатом (HTTPS обязателен).
Как установить Webhook
Отправьте один раз GET-запрос в браузере или через curl:
curl https://api.telegram.org/bot<ВАШ_ТОКЕН>/setWebhook?url=https://ваш-домен.com/webhook
Если ответ содержит "ok": true, значит, Telegram будет слать все новые сообщения на указанный URL.
Обработка Webhook на сервере
Ваш сервер должен принимать POST-запросы. Пример логики на Python (с использованием Flask):
from flask import Flask, request
import requests
app = Flask(__name__)
TOKEN = "YOUR_TOKEN"
BASE_URL = f"https://api.telegram.org/bot{TOKEN}"
@app.route('/webhook', methods=['POST'])
def webhook():
data = request.json
if 'message' in data:
chat_id = data['message']['chat']['id']
text = data['message'].get('text', '')
if text == '/start':
requests.post(f"{BASE_URL}/sendMessage", json={
"chat_id": chat_id,
"text": "Привет из Webhook!"
})
return "OK", 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8443, ssl_context=('cert.pem', 'key.pem'))
Для локального тестирования вебхуков можно использовать туннели вроде ngrok. Он создаст временный публичный HTTPS-адрес, который перенаправит запросы на ваш локальный компьютер.
Безопасность и частые ошибки {#security-and-errors}
Частые ошибки новичков
| Ошибка | Причина и решение |
|---|---|
401 Unauthorized | Неверный токен. Проверьте, нет ли лишних пробелов при копировании. |
400 Bad Request: chat not found | Бот не может написать пользователю первым. Пользователь должен сначала нажать /start или написать боту. |
409 Conflict | Вебхук уже установлен на другой URL, а вы пытаетесь использовать Long Polling. Сначала удалите вебхук методом deleteWebhook. |
| Бот не отвечает | Скрипт упал с ошибкой или сервер недоступен. Проверьте логи консоли. |
Рекомендации по безопасности
- Хранение токена: Используйте переменные окружения (
os.getenv('BOT_TOKEN')), а не храните токен прямо в коде. - Валидация запросов: При использовании Webhook проверяйте, что запрос пришел именно от серверов Telegram (сверка IP-адресов или использование секретного токена в URL вебхука).
- Обработка ошибок: Всегда оборачивайте сетевые запросы в
try/except, так как интернет-соединение может прерваться.
FAQ {#faq}
Можно ли сделать бота без программирования? Да, существуют конструкторы ботов (например, Manybot, PuzzleBot), но они ограничены в функционале. Для гибкой логики и интеграций нужен свой код.
Какой язык программирования лучше выбрать?
Любой, который умеет делать HTTP-запросы. Популярные варианты: Python (библиотеки aiogram, pytelegrambotapi), Node.js (telegraf, grammy), Go, PHP.
Есть ли лимиты на сообщения? Да. Боты не могут рассылать сообщения пользователям, которые не начали диалог первыми. Также существуют ограничения на частоту запросов (около 30 сообщений в секунду для одного бота).
Как добавить кнопки в бота?
Используйте методы sendReplyKeyboardMarkup (кнопки под полем ввода) или sendInlineKeyboardMarkup (кнопки под сообщением). Это делается через параметры метода sendMessage.