# Заявки с сайта без подписки на n8n: своя сборка за 7 шагов на вайб-кодинге в 2026

> Как владелица турагентства собрала таблицу заявок с сайта, уведомления в Telegram и контроль сроков оплаты. Внутри пошаговая инструкция и готовые промпты.

Источник: https://vibeceh.ru/cases/zayavki-s-sajta-vmesto-n8n-telegram-bot
Автор: Сергей Мазур · опубликовано 2026-08-11

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

Я делюсь этим с удовольствием. Ниже пошаговая инструкция из семи шагов, к каждому есть готовый промпт: копируй его, описывай свою работу и собирай связку для себя. Такой подход пригодится не только турагентству, но и салону, автосервису, клинике, магазину или небольшой студии.

А началось всё с обычной ежедневной переписки.

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

Главная сложность не в самом запросе. Сложность в том, что данные живут в разных переписках. Отдельно приходится помнить, кому выслать подборку, кому напомнить об оплате и у кого скоро заканчивается срок брони.

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

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

## Что изменилось, когда заявки с сайта оказались в одной таблице?

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

Для меня это рабочий список на день, а не отчётная таблица.

В одной строке находится конкретная заявка. В соседних полях я вижу:

- кто собирается в поездку;
- какое направление обсуждаем;
- какой вариант выбран;
- подтверждена ли бронь;
- до какого срока нужна оплата;
- когда снова написать клиенту.

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

Раньше мне приходилось держать это в голове и возвращаться к старым сообщениям. Теперь порядок задаёт сама таблица. Я не стала добавлять туда всё подряд. Телефоны, бесконечные комментарии и историю каждого разговора можно хранить отдельно. В рабочем списке остаются поля, которые помогают принять следующее решение.

Самое заметное изменение произошло в конце дня. Я больше не закрываю ноутбук с мыслью, что могла кому-то не ответить. Открываю строки с ближайшими действиями и прохожу их по очереди.

## Почему свою систему заявок удобнее менять, чем готовый сервис?

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

