Мне нужна была CRM. Bitrix24 — от 2000₽/мес. AmoCRM — от 1500₽/мес. Для 5–10 лидов в месяц это абсурд.
Я посмотрел на свой Telegram. Групповые чаты с топиками — это по сути тикет-система: один топик = один лид, вся переписка в одном месте, есть поиск и уведомления на телефон. Оставалось добавить только входную точку — бота, который квалифицирует лид и создаёт топик автоматически.
Я написал такого бота на Python и задеплоил его на Yandex Cloud Functions. Получилась мини-CRM, которая обходится в 0 ₽ в месяц.
Важно: это не замена Bitrix или AmoCRM. Нет воронок, дашбордов и автоматических напоминаний. Решение подойдёт соло-предпринимателям и небольшим командам, которые обрабатывают до 20 лидов в месяц и не хотят платить за CRM, которую используют на 10%.
Что получится
Схема работы:
Пользователь нажимает CTA на сайте → переходит в бота → отвечает на два вопроса кнопками → бот создаёт топик в админской группе с карточкой лида → далее переписка ведётся через бота, а вся история хранится в топике.
Стоимость:
Cloud Function: 0 ₽ (1 млн вызовов в месяц бесплатно)
Object Storage: 0 ₽ (1 ГБ бесплатно)
DNS + SSL-сертификат: не нужны — API Gateway не требуется, функция доступна по HTTPS напрямую через allow-unauthenticated-invoke. Этого достаточно для Telegram webhook.
Как написать бота для приёма заявок в Telegram на Python
Почему без фреймворков
Такие библиотеки, как aiogram и python-telegram-bot, отлично подходят для сложных ботов. Но для Yandex Cloud Functions они избыточны:
- Cold start. Тяжёлые фреймворки добавляют 1–3 секунды к первому вызову. httpx импортируется почти мгновенно.
- Polling не нужен. Cloud Functions работают по webhook — бот с polling-режимом просто не запустится.
- Роутинг не нужен. У нас одна точка входа и два типа апдейтов.
if/elifхватает.
Весь API-слой — всего 57 строк кода. Это лёгкая обёртка над Telegram Bot API.
Почему copy_message, а не forward_message? При пересылке Telegram добавляет надпись «Переслано от…» — выглядит неряшливо. copy_message отправляет чистое сообщение без маркера.
Точка входа: webhook-хендлер
Cloud Function получает HTTP-запрос от Telegram. Первое — валидация секретного токена.
Параметр secret_token задаётся при установке webhook. Telegram присылает его в каждом запросе. Без проверки любой может отправлять фейковые апдейты на URL вашей функции.
Квалификация лида: inline-кнопки
По команде /start бот задаёт два вопроса. Первый — о сфере бизнеса.
Есть защита от дублей: если пользователь уже оставлял заявку, бот не создаёт новый топик, а предлагает писать в существующий. Один топик — один клиент.
Трюк с callback data: stateless-квалификация
Cloud Functions — stateless. Каждый вызов начинается с чистого листа. Чтобы не обращаться к хранилищу при каждом клике, я кодирую ответ Q1 прямо в callback data Q2.
Когда пользователь нажимает кнопку Q2, callback приходит в виде q2:sales:ecommerce — оба ответа в одной строке. На «счастливом пути» нет обращений к хранилищу.
Ограничение: callback data — максимум 64 байта. Этого хватает для предустановленных вариантов. Но для опции «Другое» (свободный ввод) приходится использовать Object Storage: временный файл state/{chat_id}.json, который удаляется после завершения.
Финализация: создание топика
После двух ответов бот создаёт топик в админской группе.
Двусторонний relay
Самая CRM-подобная функция. Вы отвечаете в топике — бот пересылает сообщение клиенту. Клиент отвечает боту — бот пересылает в топик.
Клиент видит обычный чат с ботом. Вы — организованный список лидов в группе. Каждый диалог — в своём топике, с историей и поиском.
Бонус: трекинг источника через /start
Команда /start поддерживает deep link: t.me/your_bot?start=website, ?start=habr, ?start=instagram. Бот получает это как /start website. Сейчас источник захардкожен как «website», но распарсить параметр и добавить в карточку лида — три строчки кода.
Мини-CRM на базе Telegram: возможности и ограничения
Настройка группы
- Создайте supergroup в Telegram.
- Включите Топики (режим форума) в настройках группы.
- Добавьте бота как администратора с правами: Управление темами и Отправка сообщений.
Что вы получаете
- Один топик = один лид: вся переписка в одном месте.
- Поиск по лидам: Telegram ищет по тексту во всех топиках.
- Закреплённые сообщения: закрепите карточку лида в начале топика.
- Уведомления на телефон: не нужно отдельное приложение.
- Двусторонний relay: отвечаете в топике — клиент получает в боте, и наоборот.
Bitrix и AmoCRM стоят от 1500 ₽/мес. Для соло-основателей с 0–20 лидами в месяц мини-CRM на Telegram достаточно. Когда понадобятся воронки или командная работа — пора переезжать на полноценную CRM.
Claude Code: от идеи до работающего бота за одну сессию
Весь бот — от первой строки до работающего webhook — был написан и задеплоен за одну сессию с Claude Code. Я описал задачу: «Нужен Telegram-бот для квалификации лидов, деплой на Yandex Cloud Functions». Дальше Claude Code:
- Написал код бота (handler, API-обёртку, storage).
- Собрал zip-пакет с зависимостями.
- Задеплоил через
ycCLI на Cloud Functions. - Настроил webhook с secret token.
Claude Code использует кастомный навык для Yandex Cloud — набор команд yc CLI для работы с Object Storage, Cloud Functions, DNS и сертификатами. Навык открыт — его можно подключить к своему Claude Code и деплоить на Yandex Cloud голосом.
Как задеплоить Telegram-бота на Yandex Cloud Functions бесплатно
Что нужно заранее
- Аккаунт Yandex Cloud (free tier).
- Сервис-аккаунт с ролью
storage.editor. - Статические ключи доступа:
yc iam access-key create --service-account-name <sa>. - Приватный бакет Object Storage для состояния бота.
- Токен бота от @BotFather.
- Chat ID группы и ваш Telegram user ID.
Шаги:
- Собрать пакет.
- Загрузить в Object Storage.
- Создать функцию.
- Задеплоить версию.
- Открыть публичный доступ.
- Установить webhook.
- Протестировать: откройте бота в Telegram, отправьте
/start.
Подводные камни: что пошло не так
1. «Not enough rights to create a topic»
Бот добавлен как админ, но не создаёт топики. Причина: нужно явное разрешение «Управление темами». Добавить в админы — недостаточно. Проверьте каждое право отдельно.
2. Privacy mode блокирует relay
По умолчанию боты в группах видят только команды (сообщения с /). Для relay нужно видеть все сообщения. Решение: @BotFather → /setprivacy → Disable.
3. Лимит 128 символов на название топика
Telegram молча обрезает длинные названия. Если Q1 и Q2 содержат много текста, название топика станет неинформативным. Решение — обрезать явно в коде.
4. Callback data — максимум 64 байта
Паттерн q2:sales:ecommerce влезает. Но при свободном вводе callback не подходит. Поэтому «Другое» переключается на Object Storage для хранения промежуточного состояния.
5. Cold start ~2 секунды
Первый вызов после простоя — медленный. httpx импортируется быстро, но boto3 весит ~30 МБ и тормозит. Не критично: Telegram ждёт ответ 60 секунд. Для ускорения можно заменить boto3 на прямые HTTP-запросы к S3 API.
6. Безопасность: секреты в переменных окружения
В статье секреты передаются через --environment. Это просто, но нужно понимать риски.
Что хранится:
- BOT_TOKEN: полный контроль над ботом — чтение и отправка сообщений.
- WEBHOOK_SECRET: возможность слать фейковые апдейты на функцию.
- AWS_ACCESS_KEY_ID + SECRET: доступ к бакету с маппингами (chat_id пользователей).
- ADMIN_GROUP_ID, ADMIN_USER_ID: не секреты — просто числа, без токена бесполезны.
Единственный критичный секрет — BOT_TOKEN. Остальное без токена бесполезно: webhook secret проверяется только через бота, а S3-ключи дают доступ к файлам с chat_id.
Кто может увидеть env vars:
- Пользователи Yandex Cloud с ролью
functions.editorилиadminна вашу папку. - Те, у кого доступ к вашей машине — команда попадает в
~/.zsh_history.
Если вы единственный пользователь в облаке и работаете на своём устройстве — реальный вектор атаки отсутствует. Для соло-проекта это приемлемый компромисс.
Когда стоит перейти на Yandex Lockbox:
- В проекте появились другие люди с доступом к облаку.
- Бот обрабатывает чувствительные данные (платежи, персональные данные).
- Вы используете CI/CD, где логи команд могут сохраняться.
Lockbox бесплатен для первых 3 секретов. Но для соло-бота с 5 лидами в месяц --environment достаточно.
Мини-CRM в Telegram: бот для квалификации лидов + группа с топиками для переписки. 0 ₽ в месяц, 0 инфраструктуры, работает с телефона.
Приём лидов: Telegram-бот с inline-кнопками.
Хранение и переписка: топики в Telegram-группе.
Связь: двусторонний relay через бота.
Инфраструктура: Yandex Cloud Functions (бесплатно), Object Storage (бесплатно).