Создание и подключение Telegram-бота: быстрый старт

Иван Корнев·24.04.2026·4 мин

Чтобы создать бота в Telegram, нужно зарегистрировать его через официального бота @BotFather, получить уникальный токен доступа и настроить сервер для обработки запросов к Telegram Bot API. Бот работает как посредник: он отправляет HTTP-запросы к серверам Telegram и получает обновления о действиях пользователей.

Эта инструкция проведет вас через все этапы: от регистрации до запуска первого скрипта на Python, который отвечает на команду /start.

Оглавление

  1. Регистрация бота и получение токена
  2. Принцип работы Bot API
  3. Пример кода на Python (Long Polling)
  4. Настройка Webhook для продакшена
  5. Безопасность и частые ошибки
  6. FAQ

Регистрация бота и получение токена {#registration}

Первый шаг — создание учетной записи бота в системе Telegram. Это делается через диалог с «отцом всех ботов».

  1. Найдите в поиске Telegram бота @BotFather (у него есть синяя галочка верификации).
  2. Отправьте команду /newbot.
  3. Следуйте инструкциям:
    • Введите имя бота (например, Мой Тестовый Бот). Оно может быть любым и меняться позже.
    • Введите username (например, my_test_bot_2026). Оно должно быть уникальным, заканчиваться на bot или _bot и не может быть изменено в будущем.
  4. Если имя свободно, BotFather пришлет сообщение с поздравлением и API Token.

Токен выглядит примерно так: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz.

Никогда не публикуйте токен в открытом доступе (на GitHub, в чатах или на форумах). Любой, кто владеет токеном, может управлять вашим ботом, читать сообщения и рассылать спам от его имени.

Принцип работы Bot API {#how-it-works}

Telegram Bot API — это HTTP-интерфейс. Ваш код взаимодействует с серверами Telegram двумя основными способами получения обновлений (сообщений от пользователей):

  1. Long Polling (getUpdates): Ваш сервер периодически «спрашивает» у Telegram: «Есть ли новые сообщения?». Простой метод для разработки и тестирования, не требует публичного IP или SSL-сертификата.
  2. 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. Для этого вам потребуется:

  1. Сервер с публичным IP-адресом.
  2. Доменное имя с действующим 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.
Бот не отвечаетСкрипт упал с ошибкой или сервер недоступен. Проверьте логи консоли.

Рекомендации по безопасности

  1. Хранение токена: Используйте переменные окружения (os.getenv('BOT_TOKEN')), а не храните токен прямо в коде.
  2. Валидация запросов: При использовании Webhook проверяйте, что запрос пришел именно от серверов Telegram (сверка IP-адресов или использование секретного токена в URL вебхука).
  3. Обработка ошибок: Всегда оборачивайте сетевые запросы в try/except, так как интернет-соединение может прерваться.

FAQ {#faq}

Можно ли сделать бота без программирования? Да, существуют конструкторы ботов (например, Manybot, PuzzleBot), но они ограничены в функционале. Для гибкой логики и интеграций нужен свой код.

Какой язык программирования лучше выбрать? Любой, который умеет делать HTTP-запросы. Популярные варианты: Python (библиотеки aiogram, pytelegrambotapi), Node.js (telegraf, grammy), Go, PHP.

Есть ли лимиты на сообщения? Да. Боты не могут рассылать сообщения пользователям, которые не начали диалог первыми. Также существуют ограничения на частоту запросов (около 30 сообщений в секунду для одного бота).

Как добавить кнопки в бота? Используйте методы sendReplyKeyboardMarkup (кнопки под полем ввода) или sendInlineKeyboardMarkup (кнопки под сообщением). Это делается через параметры метода sendMessage.