Монетизация, лимиты и что дальше

Цыплёнок-помощник уже умеет почти всё — теперь поговорим, как на таком боте можно заработать, во что нельзя упираться и куда расти дальше, когда курс закончится.

Бот, который приносит пользу людям, рано или поздно может приносить и деньги — но прежде чем мечтать о доходе, важно понять лимиты: ограничения, которые Telegram ставит каждому боту, чтобы серверы не падали под нагрузкой.

Зачем вообще об этом думать

Представь: ты доделал Цыплёнка-помощника, выложил его на сервер, скинул ссылку друзьям. Через неделю в боте уже не пять человек, а пятьсот — кто-то репостнул его в чат школы, кто-то в паблик про игры. Тебе пишут «слушай, а можешь добавить вот такую фишку?», «а сделай платную версию с напоминалками без рекламы». И тут в голове щёлкает: а ведь на этом и правда можно что-то поднять. Не «миллионы», но карманные деньги, опыт и строчку в портфолио — точно.

А ещё в этот же момент Цыплёнок впервые начинает тормозить. Ты пытаешься разослать всем пятистам пользователям утреннее «доброе утро, не забудь про домашку», и половина сообщений не доходит, в консоли мелькает странное Too Many Requests: retry after 30, бот на полминуты замолкает. Поздравляю — ты впервые уткнулся в лимиты Telegram. Это нормально и даже хорошо: значит, твой бот стал нужен реальным людям.

В этом уроке мы разберём две очень взрослые темы сразу. Первая — как на боте можно зарабатывать, честно и по правилам Telegram. Вторая — какие лимиты есть у Bot API и как писать код так, чтобы в них не врезаться. А в конце наметим, куда расти дальше, когда этот курс закончится. Вспомни, как мы собирали финального бота-помощника воедино — вот этот самый бот и станет твоей площадкой для всех экспериментов из этого урока.

Способы монетизации: как бот превращается в деньги

Сразу договоримся: монетизация — это не «впихнуть рекламу и ждать миллионов». Это честный обмен: ты делаешь что-то полезное, а люди или платят за это, или ты зарабатываешь на потоке людей. Думай про бота как про маленькое кафе. У кафе тоже есть разные способы жить: брать деньги за блюда, продавать абонементы постоянным гостям, повесить на стене афишу соседнего магазина за плату. У ботов всё то же самое, только цифровое.

1. Платные функции (freemium)

Самый честный и понятный способ. Базовый бот работает бесплатно, а за расширенные возможности человек платит. У Цыплёнка это могло бы выглядеть так: бесплатно — три напоминания в день, платно — сколько угодно, плюс напоминания с картинкой и без рекламной подписи. Слово freemium как раз про это: free (бесплатно) + premium (платно за extra). Большинство ботов, которыми ты пользуешься, живут именно так.

2. Telegram Stars и цифровые товары

У Telegram есть встроенная валюта — Telegram Stars (звёзды). Пользователь покупает звёзды внутри Telegram, а потом тратит их в ботах на цифровые товары: подписку, доступ к функции, стикерпак, что угодно «виртуальное». Для тебя это удобно тем, что не нужно подключать настоящий банк и платёжного провайдера — Telegram берёт оплату на себя. В aiogram для этого есть готовые методы отправки счёта (invoice) с валютой XTR — это код звёзд.

from aiogram.types import LabeledPrice

@dp.message(Command("premium"))
async def buy_premium(message: Message):
    await bot.send_invoice(
        chat_id=message.chat.id,
        title="Цыплёнок Премиум",
        description="Безлимитные напоминания на месяц",
        payload="premium_month",
        currency="XTR",            # XTR = Telegram Stars
        prices=[LabeledPrice(label="Премиум на месяц", amount=100)],
    )

Результат: в чате бот пришлёт красивую кнопку-счёт «Цыплёнок Премиум — 100 звёзд». Пользователь жмёт, оплачивает звёздами прямо в Telegram, а боту прилетает событие об успешной оплате, которое ты ловишь отдельным хэндлером и выдаёшь премиум. Поле payload — это твоя внутренняя метка, по которой ты потом поймёшь, что именно купили.

