Что такое бот и как он общается с Telegram
Telegram-бот — это аккаунт, которым управляет не человек, а твоя программа: она получает сообщения и сама на них отвечает.
Бот (Telegram-бот) — специальный аккаунт в Telegram, которым управляет программа, а не человек: он принимает сообщения и автоматически на них отвечает.
Зачем тебе это вообще нужно
Представь обычный школьный день. Ты приходишь домой, открываешь Telegram, а там тебе пишет аккаунт по имени «Цыплёнок-помощник»: «Привет! Не забудь, завтра сдавать реферат по истории. И, кстати, на улице +3 и дождь — бери куртку». Ты не настраивал будильник, не лез в приложение погоды — просто кто-то сам всё вспомнил и написал.
Только это не «кто-то». Это программа, которую ты сам напишешь к концу этого курса. Через все уроки мы будем собирать одного и того же бота — «Цыплёнка-помощника». Сначала он научится отвечать на одну команду, потом показывать кнопки и меню, вести диалог по шагам, запоминать тебя, ходить за погодой и новостями в интернет, рассылать напоминания и даже работать в чате с друзьями. К финалу это будет настоящий бот, который живёт на сервере и работает сам по себе.
Но прежде чем писать код, надо понять одну простую вещь: что такое бот на самом деле и как он умудряется переписываться с тобой. Без этой картинки весь дальнейший код будет казаться магией, а магия пугает. Давай разберёмся — и страх уйдёт.
Звучит сложно? На самом деле нет. Если ты уже писал на Python хоть пару функций — ты справишься. Никаких «серверов» и «асинхронности» прямо сейчас разбирать не будем, оставим их на потом. Сегодня — только идея.
Бот — это аккаунт без человека внутри
Открой список своих чатов. Там есть мама, лучший друг, классный чат, может быть, какой-нибудь канал с мемами. С точки зрения Telegram все собеседники устроены примерно одинаково: у каждого есть имя, аватарка, и каждому можно написать сообщение.
Бот выглядит ровно так же. У него есть имя, аватарка, ему можно написать. Разница только одна, но важная: за обычным аккаунтом сидит человек, а за ботом — программа. Когда ты пишешь другу, твоё сообщение читает живой человек и отвечает, когда захочет. Когда ты пишешь боту, сообщение читает код, и он отвечает мгновенно — потому что в нём заранее прописано, что делать.
Хорошая аналогия: бот — это как автоответчик, только умный. Ты говоришь — он реагирует по заранее заданным правилам. Только правила эти пишешь ты, и они могут быть какими угодно.
Из этого следует пара вещей, которые сразу полезно понять.
- Бот не «думает» сам — он делает ровно то, что ты запрограммировал. Если ты не написал, как отвечать на слово «привет», бот промолчит.
- Бот не может первым написать незнакомому человеку. Сначала пользователь должен сам начать диалог (обычно кнопкой «Старт»). Это защита от спама — и хорошо, что она есть.
- Бота невозможно создать просто так из приложения. Его регистрируют через специального бота-родителя. Про него поговорим чуть ниже.
Чем бот отличается от обычного аккаунта: коротко
| Обычный аккаунт | Бот | |
| Кто отвечает | Живой человек | Программа (код) |
| Как создаётся | Регистрация по номеру телефона | Через бота BotFather, выдаётся токен |
| Может написать первым | Да | Нет, пока пользователь сам не начнёт |
| Скорость ответа | Когда человек прочитает | Мгновенно, по правилам в коде |
Как бот «слышит» тебя: официант между тобой и кухней
Вот тут начинается самое интересное. Ты пишешь боту в своём телефоне. А программа бота крутится где-то совсем в другом месте — может, на твоём ноутбуке, может, на сервере в другой стране. Как же твоё сообщение до неё доходит?
Представь ресторан. Ты сидишь за столиком (это ты в Telegram на телефоне). Где-то далеко есть кухня, где готовят (это программа твоего бота). Напрямую ты с поваром не общаешься — между вами ходит официант. Ты говоришь официанту заказ, он несёт его на кухню, забирает готовое блюдо и приносит тебе.
В нашем случае официант — это серверы Telegram. Твоё сообщение сначала улетает к ним, они складывают его в очередь для нужного бота, а программа бота забирает сообщение оттуда, готовит ответ и отдаёт обратно серверам Telegram. А те уже доставляют ответ тебе в чат.
Bot API — набор HTTP-запросов, через которые твоя программа общается с серверами Telegram: получает сообщения и отправляет ответы.
Этот «язык», на котором программа разговаривает с официантом-Telegram, и называется Bot API. Не пугайся слова API: это просто строгий список того, что можно попросить у Telegram и в каком виде. «Дай мне новые сообщения», «отправь вот этот текст вот этому человеку», «покажи кнопку» — всё это отдельные запросы Bot API.
Путь одного сообщения по шагам
Давай проследим, что происходит, когда ты пишешь боту «Привет». Запомни эту цепочку — она лежит в основе вообще всего, что мы будем делать дальше.
- Ты набираешь «Привет» и жмёшь отправить. Сообщение уходит с твоего телефона на серверы Telegram.
- Telegram видит, что сообщение адресовано боту, и кладёт его в «ящик» этого бота.
- Программа бота спрашивает у Telegram: «Есть что-нибудь новое для меня?» — и забирает твоё «Привет».
- Код бота смотрит на сообщение и по своим правилам решает, что ответить, например «И тебе привет!».
- Бот отправляет этот ответ через Bot API обратно на серверы Telegram.
- Telegram доставляет ответ тебе в чат. Ты видишь сообщение от бота.
Вся эта цепочка проскакивает за доли секунды, поэтому тебе кажется, что бот отвечает мгновенно. На самом деле сообщение успело сгонять туда-обратно между твоим телефоном, серверами Telegram и программой бота.
Откуда бот узнаёт, что новое сообщение именно для него
Хороший вопрос: ботов миллионы, как Telegram понимает, какому из них отдать твоё «Привет»? Ответ — по токену.
Токен — секретный ключ вида 123456:ABC..., который Telegram выдаёт боту и по которому отличает его от других; его нельзя публиковать.
Токен — это как пароль от аккаунта бота. Когда твоя программа спрашивает у Telegram «есть что-то новое?», она прикладывает токен, и Telegram понимает: «А, это запрос от Цыплёнка-помощника, вот его сообщения». Если кто-то узнает твой токен — он сможет управлять твоим ботом, читать переписку и слать сообщения от его имени. Поэтому токен никогда не выкладывают в открытый код и не показывают друзьям. Мы ещё вернёмся к этому в разделе про ошибки.
Разбираем на примерах
Пример 1. Как рождается бот: BotFather и токен
Бота нельзя просто создать кнопкой «Регистрация». Его регистрируют через особого бота — он называется BotFather (по-русски «бот-отец»).
BotFather — официальный бот Telegram, через которого создают новых ботов и получают для них токен.
Диалог с ним выглядит примерно так — это просто переписка в Telegram, никакого кода:
Ты: /newbot
BotFather: Хорошо! Как назовём бота? (это имя увидят люди)
Ты: Цыплёнок-помощник
BotFather: А теперь придумай username, он должен заканчиваться на 'bot'.
Ты: chick_helper_bot
BotFather: Готово! Вот токен твоего бота:
123456789:AAEhBOweik6ad-z...держи в секрете!Результат: в чате BotFather пришлёт тебе длинную строку — это и есть токен. С этого момента бот существует: его уже можно найти в поиске по username. Но пока он мёртвый — на сообщения не отвечает, потому что программы, которая им управляет, ещё нет. Эту программу мы и начнём писать в следующих уроках.
Пример 2. Как программа забирает сообщения: polling
Мы говорили, что программа бота сама спрашивает у Telegram «есть что-то новое?». У этого способа есть название — polling (от англ. poll — «опрашивать»).
Polling — способ получать обновления, при котором бот сам регулярно спрашивает у Telegram «есть ли что-то новое?».
Представь, что ты ждёшь важную посылку и каждые пять минут заглядываешь в почтовый ящик: пусто, пусто, пусто… а потом — есть! Polling работает так же: программа в цикле снова и снова стучится к Telegram и спрашивает про новые сообщения. Каждое такое сообщение или нажатие кнопки называется обновлением.
Update (обновление) — единица входящих данных от Telegram: новое сообщение, нажатая кнопка или другое событие.
Есть и второй способ — webhook, когда уже не бот спрашивает, а Telegram сам присылает обновление на адрес твоего сервера, как только оно появилось.
Webhook — способ получать обновления, при котором Telegram сам присылает их на адрес твоего сервера.
Разница как между двумя способами узнать о новом сообщении: либо ты сам постоянно проверяешь чат (polling), либо телефон сам пиликает уведомлением, когда что-то пришло (webhook). В курсе мы почти везде будем использовать polling — он проще и не требует своего «адреса в интернете». А webhook прибережём на самый конец, для деплоя на сервер.
Пример 3. Из чего состоит обновление — заглянем внутрь
«Обновление» звучит абстрактно. На деле это просто аккуратный набор данных: кто написал, что написал, в какой чат. Давай для интуиции разберём такой набор обычным Python — без всякого Telegram, просто словарём. Это поможет почувствовать, что внутри обновления нет ничего страшного.
# Так примерно выглядит одно "обновление" от Telegram —
# мы упростили его до обычного словаря Python
update = {
"from": "Аня",
"chat_id": 555,
"text": "Привет",
}
# Бот достаёт из обновления нужные кусочки
kto = update["from"]
tekst = update["text"]
# И по простому правилу решает, что ответить
if tekst == "Привет":
otvet = kto + ", и тебе привет! Я Цыплёнок-помощник."
else:
otvet = "Я пока знаю только слово \"Привет\"."
print(otvet)Вывод:
Аня, и тебе привет! Я Цыплёнок-помощник.
Видишь? Никакой магии. Бот достал из обновления текст и имя, сравнил текст со своим правилом и составил ответ. Настоящий aiogram сделает примерно то же самое, только обновление он сам получит от Telegram, а ответ сам отправит обратно. А мы будем лишь описывать правила: «на такое сообщение — такой ответ».
Пример 4. Кто отправляет ответ: знакомимся с действующими лицами
В коде на aiogram нам встретятся два главных объекта. Знакомиться с ними поближе будем в следующих уроках, но имена полезно запомнить уже сейчас, потому что они пройдут через весь курс.
Bot — объект aiogram, который умеет отправлять запросы в Telegram: слать сообщения, фото, кнопки.
Dispatcher — объект aiogram, который принимает входящие обновления и раздаёт их нужным хэндлерам.
Вернёмся к ресторану. Объект Bot — это рука, которая выносит готовое блюдо: всё, что бот отправляет наружу (текст, картинку, кнопку), идёт через него. Объект Dispatcher (для краткости его обычно зовут dp) — это администратор зала: он смотрит на каждое входящее обновление и решает, какой функции его передать.
Хэндлер — функция-обработчик, которую aiogram вызывает в ответ на определённое сообщение, команду или нажатие кнопки.
А функции, которые в итоге готовят ответ, называются хэндлерами (от англ. handle — «обрабатывать»). Один хэндлер на команду /start, другой на нажатие кнопки, третий на обычный текст. Вся будущая программа бота — это, по сути, набор таких хэндлеров плюс Bot и Dispatcher, которые связывают их с Telegram. Файл с этим кодом мы по традиции назовём bot.py — он будет с нами до конца курса.
Частые ошибки и подводные камни
Эти грабли подстерегают почти каждого новичка. Прочитай сейчас — сэкономишь себе нервы потом.
1. Выложить токен на всеобщее обозрение
Самая частая и самая болезненная ошибка. Кто-то делает первого бота, радуется, выкладывает код на GitHub или скидывает скриншот в чат — а там виден токен. Всё, считай, пароль от бота утёк. Любой, кто его увидел, может слать сообщения от имени твоего бота. Токен — это секрет, как пароль от почты. Позже мы научимся хранить его в переменных окружения, чтобы он вообще не попадал в код. Пока просто запомни правило: токен никому не показываем.
2. Ждать, что бот напишет первым
Новички иногда создают бота и удивляются: «Я ему ничего не писал, а он молчит, сломался?». Нет, всё в порядке. Бот не может написать незнакомому пользователю первым — сначала человек должен сам начать диалог, обычно нажав кнопку «Старт». Это правило Telegram против спама.
3. Путать «бот создан» и «бот работает»
После разговора с BotFather бот уже существует и находится в поиске. Но он будет молчать, пока не запущена программа, которая им управляет. Это как купить телефон, но не вставить симку: устройство есть, а звонить пока нечем. Сам факт регистрации не делает бота «живым» — оживляет его наш код.
4. Думать, что код бота крутится «внутри Telegram»
Это не так. Telegram только передаёт сообщения туда-обратно (помнишь официанта?). Сама программа работает там, где ты её запустил: на твоём компьютере или на сервере. Если ты выключишь компьютер с запущенной программой — бот замолчит, потому что «кухня» закрылась, хотя официант-Telegram на месте.
5. Бояться слов «сервер» и «API»
Эти слова звучат серьёзно, но за ними простые идеи. Сервер — это просто компьютер, который работает постоянно, чтобы программа не выключалась. API — это список запросов, которые можно отправлять Telegram. Не нужно знать всё про серверы, чтобы написать бота: на старте программа спокойно крутится прямо на твоём ноутбуке.
Мини-практика: нарисуй путь сообщения
Кода тут не будет — этот урок про понимание. Зато упражнение закрепит главную картинку курса. Возьми лист бумаги или заметки в телефоне и сделай вот что.
- Нарисуй четыре «коробочки» в ряд: Ты (телефон), Серверы Telegram, Программа бота. Между ними оставь место для стрелок.
- Стрелками покажи путь сообщения «Привет», которое ты отправил боту: от тебя — к Telegram — к программе. Подпиши над стрелкой, что именно передаётся.
- Теперь стрелками обратно покажи путь ответа бота «И тебе привет!»: от программы — к Telegram — к тебе.
- На стрелках между программой и Telegram подпиши Bot API — ведь именно по нему они общаются.
- Рядом с программой бота нарисуй маленький ключик и подпиши токен — то, без чего Telegram не узнает твоего бота.
А теперь вопрос на подумать (ответь себе словами): если ты выключишь компьютер, на котором запущена программа бота, какая из коробочек «погаснет» и почему бот перестанет отвечать? Если ты можешь объяснить это другу — значит, главную идею урока ты усвоил.
Итоги
Соберём всё в одну картину.
- Бот — это аккаунт в Telegram, которым управляет программа, а не человек; он отвечает по правилам, которые пишешь ты.
- Бот общается с тобой не напрямую: посередине стоят серверы Telegram — как официант между столиком и кухней.
- Язык этого общения — Bot API: список запросов «дай новые сообщения», «отправь ответ» и так далее.
- Telegram узнаёт твоего бота по токену — секретному ключу, который нельзя никому показывать.
- Программа забирает сообщения через polling (сама спрашивает) или webhook (Telegram присылает сам); каждое сообщение — это обновление.
- В коде на aiogram нам встретятся
Bot(отправляет наружу),Dispatcher(раздаёт обновления) и хэндлеры (обрабатывают их).
В следующем уроке мы перейдём от теории к делу: создадим нашего Цыплёнка-помощника через BotFather, получим токен, поставим библиотеку aiogram и напишем первые строчки в файле bot.py. Уже совсем скоро твой бот ответит на первое /start — и ты увидишь, как вся эта цепочка с официантом оживает по-настоящему.