Когда смотришь на чужие кейсы “поднял 100к на боте”, кажется, что там либо огромная аудитория, либо какая‑то магия маркетинга. На деле часто всё намного приземлённее: есть конкретная боль малого бизнеса, есть Python и неделя плотной работы. Складываем это вместе — и получается рабочий бот, за которого владелец честно платит деньги, потому что он экономит ему время и приносит клиентов.
В этой статье разберём реальный сценарий: Telegram‑бот для записи клиентов в небольшую онлайн‑школу. Бот собирает заявки, задаёт пару уточняющих вопросов, отправляет данные администратору и ведёт простую статистику. За неделю работы над проектом (от переговоров до сдачи и доработок) такой бот принёс 60 000 ₽. Покажу упрощённую версию кода и идеи, как эту базу можно развивать дальше.
Кейс: что за заказ и откуда деньги
Клиент — небольшая онлайн‑школа с тёплым трафиком из Instagram и рекомендаций. Запись на консультации шла через личные сообщения, и администратор тратил по нескольку часов в день, чтобы:
- задать одни и те же вопросы (имя, тема, уровень, удобное время);
- не потерять переписку среди других чатов;
- вручную переносить данные в таблицу и напоминать преподавателям.
Задача выглядела так: сделать Telegram‑бота, который:
- принимает команду /start или нажатие по кнопке “Записаться”;
- задаёт 3–4 вопроса и сохраняет ответы;
- отправляет итоговую карточку заявки администратору;
- дублирует данные в таблицу (чтобы не вести всё руками).
Клиенту важно было не “космический ИИ”, а то, чтобы заявки не терялись и админ перестал быть живым опросником. За это и была согласована фиксированная оплата 60 000 ₽ за разработку, развёртывание и недельный период поддержки.
Что умел бот в первой версии
Функционал на старте был максимально минималистичным:
- приветствие + короткое описание, чем бот помогает;
- последовательный опрос: имя, тема запроса, удобное время, контакт;
- подтверждение: “Вот как я понял вашу заявку”;
- отправка карточки в отдельный приватный чат администратору;
- запись всех заявок в простую таблицу (CSV/Excel), чтобы потом можно было анализировать источники и конверсию.
С точки зрения бизнеса это уже решало три проблемы: убирало рутину, снижало шанс потерять клиента и давало историю заявок в одном месте.
Упрощённый код бота на Python
Ниже — максимально простой пример на aiogram (можно использовать любой знакомый фреймворк). Это не продакшен‑код, а понятный скелет, который легко доработать.
import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
from aiogram.fsm.storage.memory import MemoryStorage
API_TOKEN = "ТОКЕН_БОТА"
ADMIN_CHAT_ID = 123456789 # сюда шлём заявки
bot = Bot(token=API_TOKEN)
dp = Dispatcher(storage=MemoryStorage())
class Form(StatesGroup):
name = State()
topic = State()
time = State()
contact = State()
@dp.message(Command("start"))
async def cmd_start(message: types.Message, state: FSMContext):
await state.clear()
await message.answer(
"Привет! Я бот записи на консультацию.\nКак вас зовут?"
)
await state.set_state(Form.name)
@dp.message(Form.name)
async def process_name(message: types.Message, state: FSMContext):
await state.update_data(name=message.text.strip())
await message.answer("Кратко опишите, что хотите разобрать на консультации.")
await state.set_state(Form.topic)
@dp.message(Form.topic)
async def process_topic(message: types.Message, state: FSMContext):
await state.update_data(topic=message.text.strip())
await message.answer("Когда вам удобно созвониться? (дата и время)")
await state.set_state(Form.time)
@dp.message(Form.time)
async def process_time(message: types.Message, state: FSMContext):
await state.update_data(time=message.text.strip())
await message.answer("Оставьте контакт: @username или номер телефона.")
await state.set_state(Form.contact)
@dp.message(Form.contact)
async def process_contact(message: types.Message, state: FSMContext):
await state.update_data(contact=message.text.strip())
data = await state.get_data()
await state.clear()
text = (
"📝 Новая заявка:\n"
f"Имя: {data['name']}\n"
f"Запрос: {data['topic']}\n"
f"Время: {data['time']}\n"
f"Контакт: {data['contact']}"
)
# клиенту — подтверждение
await message.answer("Спасибо! Ваша заявка отправлена админу, скоро с вами свяжутся.")
# админу — заявка
await bot.send_message(chat_id=ADMIN_CHAT_ID, text=text)
# тут можно ещё сохранить данные в файл/БД
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Чтобы не засорять статью, блок сохранения в файл можно вынести в отдельную функцию, которая дописывает строки в CSV или отправляет данные в API таблиц.
Как можно улучшить такого бота
После первой недели использования всегда появляются идеи доработок. В этом кейсе список получился таким:
- Хранение в базе.
Перенести заявки из файлов в нормальную БД (PostgreSQL/SQLite), чтобы удобнее строить отчёты и фильтровать запросы. - Статистика для владельца.
Добавить отдельную команду для администратора, которая показывает, сколько заявок пришло за день/неделю, откуда пользователи, какие темы самые частые. - Интеграция с календарём.
На основе выбранного времени создавать события в календаре преподавателей, чтобы не держать всё в голове. - Авто‑напоминания клиенту.
За несколько часов до консультации бот сам пишет пользователю: “Вы помните про созвон?” — это снижает количество “пропавших” клиентов. - Оплата/предоплата.
Подключить приём платежей: бот после записи предлагает внести предоплату, что сильно фильтрует “просто посмотреть”.
Каждая такая доработка — повод для дополнительного чека: сначала MVP за фиксированную сумму, потом оплачиваемые улучшения. Так один базовый бот постепенно превращается в целую мини‑систему автоматизации для конкретного бизнеса.