Как это работает · Урок 1 из 4Для начинающих · 9 мин чтения
Как работает Telegram-бот — объясняю так, что поймёт даже ребёнок
Проследите путь одного сообщения от телефона до бота и обратно, соберите маленького бота прямо на странице и посмотрите на настоящий код. Опыт не нужен.
🎯 Из этого урока вы узнаете
- что происходит с сообщением между телефоном и ботом
- как бот выбирает ответ — и соберёте своего
- чем polling отличается от webhook
- как хранить токен бота в безопасности
Содержание
Вы пишете боту «/start», и меньше чем через секунду он отвечает — по имени, с кнопками, иногда с картинкой. Кажется, что с той стороны сидит человек. Но там никого нет. Кто же тогда отвечает?
В этой статье всё с самого начала. Мы проследим весь путь одного сообщения, вы сами соберёте маленького бота прямо здесь, на странице, а в конце увидите настоящий код, который делает то же самое. Если вы ни разу не писали код — отлично, статья для вас. Если писали — последние разделы идут глубже.
Короткий ответ: продавец, который никогда не спит
Представьте маленький магазин с очень быстрым продавцом. На стене у него висит список правил: «Если спрашивают цену — покажи прайс. Если спрашивают, когда открыты — скажи: с 9 до 6. Если не понял — вежливо переспроси».
Telegram-бот — это и есть такой продавец. Это программа: список правил, записанный кодом. Он не думает как человек и не устаёт. Он читает, что вы написали, находит подходящее правило и отвечает. Тысячи раз в день, и в три часа ночи тоже.
Работают три помощника:
- Telegram — почта. Он переносит каждое сообщение между вами и ботом.
- Сервер бота — мозг. Компьютер где-то в мире, на котором работает программа бота.
- База данных — блокнот. Туда бот записывает то, что нельзя забыть: ваш язык, ваш заказ, ваш последний вопрос.
Путешествие сообщения
Теперь проследим за одним сообщением. Выберите, что отправить, и нажимайте Следующий шаг (или Запустить) — смотрите, где сообщение находится в каждый момент. В тёмном окошке видно, как на этом шаге на самом деле выглядят данные.
Попробуйте
Путешествие сообщения
Шаг 1 из 6 · Вы → Telegram
Вы нажимаете «Отправить». Телефон отправляет текст на серверы Telegram — не напрямую боту.
"/start"Заметили самое неожиданное? Ваше сообщение никогда не идёт прямо к боту. Оно всегда проходит через Telegram — в обе стороны. Поэтому бот может отвечать вам одновременно на телефоне, ноутбуке и планшете: доставкой занимается Telegram, а бот только думает.
Три помощника по очереди
Telegram: почта
Первыми ваше сообщение получают серверы Telegram. Для бота они делают ещё одну работу: превращают сообщение в обновление (update) — маленькую посылку с ярлыком. На ярлыке написано, кто отправил, из какого чата, во сколько и что внутри (текст, фото, нажатие кнопки).
Ещё Telegram даёт каждому боту адрес в интернете — Bot API. Бот общается с Telegram только через этот адрес, простыми просьбами: «дай новые посылки» или «отправь этот текст в чат 123456».
Сервер: мозг
Программа бота должна где-то работать — весь день и всю ночь. Это «где-то» и есть сервер: обычный компьютер в дата-центре, который никогда не выключают. Мой новостной бот работает на небольшом арендованном сервере в облаке, а Kursi Tojik — сайт курсов валют, который я сделал, — работает в сети Cloudflare.
Когда приходит обновление, программа просыпается, читает его, выбирает правило и отвечает. Потом ждёт следующего.
База данных: блокнот
Без блокнота бот забывал бы вас сразу после ответа. Спросите «Сколько стоит?», а потом «А доставка?» — и он не поймёт, что речь о том же заказе.
Поэтому бот записывает всё в базу данных — очень аккуратный блокнот из таблиц, похожих на Excel. Одна строка на человека: номер чата, язык, что заказал. Когда вы пишете снова, бот сначала находит вас в блокноте.
Команды и кнопки
Команда — это сообщение, которое начинается с косой черты: /start, /help, /price. Команды — главные двери бота. Telegram даже показывает их меню, когда вы набираете «/». Первой каждый бот получает /start: именно её Telegram отправляет за вас, когда вы нажимаете большую кнопку Запустить.
Кнопки бывают двух видов:
- Обычная клавиатура бота — кнопки вместо вашей клавиатуры. Нажатие просто отправляет текст кнопки, как будто вы его напечатали.
- Инлайн-кнопки — кнопки прямо под сообщением бота. Нажатие не отправляет текст: бот получает тихий сигнал (callback), например
buy:42. После этого бот может изменить сообщение, показать следующую страницу или подтвердить заказ.
Кнопки нужны не для красоты. Они спасают людей от опечаток, а бота — от догадок.
Соберите своего бота
Пора побыть программистом. Ниже бот с двумя правилами. Поменяйте слова, добавьте правило и напишите боту в проверочном чате. Смотрите на маленькую серую подпись под каждым ответом: она говорит, какое правило сработало.
Попробуйте
Соберите своего бота
Проверочный чат
Этот же бот на Python
@dp.message()
async def answer(message: Message):
text = (message.text or "").lower()
if "цена" in text:
await message.answer("Наши цены — от 500 сомони. Прислать полный список?")
elif "время" in text:
await message.answer("Мы работаем каждый день с 9:00 до 18:00.")
else:
await message.answer("Извините, я не понял. Спросите про цену или время работы.")Попробуйте такие опыты:
- Напишите «цена?», а потом «ЦЕНА!!!» — сработает оба раза, потому что бот сравнивает маленькими буквами.
- Сделайте два правила, которые подходят к одному сообщению. Какое ответит? Всегда первое сверху. Порядок важен.
- Напишите то, чего не знает ни одно правило. Бот не ломается — он берёт ответ по умолчанию. У хорошего бота он есть всегда.
- Откройте Этот же бот на Python. Это настоящий код. Каждое ваше правило превращается в строку
elif. Вы только что написали программу, не набрав ни строчки.
Идея «если это — то то» — сердце любого бота. У больших ботов просто больше правил и более умные способы их проверять.
Как бот понимает «100 usd»
Люди пишут не как машины. Один пишет «100 usd», другой «100$», третий «100 долларов», четвёртый «1 000 сомони». Хороший бот должен понять их всех.
Секрет — разбить работу на крошечные шаги, каждый из которых простой. Напишите ниже разные суммы и посмотрите на каждый шаг.
Попробуйте
Как бот понимает «100 usd»
- 1. Навести порядок: маленькие буквы, одиночные пробелы
- "100 usd"
- 2. Найти число
- 100
- 3. Найти слово-валюту
- USD
4. Что понял ботСумма 100, валюта USD. Теперь бот может с этим работать.
Посмотрите, что происходит, когда чего-то не хватает: бот не угадывает. Если валюты нет — он переспрашивает. Угадывать с деньгами — верный путь к ошибкам. Это правило есть в каждом моём проекте: не уверен — спроси человека, никогда не выдумывай число.
Два способа получать сообщения: почтовый ящик и дверной звонок
Как бот узнаёт, что пришло новое обновление? Способов два, и их стоит знать — от них зависит, как устроен бот.
Polling — проверять почтовый ящик. Бот всё время спрашивает Telegram: «Есть что-то новое? … А сейчас?» Telegram держит каждый вопрос открытым некоторое время (это называется long polling) и отвечает, как только приходит сообщение. Это просто, работает на любом компьютере — даже на домашнем ноутбуке — и идеально для учёбы и небольших ботов.
Webhook — дверной звонок. Бот один раз сообщает Telegram свой веб-адрес. С этого момента Telegram сам «звонит в дверь»: отправляет каждое обновление на этот адрес, как только оно появляется. Боту не нужно спрашивать. Для этого нужен сервер с нормальным HTTPS-адресом, зато это экономит ресурсы и хорошо растёт вместе с нагрузкой. Бессерверные платформы вроде Cloudflare Workers умеют работать только так: они просыпаются, только когда в дверь стучат.
| Polling (ящик) | Webhook (звонок) | |
|---|---|---|
| Кто начинает разговор | бот спрашивает Telegram | Telegram вызывает бота |
| Нужен публичный HTTPS-адрес | нет | да |
| Подходит для | учёбы, небольших ботов, домашнего компьютера | рабочих ботов, многих пользователей, serverless |
Токен: ключ от бота
Когда вы создаёте бота через официального помощника Telegram, @BotFather, вы получаете токен — длинную строку вроде 123456789:AAH.... Токен — это ключ от бота. У кого он есть, тот может читать сообщения бота и писать от его имени.
Три правила, без исключений:
- Никогда не кладите токен в код, который уходит на GitHub, на скриншот или в переписку.
- Храните его в секретном месте, которое сервер читает при запуске: переменная окружения или хранилище секретов хостинга.
- Если токен утёк — откройте @BotFather, выберите бота и отзовите токен (revoke). Старый ключ сразу перестанет работать, а вы получите новый.
Именно так устроены мои боты: токен хранится только в секретном хранилище сервера, и код берёт его оттуда.
Чего бот не умеет
Знать ограничения — значит сэкономить деньги и нервы:
- Бот не может написать первым. Человек должен сам открыть бота и нажать «Запустить». Только после этого бот может ему писать. Это защищает всех от спама.
- В группах бот по умолчанию видит не всё. В «режиме приватности» он получает только команды и сообщения, адресованные ему.
- Бот знает только то, чему его научили. Он не ответит на вопрос, для которого нет правила — или модели ИИ. ИИ делает ответы умнее, но кто-то всё равно должен решить, что боту можно говорить, а что нельзя.
- Telegram ограничивает скорость. Бот не может отправить тысячи сообщений в секунду; большие рассылки нужно растягивать во времени.
Глубже: настоящий код
Вот полный маленький бот на Python с популярной библиотекой aiogram. На /start он здоровается, а все остальные сообщения повторяет.
import asyncio
import os
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: Message):
# Правило 1: человек нажал «Запустить».
await message.answer("Здравствуйте! Пришлите что угодно — я повторю.")
@dp.message()
async def echo(message: Message):
# Правило 2: всё остальное. Это «ответ по умолчанию».
await message.answer(message.text or "Пока я умею читать только текст.")
async def main():
bot = Bot(token=os.environ["BOT_TOKEN"]) # токен берём из секрета, а не из кода
await dp.start_polling(bot) # способ «почтовый ящик»
asyncio.run(main())Читайте его как рассказ:
Dispatcher— список правил бота.- Каждая строка
@dp.message(...)вешает на стену одно правило.CommandStart()значит «только команда /start», пустые скобки — «любое сообщение». - Правила проверяются сверху вниз — как в конструкторе выше.
message.answer(...)просит Telegram доставить ответ. За ним стоит запросsendMessage, который вы видели в путешествии сообщения.start_pollingзапускает проверку почтового ящика — бесконечно.
А вот как на самом деле выглядит одно обновление, когда оно приходит к боту (сокращённо):
{
"update_id": 81546203,
"message": {
"message_id": 52,
"from": { "id": 123456, "first_name": "Dilnoza", "language_code": "tg" },
"chat": { "id": 123456, "type": "private" },
"date": 1790930000,
"text": "/start"
}
}Обратите внимание на language_code. Telegram сообщает боту язык вашего приложения, поэтому хороший бот может поздороваться с вами по-таджикски, по-русски или по-английски с первого же сообщения.
Что добавляет настоящий бизнес-бот
Эхо-бот — это скелет. Бот, который работает на магазин, клинику или организацию, добавляет мышцы:
- База данных — клиенты, заказы, записи на приём.
- Кнопки и шаги — «выберите услугу → день → время → подтвердите», чтобы никто не печатал руками.
- Человек в процессе — бот собирает заявку, человек подтверждает. В моём новостном проекте ИИ пишет черновики, но каждый пост ждёт, пока человек нажмёт «Одобрить», и только потом попадает в канал.
- Напоминания — бот пишет за день до приёма или платежа.
- Несколько языков — те же правила, ответ на языке человека.
- Журналы и резервные копии — чтобы ничего не терялось и любую проблему можно было отследить.
Проверьте себя
Попробуйте
Проверьте себя
1. Куда сначала попадает ваше сообщение, когда вы пишете боту?
2. К одному сообщению подходят два правила. Какое ответит?
3. Человек написал «100» без валюты. Что должен сделать хороший бот?
4. Что такое webhook?
5. Токен вашего бота попал на публичный скриншот. Что делать?
Маленький словарь
- Бот — программа, которая отвечает в Telegram по правилам.
- Bot API — адрес Telegram, куда боты отправляют запросы и откуда получают обновления.
- Обновление (update) — посылка от Telegram: одно новое сообщение, нажатие кнопки или другое событие.
- Команда — сообщение, которое начинается с «/», например
/start. - Инлайн-кнопка — кнопка под сообщением бота, которая отправляет боту тихий сигнал.
- Сервер — компьютер, который всегда включён и на котором работает программа бота.
- База данных — аккуратный блокнот бота.
- Polling — бот сам постоянно спрашивает Telegram о новых обновлениях.
- Webhook — Telegram сам отправляет обновления на веб-адрес бота.
- Токен — секретный ключ, который управляет ботом.
Нужен такой бот для вашей работы?
Я делаю Telegram-ботов для бизнеса и организаций: запись и напоминания, заказы, ответы на частые вопросы, публикации в канал — с участием человека там, где это важно, на таджикском, русском и английском. Напишите мне в Telegram — @SimorghDev — и расскажите, какая задача съедает больше всего вашего времени.