3. Реклама и партнёрства

Если у бота большая аудитория, в него можно аккуратно встраивать рекламу: «этот прогноз погоды вам принёс магазин зонтиков». Здесь важно не переборщить — бот, который заваливает рекламой, люди быстро удаляют. Хорошая реклама уместна и редка. Партнёрство — это когда ты договариваешься с каким-то сервисом: например, бот по подготовке к ЕГЭ рекомендует курсы, а тебе платят за каждого пришедшего ученика.

4. Донаты и подписка на «спасибо»

Самый добрый способ. Бот бесплатный, но внизу ответа есть кнопка «Поддержать Цыплёнка ⭐️». Кто хочет — кидает пару звёзд в благодарность. Не разбогатеешь, но на оплату сервера, который мы настраивали в прошлых уроках, вполне может хватить. Многие любительские боты живут именно на донатах.

Что делать нельзя

Telegram строго запрещает кое-что, и за это банят бота без разговоров: спам-рассылки тем, кто тебя не просил; продажа всего, что связано с обманом и азартом; сбор и перепродажа чужих данных. Правило простое: если ты постеснялся бы рассказать про эту схему маме — скорее всего, она против правил. Зарабатывай так, чтобы пользователю было хорошо.

Лимиты Telegram Bot API: почему бот иногда замолкает

Теперь про тормоза. Telegram — это огромная кухня, которая кормит сотни миллионов людей. Если каждый бот начнёт слать запросы со скоростью пулемёта, кухня встанет. Поэтому у каждого бота есть лимиты — ограничения на то, как часто и сколько он может слать. Вспомни нашу аналогию: бот — это официант, который бегает между тобой и кухней Telegram. Даже самый быстрый официант не может протолкнуть в окошко выдачи сто заказов в секунду — повара просто скажут «притормози».

Вот главные цифры, которые стоит держать в голове (Telegram иногда их меняет, но порядок такой):

СитуацияЛимит
Сообщения одному пользователюне чаще ~1 в секунду
Сообщения в одну группуне чаще ~20 в минуту
Всего сообщений ботомоколо 30 в секунду
Размер файла на отправкудо 50 МБ
Длина текста сообщениядо 4096 символов

Если ты превысил лимит, Telegram не падает и бота не банит — он вежливо отвечает ошибкой 429 Too Many Requests и говорит, через сколько секунд можно повторить (retry_after). Твоя задача — не игнорировать это, а подождать и повторить.

Пример: безопасная рассылка с паузами

Самая частая встреча с лимитами — массовая рассылка. Нельзя просто пробежать по списку из пятисот человек в цикле и слать всем подряд без передышки: на тридцатом сообщении прилетит 429. Правильно — делать маленькую паузу между отправками. Вот как это выглядит у Цыплёнка:

import asyncio
from aiogram.exceptions import TelegramRetryAfter

async def broadcast(user_ids, text):
    for user_id in user_ids:
        try:
            await bot.send_message(user_id, text)
        except TelegramRetryAfter as e:
            # Telegram попросил подождать e.retry_after секунд
            await asyncio.sleep(e.retry_after)
            await bot.send_message(user_id, text)
        # маленькая пауза, чтобы не упереться в лимит ~30/сек
        await asyncio.sleep(0.05)

Результат: в чате каждый из пользователей получит сообщение, но бот будет рассылать их по чуть-чуть, делая паузу 0.05 секунды между отправками. Если Telegram всё-таки попросит притормозить, исключение TelegramRetryAfter поймается, бот честно поспит ровно столько, сколько просили (e.retry_after), и повторит отправку. Так рассылка дойдёт до всех, просто чуть медленнее — это нормально.

Маленький помощник: считаем безопасную задержку

Давай прикинем на чистом Python, за сколько уйдёт рассылка, если соблюдать лимит. Этот сниппет можно запустить прямо тут — он ничего не шлёт, просто считает.

users = 500            # сколько человек в рассылке
per_second = 25        # держим запас под лимитом ~30/сек

