События записываются, webhook работает, заявки в базе. Но чтобы узнать о новой заявке, нужно заходить в базу или логи. Подключим Telegram — и уведомления будут приходить прямо в чат.
Когда посетитель отправляет заявку, происходит цепочка из нескольких шагов. Попробуйте расставить их в правильном порядке:
Telegram-бот — это не отдельный сервис. Это просто HTTP-запрос к Telegram Bot API из нашего приложения. Никаких дополнительных контейнеров или серверов.
Сначала попросим агента сделать всю техническую часть — подключить Telegram, настроить отправку уведомлений и добавить переменные окружения:
Добавь Telegram-уведомления при создании
новой заявки. Что нужно сделать:
1. При создании лида (lead_created) отправлять
сообщение в Telegram с именем, контактом
и временем заявки.
2. Токен бота хранить в переменной окружения
TG_BOT_TOKEN, идентификатор чата — в TG_CHAT_ID.
Добавь их в .env и .env.example.
3. Если Telegram недоступен — залогировать ошибку,
но не ронять основной процесс. Заявка должна
сохраниться в базу в любом случае.
4. Формат сообщения:
Новая заявка!
Имя: ...
Контакт: ...
Время: ...
Теперь нужно создать самого бота и получить токен. Это делается в Telegram через специального бота @BotFather:
/newbotmy_landing_notify_bot) — должен заканчиваться на bot123456:ABC-DEF...Впишите токен в .env в поле TG_BOT_TOKEN.
Токен — это ключ к боту. Но нужно ещё знать, куда отправлять сообщения. Для этого нужен chat_id — идентификатор чата.
Я написал боту сообщение в Telegram.
Помоги получить chat_id — идентификатор чата,
куда отправлять уведомления.
Токен бота: <ваш токен из .env>.
Впишите полученный chat_id в .env в поле TG_CHAT_ID и попросите агента отправить тестовое уведомление.
user@computer:~/landing$ docker compose up --buildОткройте лендинг, отправьте тестовую заявку (с новым контактом, чтобы прошла уникальность). В Telegram должно прийти уведомление.
Базовое уведомление работает. Но Telegram-бот может быть гораздо полезнее. Попросите агента добавить:
Добавь поле status в таблицу Lead:
- new (по умолчанию)
- contacted
- rejected
Создай миграцию базы данных.
Под каждым уведомлением о новом лиде добавь
inline-кнопки:
- "Связался" → меняет статус на contacted
- "Не актуален" → меняет статус на rejected
Для обработки нажатий используй Telegram
Bot API callback_query.
Добавь команды бота:
/leads — показать последние 5 заявок
со статусами
/leads week — заявки за последнюю неделю
/stats — воронка: сколько посещений, кликов,
заявок за последние 7 дней
Из простого уведомления — мини-CRM прямо в мессенджере. Всё одним промптом.
Мы добавили новое поле в таблицу и новую логику. Чтобы всё заработало на сервере, нужно выполнить шаги в правильном порядке:
Добавьте переменные окружения на сервер:
Добавь переменные TG_BOT_TOKEN и TG_CHAT_ID
в docker-compose.yml для продакшена.
Значения должны читаться из .env файла.
user@computer:~/landing$ ./scripts/deploy.sh <ваш-IP> ~/.ssh/my-project deployПосле деплоя отправьте заявку через сайт по IP-адресу — уведомление должно прийти в Telegram.
Перед коммитом попросите агента обновить README:
Обнови README.md — добавь раздел про Telegram:
как создать бота, какие переменные окружения
нужны, какие команды бот поддерживает.
После этого сделай коммит.
Сейчас сайт доступен по IP-адресу через http. Это работает, но выглядит не очень: браузер показывает «Not Secure», а запомнить набор цифр сложнее, чем имя. Подключим домен и сертификат.
Домен (например, freshbox.ru) — это человекочитаемый адрес сайта. Когда вы вводите его в браузере, специальная система (DNS) переводит имя в IP-адрес вашего сервера. То есть домен — это просто красивая ссылка на тот же сервер.
Домены продают регистраторы. Вот несколько популярных:
Выберите имя, оплатите — и домен ваш.
После покупки нужно указать, что домен ведёт на ваш сервер. Для этого в панели регистратора добавьте DNS-запись:
Изменения DNS могут применяться от нескольких минут до нескольких часов.
Получать сертификат можно только после того, как DNS заработает — сертификат выдаётся на домен, и сервис проверяет, что домен действительно ведёт на ваш сервер.HTTPS — это зашифрованное соединение между браузером и сервером. Без него браузер показывает предупреждение «Not Secure». Бесплатный сертификат можно получить через Let's Encrypt — попросите агента настроить:
Создай скрипт scripts/setup-ssl.sh, который
подключается к серверу по SSH и настраивает
HTTPS с бесплатным сертификатом Let's Encrypt
через Certbot.
Параметры: IP сервера, SSH-ключ, домен.
Настрой Nginx, чтобы он перенаправлял
http на https автоматически.
Сделай скрипт исполняемым.
user@computer:~/landing$ ./scripts/setup-ssl.sh <ваш-IP> ~/.ssh/my-project <ваш-домен>После настройки сайт будет доступен по адресу https://ваш-домен.ru с зелёным замочком в браузере.
Мы прошли полный путь от пустого проекта до рабочего лендинга:
Каждый шаг мы деплоили на сервер — к концу курса это стало рутиной.
Главное, чему мы научились: формулировать задачу так, чтобы AI-агент мог её выполнить. Точный промпт → хороший результат. Это и есть вайб-кодинг.