![Пёс одобряет сравнение своей связки с готовым сервисом.](https://s3.regru.cloud/crossmark/statejnik/images/guides/zayavki-s-sajta-vmesto-n8n-telegram-bot/kadr-1.webp)

Это отраслевое правило легко потерять в универсальном статусе вроде «новая» или «закрытая». У меня заявка может быть живой, даже если клиент пока не оплатил. Но после срока оплаты её уже нельзя считать обычной активной заявкой. Её надо проверить.

Поэтому в таблице нужны не только статус брони, но и срок оплаты. Рядом полезно держать следующее напоминание. Так видно разницу между:

- клиент выбирает направление;
- варианты отправлены, решения нет;
- бронь ожидает оплаты;
- срок оплаты наступил, нужна проверка;
- бронь подтверждена.

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

Это не значит, что готовый сервис плох. Он удобнее, если нужна готовая CRM, роли сотрудников, отчёты и поддержка. Своя связка выигрывает там, где нужен небольшой рабочий инструмент без лишних экранов.

Мне важно, чтобы таблица помогала не хранить историю ради истории, а доводить каждую бронь до решения клиента и своего срока оплаты.

## Как проходит заявка с сайта от формы до Telegram и таблицы?

Сайт отправляет `POST` в опубликованный Google Apps Script. Функция `doPost(e)` принимает данные, добавляет новую строку в Google Таблицу и отправляет сообщение владельцу через Telegram Bot API. Для этого сценария webhook сайта и webhook Telegram выполняют разные задачи, а Telegram-вебхук вообще не обязателен для каждой входящей заявки.

Если цель - получить заявки с сайта, цепочка выглядит так:

```text
Форма сайта
   |
   | POST: имя, телефон, текст
   v
Google Apps Script doPost(e)
   |
   | запись новой строки
   v
Google Таблица
   |
   | sendMessage
   v
Telegram-чат
```

Обработка заявки с сайта начинается в момент отправки формы. Сайт не ждёт, пока я вручную перенесу данные из почты или мессенджера. Он передаёт их на URL опубликованного Apps Script.

Дальше `doPost(e)` извлекает параметры запроса. Скрипт проверяет обязательные поля, добавляет новую строку и отправляет уведомление методом `sendMessage`.

Пример строки в таблице:

```text
Дата и время | Имя | Телефон | Текст заявки
```

Пример сообщения:

```text
Новая заявка с сайта

Имя: Анна
Телефон: +7 999 123-45-67
Текст: Хочу узнать стоимость
```

Заявки с сайта в телеграм приходят через токен бота и `chat_id`. Сам бот не начинает личный диалог, поэтому сначала надо открыть его и отправить `/start`.

Не путай два webhook. Вебхук сайта принимает обращение от формы. Вебхук Telegram нужен, когда Telegram отправляет боту входящие обновления. В простой схеме сайт передаёт данные в Apps Script напрямую, поэтому для самого уведомления Telegram webhook не нужен.

Заявки с сайта интеграции здесь состоят из формы, Apps Script, Google Таблицы и Telegram-бота. Отдельный сервер и планировщик не требуются.

Согласно документации Google, когда программа отправляет приложению HTTP-запрос `POST`, Apps Script запускает `doPost` ([Web Apps | Apps Script](https://developers.google.com/apps-script/guides/web?hl=en)).

## Что поставить перед сборкой и сколько это стоит?

Для сборки нужны VS Code и Claude Code, который работает внутри редактора. Их ставят один раз: скачивают, запускают установку и входят в аккаунт. Установка занимает около четверти часа. Постоянный расход схемы - подписка Claude Pro с Claude Code за $20 в месяц. Дополнительно нужны Telegram-бот, Google Таблица, Web App и доступ к форме сайта.

VS Code нужен как рабочая папка с файлами. Писать программу руками не придётся. Ты описываешь задачу словами, а Claude Code создаёт и меняет нужные файлы внутри редактора.

Я бы не начинала со сложных терминов. Достаточно понимать две вещи:

- VS Code открывает папку проекта;
- Claude Code принимает описание задачи и собирает решение.

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

Перед сборкой подготовь:

- Telegram-бота, созданного через `@BotFather`;
- токен бота;
- `chat_id` рабочего чата;
- Google Таблицу;
- опубликованный Apps Script Web App;
- доступ к HTML-коду формы или настройкам CMS;
- политику обработки персональных данных и механизм согласия.

Токен храни как пароль. Не вставляй его в HTML-код сайта и не показывай в браузере.

## Как собрать приём заявок с сайта по шагам?

Сначала опиши помощнику свою рутину, затем создай структуру таблицы, подготовь бота, подключи `doPost(e)`, опубликуй Web App, свяжи форму с URL и отправь тестовую заявку. После каждого шага проверяй результат глазами. Готовый код копировать не нужно: помощник соберёт свою реализацию под поля конкретной формы.

![Кот закрывает морду лапой рядом с карточками первых шагов сборки.](https://s3.regru.cloud/crossmark/statejnik/images/guides/zayavki-s-sajta-vmesto-n8n-telegram-bot/kadr-2.webp)

Открой VS Code, создай пустую папку проекта и попроси помощника сначала задать вопросы, а не писать программу.

   

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

Создай [Google Таблицу](/concepts/google-tablicy) с понятными заголовками. Названия можно сразу показать помощнику, чтобы запись шла в правильном порядке.

   ```text
   Дата и время | Имя | Телефон | Текст заявки | Туристы | Направление | Выбранный вариант | Состояние брони | Срок оплаты | Следующее напоминание
   ```

Отдельные колонки помогают не смешивать разные этапы. Если клиент только выбирает направление, поле брони остаётся пустым или получает согласованный статус. Если срок оплаты прошёл, строка попадает на проверку.

В Telegram открой `@BotFather`, отправь `/newbot`, задай имя и сохрани выданный токен. Затем открой своего бота и отправь ему `/start`. Без этого бот не сможет начать личный диалог.

`chat_id` можно получить через помощника после тестового сообщения или с помощью Telegram API. Токен не отправляй в чат с клиентом и не вставляй в код страницы сайта.

   

Помощник должен объяснить порядок действий, но сам токен в ответе появляться не должен.

Теперь нужен Apps Script Web App с функцией `doPost(e)`. Он принимает `POST`, проверяет входящие поля, добавляет строку в Google Таблицу и отправляет сообщение через `sendMessage`.

   

В результате помощник должен показать, какие настройки заполнить, и объяснить, как функция добавляет следующую строку. Не принимай реализацию, если токен оказался в браузерном коде.

В Apps Script выбери публикацию как Web App, укажи выполнение от имени владельца и настрой доступ, который подходит для отправки формы. Скопируй URL опубликованного приложения.

   

Локальный запуск не заменяет проверку реального URL. Форма и сервис должны обращаться именно к опубликованному адресу.

Укажи URL Web App в настройках формы или попроси помощника изменить обработчик отправки. Имена полей на конкретном сайте придётся проверить отдельно. Нельзя считать, что форма уже отправляет `name`, `phone` и `message`.

   

Правильный результат - каждое поле формы попадает в свою колонку, а пустое или неизвестное поле не превращается в случайный текст.

Заполни форму тестовыми данными и проверь два результата: новая строка появилась в таблице, сообщение пришло в Telegram. Затем проверь, что в сообщении нет лишних данных и секретов.

    Apps Script doPost(e) -> Google Таблица -> Telegram. Составь чек-лист для одной тестовой отправки: какой HTTP-метод проверить, какие поля должны появиться в строке, как проверить дату и время, как убедиться в доставке сообщения и где посмотреть ошибку. Отдельно добавь проверку, что токен бота и доступ к таблице не видны в HTML-коде сайта." />

Так собирают программы без программиста, и называется это [вайб-кодинг](/concepts/vajb-koding).

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

Практикум полезен именно тем, что эту связку там проходят руками на своей задаче. На конкретной рутине, которая каждый день забирает внимание.

## Что проверить, когда заявка уже записывается в таблицу?

В строке должны появляться дата и время, имя, телефон и текст заявки, а данные должны добавляться следующей строкой, а не затирать предыдущую. Токен Telegram и доступ к таблице нельзя отдавать HTML-коду сайта. До запуска проверь цель обработки, согласие посетителя, политику и минимальный набор собираемых полей.

![Кот с поднятой лапой показывает чек-лист проверки заявки в таблице.](https://s3.regru.cloud/crossmark/statejnik/images/guides/zayavki-s-sajta-vmesto-n8n-telegram-bot/kadr-3.webp)

Пройди проверку по порядку:

- отправь одну тестовую заявку;
- найди новую строку в Google Таблице;
- сверь имя, телефон и текст с формой;
- проверь дату и время;
- убедись, что предыдущие строки остались на месте;
- проверь сообщение в Telegram;
- открой HTML-код страницы и найди там только публичный URL Web App, без токена;
- отправь пустую заявку и посмотри, что она отклоняется;
- отправь слишком длинный текст и проверь ограничение.

Имя и телефон относятся к персональным данным. Текст обращения тоже может содержать сведения о человеке. Форма должна объяснять цель обработки, список собираемых данных и порядок отзыва согласия. Передача одновременно в Google Таблицу и Telegram требует отдельной юридической проверки для конкретной схемы.

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

## Что делать, если заявка не приходит или появляется дважды?

Сначала проверь реальный HTTP-ответ, URL Web App, токен, `chat_id` и соответствие полей формы. Код `302` вместо финального `200 OK` ломает доставку, двойная отправка создаёт дубли, а частые чтения таблицы могут привести к `429`. Повторная отправка после сбоя Telegram и полноценная идемпотентность требуют отдельной разработки.

**Сайт получает `302` вместо `200 OK`.** Такое бывает после публикации Apps Script или при обращении не к тому URL. Проверь production-ссылку и ответ настоящего HTTP-запроса, а не только ручной запуск функции.

**Одна заявка появляется дважды.** Проверка «прочитать таблицу, найти совпадение, потом сделать append» ненадёжна при двух параллельных запусках. Добавь уникальный `request_id`, который приходит от сайта, храни его в отдельной колонке и отклоняй повторный ID.

 поиск совпадения -> append и объясни, почему два параллельных запуска могут пройти проверку одновременно. Предложи безопасную схему с уникальным request_id, отдельной колонкой и защитой повторной отправки. Не удаляй существующие заявки и сначала покажи список изменений." />

**Таблица отвечает `429`.** Причина может быть в большом количестве чтений за короткое время, а не в числе строк. Не читай весь лист перед каждой записью. Используй один append-запрос, а при временной ошибке добавь повтор с увеличивающейся задержкой.

**Telegram сообщает о недействительном токене.** Проверь, не осталось ли старого значения в настройках, затем выполни контрольный запрос `getMe` и отправь тестовое сообщение. Полный токен не выводи в журнал.

Есть ещё одна граница. Если запись в таблицу прошла, а Telegram не ответил, простого обработчика недостаточно для надёжной повторной доставки. Нужны статус уведомления, очередь повторов и идемпотентность. Я бы не называла такую защиту готовой, пока она не проверена отдельной разработкой.

У Telegram может быть только один активный webhook для бота. Не оставляй одновременно тестовый Apps Script, n8n и отдельный сервер: последний настроенный адрес перехватит обновления.

## Сколько стоит своё решение и когда лучше взять готовое?

Сам маршрут через Apps Script и Google Sheets не требует отдельной платы за обычное использование API, но Claude Pro с Claude Code стоит $20 в месяц. Готовые варианты стоят от 0 ₽ в месяц у TGForm до 1000 ₽ в месяц у APInita, а настройка n8n стоит 3250 ₽ разово. Выбирай не только по цене, а по нужному уровню контроля.

| Вариант | Цена | Ограничение или состав |
|---|---:|---|
| Своя связка Apps Script + Google Таблица + Telegram | $20 в месяц за Claude Pro | Сборка и проверка своими силами, отдельного сервера нет |

| APInita, «Старт» | 1000 ₽ в месяц | До 2000 запусков сценариев в месяц |
| Настройка n8n | 3250 ₽ разово | Готовый workflow и инструкция, аккаунт n8n оплачивается отдельно |

Claude Pro с Claude Code - постоянная статья расходов собственной сборки. Официальная цена составляет $20 в месяц. Подтверждённой официальной цены в рублях для России нет, поэтому рублёвый эквивалент я не называю.

Google Sheets API при стандартном использовании доступен без дополнительной платы. При этом есть поминутные квоты, поэтому собственная связка не означает отсутствие технических ограничений.

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

Она не подходит, если нужны:

- полноценная CRM с карточками клиентов;
- сложная аналитика и воронки;
- непрерывная доступность с формальным SLA;
- готовая защита от спама;
- сложная ролевая модель;
- готовая юридическая схема передачи персональных данных;
- несколько каналов и маршрутов с большим числом условий.

## Что сделать сегодня, если не хочется разбираться в технологиях?

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

APInita собирает маршрут без программирования. Это вариант для тех, кому нужен визуальный конструктор. На странице сервиса заявлены маршруты между формой сайта, Telegram, Google Таблицами и CRM.

Если сайт сделан на Tilda, форма может отправлять данные в Telegram и Google Таблицы внутри подписки. Это проще, чем отдельная связка, но решение привязано к конкретному конструктору.

Третий путь - подрядчик. Он подходит, если нет желания разбираться с публикацией, доступами и проверками. Перед началом зафиксируй, где хранятся заявки, кому принадлежат аккаунты и что происходит при сбое.

Я бы начала с одной формы и одной таблицы. Не подключала бы сразу CRM, аналитику и несколько каналов. Неисправная форма уже приводила к потере клиентов на протяжении нескольких дней, пока проблему не заметили по сообщению клиента в Telegram.

На практикуме вайб-кодинг проходят руками на собственной задаче: от описания рутины до работающей проверки. Это помогает получить связку и научиться просить помощника о точечных изменениях.

## Вопросы и ответы

Для приёма заявок достаточно формы на сайте, опубликованного Apps Script, Google Таблицы и Telegram-бота. Форма отправляет данные, скрипт добавляет строку и посылает уведомление. Перед запуском проверь поля, права, токен, `chat_id`, согласие на обработку персональных данных и поведение при повторной отправке.

Подойдёт форма, которая собирает имя, телефон и текст обращения и умеет отправлять данные на внешний URL или передавать их обработчику сайта. Имена полей зависят от CMS, поэтому их надо проверить перед подключением.

Форма отправляет HTTP-запрос методом `POST` на URL опубликованного Google Apps Script Web App. В теле передаются значения полей. Функция `doPost(e)` принимает запрос и обрабатывает его.

Да, если получать уведомления в Telegram на телефоне. Бот отправляет сообщение в чат, но сначала владелец должен открыть бота и отправить `/start`, чтобы появился рабочий `chat_id`.

В описанной связке основным каналом служит Telegram. Отправку на почту можно добавить отдельным действием, но её надо проверить отдельно, чтобы ошибка почтового канала не мешала записи заявки в таблицу.

Сайт передаёт заявку в Apps Script, а скрипт вызывает Telegram Bot API методом `sendMessage`. Для отправки нужны токен бота, `chat_id` и текст сообщения.

Заявка приходит не прямо из браузера в Telegram. Сначала она попадает в Apps Script, затем записывается в Google Таблицу и после этого отправляется в Telegram. Такой порядок оставляет заявку в таблице даже при временной ошибке уведомления.

Для небольшой связки можно хранить их в [Google Таблице](/concepts/google-tablicy). В строке достаточно даты и времени, имени, телефона и текста обращения. Для турагентства дополнительно нужны направление, выбранный вариант, состояние брони, срок оплаты и напоминание.

Сначала определи минимальные поля формы, затем настрой таблицу, Apps Script и Telegram-бота. После подключения отправь тестовую заявку и проверь все этапы по отдельности.

Форма отправляет `POST`, `doPost(e)` принимает данные, проверяет поля, добавляет строку через append и вызывает `sendMessage`. Планировщик для такой схемы не нужен: передача начинается в момент отправки формы.

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

В этой схеме бот получает сообщение от Apps Script, а не саму форму. Скрипт формирует текст и передаёт его в `sendMessage` с нужным `chat_id`.

Да, если выбран Telegram-канал уведомлений. Создай бота через `@BotFather`, сохрани токен как пароль, отправь `/start` и получи `chat_id`.

Можно описать задачу Claude Code обычными словами. Помощник создаст обработчик и подскажет порядок действий, а тебе останется проверить поля, права, публикацию, таблицу и тестовую заявку.

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

Нет. Apps Script может принять `POST`, записать данные в Google Таблицу и отправить сообщение через Telegram. n8n стоит рассматривать, если нужен визуальный конструктор, много маршрутов или готовая настройка подрядчика.

Сократи количество чтений таблицы, используй append для новой строки и добавь повтор с увеличивающейся задержкой. Ошибка означает превышение квоты запросов, а не обязательно большой объём данных.

Добавь уникальный `request_id`, передаваемый формой, и проверяй его на сервере. Простая последовательность «прочитать таблицу, затем append» не защищает от двух параллельных отправок.

Укажи цель обработки, перечень собираемых данных и порядок отзыва согласия. Согласие должно быть отдельным и понятным. Для одновременной передачи данных в Google, Telegram и рабочий чат нужна отдельная юридическая проверка.

Решение не подходит тем, кому нужны сложная CRM, непрерывная доступность, развитая аналитика, защита от спама, несколько ролей и формальная схема обработки данных. В таких случаях лучше рассмотреть готовый сервис или отдельную разработку.

- [Web Apps | Apps Script](https://developers.google.com/apps-script/guides/web?hl=en)
- [Bots: An introduction for developers](https://core.telegram.org/bots)
- [Telegram Bot API](https://core.telegram.org/bots/api)
- [Method: spreadsheets.values.append](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/append)
- [Usage limits | Google Sheets](https://developers.google.com/workspace/sheets/api/limits)
- [Quotas for Google Services | Apps Script](https://developers.google.com/apps-script/guides/services/quotas?authuser=01&hl=en)
- [Федеральный закон № 152-ФЗ «О персональных данных»](http://pravo.gov.ru/proxy/ips/?docbody=&nd=102108261)
- [Согласие на обработку персональных данных](https://www.consultant.ru/document/cons_doc_LAW_61801/6c39959bc017ac80140621762d2ac59f6006b08c/)
- [APInita: тарифы](https://apinita.ru/prices)
- [APInita: форма сайта и интеграции](https://apinita.ru/products/lead)
- [Настройка автоматизации n8n](https://www.fl.ru/uslugi-freelancera/26909/nastroyka-avtomatizacii-n8n-zayavki-s-sayta-v-telegram-google-tablicu.html)
- [Claude: тарифы](https://claude.com/pricing?success=true)
- [Что такое план Pro?](https://support.claude.com/ru/articles/8325606-что-такое-план-pro)
- [Use Claude Code with your Pro or Max plan](https://support.anthropic.com/en/articles/11145838-using-claude-code-with-your-max-plan)
- [Telegram получает 302 вместо 200](https://stackoverflow.com/questions/79265270/telegram-integration-with-google-sheets)
- [Дублирование строк в Google Sheets](https://community.n8n.io/t/google-sheet-appended-same-row-multiple-times/14962)
- [Ошибка 429 в Google Sheets](https://community.n8n.io/t/google-sheet-issue-the-service-is-receiving-too-many-requests-from-you-perhaps-take-a-break/16954?tl=en)
- [Неисправная форма и потерянные заявки](https://vc.ru/services/2141979-oshibki-onlayn-biznesa-7-prichin)

_Это собирательная история выпускников практикума, а не рассказ одного человека: так эта работа устроена в большинстве таких дел._