delay = 1 / per_second           # пауза между сообщениями, сек
total_seconds = users * delay    # сколько займёт вся рассылка

print(f"Пауза между сообщениями: {delay:.3f} сек")
print(f"Вся рассылка на {users} человек: {total_seconds:.1f} сек")
print(f"Это примерно {total_seconds / 60:.1f} минут")

Вывод:

Пауза между сообщениями: 0.040 сек
Вся рассылка на 500 человек: 20.0 сек
Это примерно 0.3 минут

Видишь? Пятьсот человек — это всего двадцать секунд, если не спешить. А если попробовать всех за раз — упрёшься в 429 и в итоге выйдет дольше. Терпение тут реально быстрее жадности.

Где хранить, кому слать: SQLite по-прежнему наш друг

Список user_ids для рассылки берётся не с потолка — это те, кого Цыплёнок запомнил в базе, когда мы учили его сохранять пользователей в SQLite. Запрос предельно простой:

SELECT user_id FROM users WHERE wants_news = 1;

Результат: база вернёт id только тех, кто сам согласился получать новости. Слать рассылку только согласившимся — это и правило Telegram (нельзя спамить), и просто уважение к людям. Поле вроде wants_news ты заводишь сам, когда пользователь нажимает «подписаться».

Частые ошибки и подводные камни

  • Рассылка в лоб циклом без пауз. Самая популярная беда. Код вида for uid in users: await bot.send_message(uid, text) без единой паузы на большом списке гарантированно словит 429, и часть людей не получит сообщение вовсе. Всегда вставляй await asyncio.sleep(...) между отправками и лови TelegramRetryAfter.
  • Игнорировать retry_after. Когда Telegram говорит «подожди 30 секунд», а ты сразу долбишься снова — он злится сильнее и блокирует тебя дольше. Всегда уважай число из retry_after и спи ровно столько. Спорить с кухней бесполезно.
  • Сообщение длиннее 4096 символов. Если бот пытается отправить простыню длиннее лимита, Telegram отклонит её целиком, и пользователь не получит ничего. Длинный текст нужно резать на части. Особенно легко нарваться, если бот пересылает ответ от внешнего API или длинный список.
  • Спам без согласия. Соблазн велик: разослать всем-всем-всем рекламу новой функции. Но рассылка тем, кто на неё не подписывался, — прямой путь к жалобам и бану бота. Спрашивай согласие («хочешь получать новости?») и храни его в базе, как мы делали с wants_news.
  • Брать деньги мимо Telegram за цифровые товары. Если ты продаёшь подписку или доступ внутри бота, Telegram требует использовать его платёжную систему (Stars или платёжного провайдера), а не «переведи мне на карту в личку». За попытки обойти это бота могут заблокировать. Для цифровых товаров — Stars, и точка.

Мини-практика: подготовь Цыплёнка к жизни «по-взрослому»

Доведи бота до состояния, в котором его не страшно показать сотне людей. Делай по шагам:

  1. Безопасная рассылка. Добавь команду /news (только для админа — вспомни ADMIN_ID из переменных окружения), которая шлёт сообщение всем подписанным пользователям из базы, с паузой между отправками и обработкой TelegramRetryAfter. Проверь на паре тестовых аккаунтов.
  2. Согласие на новости. Сделай так, чтобы у пользователя была inline-кнопка «🔔 Подписаться на новости / 🔕 Отписаться», а флаг wants_news сохранялся в SQLite. Рассылка должна уходить только тем, у кого флаг включён.
  3. Кнопка благодарности. Добавь команду /donate, которая через send_invoice с валютой XTR предлагает поддержать Цыплёнка на 50 звёзд. Лови событие успешной оплаты и отвечай тёплым «Спасибо, ты помог Цыплёнку оплатить сервер! 🐤».
  4. Со звёздочкой. Напиши функцию, которая режет длинный текст на куски по 4000 символов и шлёт их по очереди, — пригодится, когда бот пересылает длинные ответы от API погоды или новостей.

Не пытайся сделать всё за один присест. Сначала добейся, чтобы работала простая рассылка двум тестовым аккаунтам, и только потом наворачивай согласие и оплату. Маленькими шагами — надёжнее.

