🤖 Как устроен бот внутри: очень простая схема
Представьте бота как конвейер из трёх шагов:
Мини‑схема:
🔍Что происходит под капотом по шагам
✅ Почему это просто
Бот - это токен + ваше приложение. Вся магия - в коде на сервере.
Достаточно одного файла и простого хостинга.
Масштабирование добавляется по мере роста: БД, кэш, очереди - позже.
Два способа получать события
Минимальный стек
Простейший пример: Long Polling на Python (без серверов) 🐍
import os, time, requests
TOKEN = os.getenv("TG_TOKEN")
if not TOKEN:
raise RuntimeError("Установите переменную окружения TG_TOKEN с токеном бота")
API = f"https://api.telegram.org/bot{TOKEN}"
def get_updates(offset=None):
r = requests.get(f"{API}/getUpdates", params={"offset": offset, "timeout": 25}, timeout=30)
r.raise_for_status()
return r.json().get("result", [])
def send(chat_id, text):
requests.post(f"{API}/sendMessage", json={"chat_id": chat_id, "text": text}, timeout=10)
print("Bot is running…")
offset = None
while True:
try:
for upd in get_updates(offset):
msg = upd.get("message") or {}
chat_id = msg.get("chat", {}).get("id")
text = msg.get("text", "")
if chat_id:
if text.startswith("/start"):
send(chat_id, "Привет! Я простой бот 🤖\nНапишите /help для подсказки.")
elif text.startswith("/help"):
send(chat_id, "Команды:\n/start — приветствие\n/help — справка")
else:
send(chat_id, f"Вы написали: {text} ✉️")
offset = upd["update_id"] + 1
except Exception as e:
print("Ошибка:", e)
time.sleep(2)
Нужен бот под задачу (продажи, запись, интеграции) - разработаю под ключ.
Напишите мне в личные/в ответ на пост, обсудим детали. Или рассчитайте стоимость в моём бот‑калькуляторе @svyatoslav_devbot
Представьте бота как конвейер из трёх шагов:
🧑 Пользователь пишет сообщение
🤖 Бот (ваше приложение) получает событие от Telegram
🖥 Ваш сервер решает, что ответить, и шлёт ответ обратно
Мини‑схема:
Пользователь ➜ Telegram ➜ Ваш сервер ➜ Telegram ➜ Пользователь
🔍Что происходит под капотом по шагам
1. Пользователь отправляет сообщение боту в чате.
2. Telegram формирует «update» (кто, что, когда, вложения).
3. Ваше приложение получает update:
3.1. Long Polling - «спрашиваем» у Telegram новые события.
3.2. Webhook - Telegram сам постучится к вам на URL.
4. Логика: парсим текст/кнопки, выбираем ответ, при необходимости ходим в БД или API.
5. Отправляем ответ через Bot API (sendMessage, sendPhoto и т.д.).
6. Telegram доставляет его пользователю.
✅ Почему это просто
Бот - это токен + ваше приложение. Вся магия - в коде на сервере.
Достаточно одного файла и простого хостинга.
Масштабирование добавляется по мере роста: БД, кэш, очереди - позже.
Два способа получать события
🌀 Long Polling - проще для старта (без публичного домена, всего один скрипт).
🚀 Webhook - быстрее и экономичнее в проде (нужен URL/сервер).
Минимальный стек
Язык: Python / Node.js / Go - что ближе.
Для старта: Long Polling; для продакшна: Webhook.
Состояние: сначала словарь/файл, позже — SQLite/PostgreSQL.
Простейший пример: Long Polling на Python (без серверов) 🐍
import os, time, requests
TOKEN = os.getenv("TG_TOKEN")
if not TOKEN:
raise RuntimeError("Установите переменную окружения TG_TOKEN с токеном бота")
API = f"https://api.telegram.org/bot{TOKEN}"
def get_updates(offset=None):
r = requests.get(f"{API}/getUpdates", params={"offset": offset, "timeout": 25}, timeout=30)
r.raise_for_status()
return r.json().get("result", [])
def send(chat_id, text):
requests.post(f"{API}/sendMessage", json={"chat_id": chat_id, "text": text}, timeout=10)
print("Bot is running…")
offset = None
while True:
try:
for upd in get_updates(offset):
msg = upd.get("message") or {}
chat_id = msg.get("chat", {}).get("id")
text = msg.get("text", "")
if chat_id:
if text.startswith("/start"):
send(chat_id, "Привет! Я простой бот 🤖\nНапишите /help для подсказки.")
elif text.startswith("/help"):
send(chat_id, "Команды:\n/start — приветствие\n/help — справка")
else:
send(chat_id, f"Вы написали: {text} ✉️")
offset = upd["update_id"] + 1
except Exception as e:
print("Ошибка:", e)
time.sleep(2)
Нужен бот под задачу (продажи, запись, интеграции) - разработаю под ключ.
Напишите мне в личные/в ответ на пост, обсудим детали. Или рассчитайте стоимость в моём бот‑калькуляторе @svyatoslav_devbot