Практика: свой бот заявок для своего заказчика

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

Чему научишься в этом уроке:
• собрать бота заявок под своего заказчика от сценария до сервера;
• проверить его вживую по чек-листу П1, включая ошибки ввода;
• сдать комплект: ссылку на бота, снимок файла заявок, README и статус службы.

Выбери заказчика

Лучше настоящий: студия, мастерская, репетитор. Если пока никого нет, возьми образец «Кодиума» и поменяй одну вещь: вместо курсов будут твои услуги. Сценарий тот же: /start, согласие, имя, телефон, выбор кнопками, уведомление владельцу и строка в файле на Яндекс Диске.

Поменял поля, поменяй и текст согласия. В прогоне первая версия согласия упоминала почту и отчество, которых бот вообще не спрашивал. Согласие должно перечислять ровно те данные, что собирает твой бот, цель и где они хранятся. Попроси агента сверить текст с полями в коде, а потом прочитай его сам.

Карта П1 из пяти шагов слева направо с номерами уроков: сценарий и согласие (2.2), сборка с агентом и тесты (2.3), Яндекс Диск и миграция (2.4), сервер и служба (2.5), передача и кейс (2.6). Под картой полоса «Живая проверка в Telegram» под каждым шагом.

Чек-лист П1

Иди по пунктам. Каждый пункт отмечай только после проверки в Telegram, а не после слов агента «готово».

  1. Сценарий записан: согласие первым шагом, какие шаги, какие кнопки, какие данные и зачем каждое (урок 2.2).
  2. Проект в своей папке с .venv, задание агенту с пометкой «свежие версии» (урок 2.3). Тесты проходят.
  3. Кнопка «Не согласен» вежливо отказывает, дальше ничего не спрашивает и ничего не сохраняет.
  4. Неверный телефон отбивается: проверь на 12345.
  5. Имя проверяется: пустое, длиннее 60 символов и начинающееся с «/» бот не принимает.
  6. Токен Яндекса с правами чтения и записи; вторая заявка дописывается в zayavki.xlsx, первая на месте (урок 2.4).
  7. База с новым полем не падает: миграция при старте. Имени и телефона в базе нет, в pending.jsonl тоже.
  8. Бот на сервере за рубежом, локальная копия остановлена, systemctl status bot-kodium показывает active (running) после перезагрузки, время согласия по Москве (урок 2.5).
  9. README и инструкция владельцу готовы, токены на заказчике (урок 2.6).

Как давать задания агенту

Лучше несколько коротких заданий, чем одно огромное: в прогоне каждое занимало 3–11 минут работы агента. После каждого задания проверяй вживую. Если агент начал «чинить» обходными файлами или советует сменить версию Python, останови его и дай точную ошибку из терминала. Так было в прогоне на втором задании, и этот случай разобран в уроке 2.3.

Для сметы: весь П1 в прогоне стоил около 0,3 $ расхода модели через CloseRouter, это около 54 минут работы агента за 10 заданий. Твой расход будет другим: смотри его в кабинете CloseRouter, а не в /cost. Сервер Timeweb оплачивается отдельно, по часам.

Порядок работы на неделю

На П1 в плане курса отведены недели 3–5. Если ты дошёл до практики, удобно разбить её на четыре захода, каждый со своей живой проверкой:

  1. Первый заход: сценарий с согласием первым, .venv, сборка у себя, тесты, проверка «Не согласен», неверного телефона и имени.
  2. Второй: Яндекс Диск, две заявки подряд в файле, миграция базы, имя и телефон вне базы.
  3. Третий: сервер, служба, перезагрузка, время по Москве.
  4. Четвёртый: README, инструкция владельцу, кейс, снимки для сдачи.

Застрял на одном заходе дольше вечера? Опиши в чате курса, что видишь, что делал и какую ошибку показал терминал. Точная ошибка помогает и наставнику, и агенту, а «не работает» не помогает никому.

Перед снимками для сдачи закрой телефоны, токены и адрес сервера. Это касается и файла zayavki.xlsx: в нём настоящие данные людей, даже если заявки тестовые от знакомых.

Если не получилось

  • pip падает на aiohttp или pydantic-core → агент закрепил старые версии → .venv и «свежие версии, без привязки к старым».
  • «table applications has no column named consent_at» → поле добавлено в код, а база старая → попроси миграцию при старте, старые заявки не терять.
  • Перезапись файла на Диске даёт 500 → у токена нет права чтения → пересоздай токен с правами чтения и записи.
  • Первые заявки исчезли из zayavki.xlsx → скачивание не прошло, и бот создал файл заново → новый файл только при 404, при другой ошибке не загружать.
  • Бот молчит на сервере, в журнале таймауты Telegram → регион сервера → сервер за рубежом.
  • Имя вида «/startАнна» → в Telegram Web к тексту иногда приклеивается черновик → это особенность клиента, но бот всё равно должен отбить имя с «/».
  • Бот на сервере отвечает через раз, в журнале Conflict → у тебя на компьютере запущена вторая копия → закрой её.

Контрольный вопрос. Агент написал «Всё готово, тесты проходят». Что сделать перед тем, как отметить пункт чек-листа?

АПоверить агенту, тесты же зелёные
БПопросить агента написать ещё тесты
ВПроверить вживую в Telegram: в прогоне тесты с подменённым Диском не поймали затирание файла
ГСразу выложить на сервер

Подсказка: Вспомни, что поймала живая проверка, а тесты пропустили.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Контрольный вопрос. Ты отправил боту имя «/start Анна», и он его принял. Какой пункт чек-листа не выполнен?

АПроверка телефона
БМиграция базы
ВЧасовой пояс
ГПроверка имени

Подсказка: Какие три вида имени бот должен отбивать?

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Контрольный вопрос. После второй тестовой заявки в zayavki.xlsx осталась одна строка, первая пропала. Что поручить агенту?

АКаждый раз создавать новый файл с датой в имени
БСледовать перенаправлению при скачивании; новый файл только при 404, при другой ошибке не загружать
ВХранить заявки на сервере вместо Диска
ГОтключить скачивание файла с Диска

Подсказка: Вспомни, что отдаёт Диск по ссылке на скачивание и как код это понял.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Задание. МИССИЯ «Мой бот заявок». 1. Выбери заказчика и запиши сценарий бота с согласием первым шагом. 2. Собери бота с Claude Code по чек-листу П1. 3. Сломай и почини: нажми «Не согласен», отправь неверный телефон и имя с «/». Бот должен отбить все три случая. 4. Выложи на сервер за рубежом, перезагрузи сервер и проверь, что бот поднялся. 5. Подготовь README. Принято, если: дана ссылка на бота (t.me/…), он отвечает на /start кнопками согласия; приложен снимок чата с тремя отбитыми случаями; снимок zayavki.xlsx на Диске минимум с двумя заявками (телефоны закрыты); README.md без значений токенов; снимок systemctl status bot-kodium со строкой active (running) после перезагрузки.

Подсказка: Сначала добейся рабочего бота у себя, потом переноси на сервер: так проще понять, где поломка.

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Что дальше

П1 закрыт: у тебя есть бот, кейс и первые сообщения заказчикам. В паттерне П2 бот перестанет быть одиночкой: учимся связывать сервисы между собой, чтобы данные сами ехали из формы в таблицу и отчёт.

Итог:
• собран свой бот заявок по чек-листу П1 и проверен вживую;
• бот живёт на сервере и пережил перезагрузку;
• комплект сдачи готов: ссылка, файл заявок, README, статус службы.

← Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд → П2. Интеграции

Школа Виктора Комлева