Куда расти дальше

Курс подходит к концу, но твой путь — нет. Вот честная карта, куда двигаться, когда захочешь стать сильнее:

  • Webhook вместо polling. Мы всё время получали обновления через polling — бот сам спрашивал «есть новое?». Для серьёзной нагрузки переходят на webhook, когда Telegram сам стучится на твой сервер. Это быстрее и экономнее, но требует настоящего домена с HTTPS.
  • Базы посерьёзнее и ORM. SQLite хорош для старта, но когда пользователей много, смотрят в сторону PostgreSQL и работают с базой через ORM (SQLAlchemy) — это когда ты пишешь не SQL руками, а обращаешься к базе через объекты Python.
  • Очереди и фоновые задачи. Рассылку на десятки тысяч людей не делают прямо в хэндлере — её ставят в очередь (Celery, APScheduler) и выполняют в фоне, чтобы бот не подвисал.
  • Мониторинг и логи. Чтобы знать, что бот живой и не сыплет ошибками, подключают логирование и оповещения «бот упал — почини». Без этого на большом боте легко проспать поломку.
  • Свои идеи. Лучший способ расти — придумать свой бот под реальную боль. Бот для расписания твоего класса. Бот-судья для турнира по шахматам в вашем чате. Бот, который собирает мемы дня из любимых пабликов. Бот для учёта карманных денег. Любая из этих идей — это новый навык, который ты прокачаешь по дороге.

Итоги

Сегодня Цыплёнок-помощник стал почти настоящим продуктом. Ты узнал, что на боте можно честно зарабатывать — через платные функции (freemium), Telegram Stars за цифровые товары, аккуратную рекламу и донаты — и что Telegram строго против спама и обходных схем оплаты. Ты разобрался с лимитами Bot API: примерно 30 сообщений в секунду, ~1 в секунду одному человеку, 4096 символов на сообщение — и научился делать рассылку с паузами, ловить TelegramRetryAfter и уважать retry_after.

Главное, что ты унёс: лимиты — это не наказание, а правила вежливости на общей кухне, а монетизация — это честный обмен пользы на деньги, а не выжимание людей. Бот, которому рады пользователи, рано или поздно сможет и денег принести, и в портфолио лечь, и стать твоим первым настоящим проектом.

Ты прошёл весь путь: от первого /start до бота, который ведёт диалоги, помнит людей, ходит в интернет за погодой и новостями, рассылает напоминания и живёт на сервере. Цыплёнок вырос — и вырос ты. Теперь бери эти кубики и собирай свой бот, тот самый, которого ещё нет, но который очень нужен тебе и твоим друзьям. У тебя всё для этого есть. Удачи, автор! 🐤

Проверьте себя
1. Что такое модель монетизации freemium?
AБот полностью платный с первого дня
BБазовые функции бесплатны, а за расширенные возможности пользователь платит
CБот зарабатывает только на рекламе
DВсе функции бесплатны навсегда
2. Какую валюту указывают в send_invoice, чтобы принимать оплату в Telegram Stars?
AUSD
BRUB
CXTR
DBTC
3. Что означает ошибка 429 Too Many Requests от Telegram?
AБот забанен навсегда
BТокен бота недействителен
CБот слишком часто шлёт запросы и должен подождать перед повтором
DУ пользователя нет интернета
4. Как правильно делать массовую рассылку сотням пользователей?
AСлать всем подряд в цикле без пауз — так быстрее
BСлать с маленькими паузами между сообщениями и обрабатывать TelegramRetryAfter
CСлать сразу всё одним огромным сообщением
DЗапретить рассылку вообще
5. Кому можно слать рассылку по правилам Telegram?
AЛюбому, у кого есть Telegram
BВсем, кто хоть раз писал боту
CТолько тем, кто сам согласился получать рассылку
DТолько администраторам бота
6. Какой следующий шаг для роста бота под большую нагрузку упоминается в уроке?
AПерейти с polling на webhook
BУбрать все хэндлеры
CУдалить базу данных
DОтключить токен