Event-менеджер собирает регистрации гостей: своя форма вместо чужого сервиса
Вы отправляете гостям ссылку на форму регистрации, а через пару недель обнаруживаете, что бесплатный тариф сервиса форм упёрся в лимит ответов прямо посреди активной рассылки приглашений. И это не главная проблема: имена, телефоны, email и иногда паспортные данные всех гостей мероприятия всё это время лежат не у вас, а в чужой системе, условия которой вы, скорее всего, даже не читали до конца. Ниже — как собрать собственную форму регистрации на сервере: без лимита на число ответов и без передачи персональных данных гостей стороннему сервису.
Содержание
- Почему форма в чужом сервисе — это чужой список гостей
- Что должна уметь форма регистрации на мероприятие
- Собираем форму на своём сервере: NocoDB и публичная форма без сторонних лимитов
- Домен, HTTPS и защита формы от спама
- Управление списком гостей: статусы, фильтры, экспорт для бейджей и рассадки
- Персональные данные гостей: что нужно сделать по закону
Почему форма в чужом сервисе — это чужой список гостей
Когда вы создаёте форму в облачном конструкторе, данные, которые в неё вводят гости, физически попадают на серверы компании, которая этот конструктор делает. Вы видите их через свой аккаунт, но владеете вы не данными, а доступом к ним — и это принципиально разные вещи. Сервис может в любой момент изменить условия использования, ограничить экспорт на бесплатном тарифе, заблокировать аккаунт за подозрительную активность (а форма с резким всплеском заполнений накануне мероприятия иногда выглядит именно так) или просто оказаться недоступным в день, когда вам нужно свериться со списком гостей на входе.
Есть и более приземлённая проблема — лимиты. Бесплатные и даже недорогие платные тарифы сервисов форм почти всегда ограничивают либо число ответов в месяц, либо число активных форм, либо возможность экспорта в удобном формате. Для разового мероприятия на полсотни человек это не критично. Но если вы event-менеджер и таких форм у вас параллельно три-четыре в месяц — свадьба, корпоратив, конференция, — лимиты бесплатного тарифа закончатся быстро, а платный тариф считается не за одно мероприятие, а за подписку, которую вы платите независимо от того, работаете вы сейчас или нет.
Третий момент — это данные гостей как таковые. Имя, телефон, email, а для части мероприятий — дата рождения, серия и номер паспорта (для доступа на закрытую территорию, например) или сведения об аллергиях и диетических ограничениях. Всё это персональные данные, и передавая их в чужой сервис форм, вы фактически становитесь стороной, которая раскрывает данные третьему лицу без явного разбирательства, где физически находятся серверы этого сервиса и по каким правилам он с этими данными обращается. Собственная форма на вашем сервере убирает этого посредника: данные идут от гостя сразу в вашу базу, и вы точно знаете, где они лежат и кто к ним имеет доступ.
Что должна уметь форма регистрации на мероприятие
Прежде чем разворачивать что-либо, стоит развести форму на составные части — иначе легко либо перегрузить гостя лишними полями, либо не собрать то, что реально понадобится на входе.
Минимальный набор, который нужен почти всегда:
- имя и фамилия — то, что будет на бейдже и в списке на входе;
- контакт для связи — телефон или email, обычно достаточно одного, но лучше оставить оба поля необязательными по отдельности;
- число сопровождающих гостей, если регистрация идёт не только на себя;
- статус подтверждения — придёт гость или нет, если форма используется как RSVP, а не только как разовая регистрация.
Дополнительные поля, которые нужны не всегда, но регулярно всплывают у конкретных типов мероприятий:
- диетические ограничения или аллергии — критично для банкетов и фуршетов;
- нужна ли парковка или трансфер;
- согласие на обработку персональных данных — отдельный чекбокс, обязательный к отметке, если вы вообще собираете что-то, кроме имени;
- свободное поле для пожеланий или вопросов организатору.
Отдельно стоит решить, нужно ли гостю подтверждение о том, что его регистрация принята — письмо на email с деталями мероприятия или просто экран «спасибо, вы зарегистрированы». Для небольших мероприятий это можно делать вручную, но при потоке в десятки регистраций в день ручная рассылка подтверждений превращается в отдельную работу, которую разумнее автоматизировать сразу.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверСобираем форму на своём сервере: NocoDB и публичная форма без сторонних лимитов
Самый быстрый путь для event-менеджера без бэкенд-разработчика под рукой — не писать форму с нуля, а взять готовый инструмент с открытым кодом, который разворачивается одной командой и даёт и форму, и таблицу с ответами в одном месте. NocoDB для этого подходит хорошо: вы создаёте таблицу «Гости» с нужными колонками, включаете для неё представление «Форма» — и получаете публичную ссылку, которую можно рассылать гостям, а все ответы падают прямо в таблицу, которую вы же и видите.
Минимальный рабочий docker-compose.yml:
version: "3.8"
services:
nocodb-db:
image: postgres:16-alpine
container_name: nocodb-db
restart: unless-stopped
environment:
POSTGRES_USER: nocodb
POSTGRES_PASSWORD: ${NC_DB_PASSWORD}
POSTGRES_DB: nocodb_meta
volumes:
- nocodb_pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nocodb -d nocodb_meta"]
interval: 10s
timeout: 5s
retries: 5
nocodb:
image: nocodb/nocodb:latest
container_name: nocodb
restart: unless-stopped
depends_on:
nocodb-db:
condition: service_healthy
ports:
- "8080:8080"
environment:
NC_DB: "pg://nocodb-db:5432?u=nocodb&p=${NC_DB_PASSWORD}&d=nocodb_meta"
NC_PUBLIC_URL: "https://reg.example.com"
NC_DISABLE_TELE: "true"
volumes:
- nocodb_data:/usr/app/data
volumes:
nocodb_pg_data:
nocodb_data:
Пароль вынесите в .env рядом:
NC_DB_PASSWORD=пароль_без_спецсимволов_amp_slash
Полный разбор установки, подключения внешней базы и типичных граблей — в статье про установку NocoDB на VPS. Здесь — то, что специфично именно для формы регистрации гостей.
После первого входа создайте таблицу guests с колонками под тот набор полей, который вы определили в предыдущем разделе (имя, контакт, число гостей, статус, диета, согласие на обработку данных), затем откройте таблицу и добавьте представление типа Form. NocoDB сгенерирует отдельную страницу с формой на основе колонок таблицы — можно скрыть служебные поля (например, статус подтверждения администратором) и оставить гостю только то, что он должен заполнить сам. Ссылка на эту форму — обычный URL вида https://reg.example.com/#/nc/form/<view_id>, её можно сократить и разослать в приглашении.
Если форма нужна проще — без таблицы с фильтрами и статусами, просто как разовый сбор ответов с последующим экспортом в CSV — тот же принцип реализует Formbricks, инструмент специально под формы и опросы, а не универсальная надстройка над базой. Для управления списком гостей как живой базой (со статусами, фильтрами, канбаном по подтверждениям) NocoDB обычно удобнее — но выбор зависит от того, что вам важнее: гибкость таблицы или простота одноразовой формы.
Домен, HTTPS и защита формы от спама
Форма регистрации будет открыта в интернете, и её будут заполнять реальные люди по ссылке из мессенджера или email — значит, ей обязательно нужен нормальный домен с HTTPS, а не голый IP с портом 8080. Без сертификата часть телефонов и почтовых клиентов будет предупреждать о небезопасном соединении, а некоторые гости просто не откроют такую ссылку.
Проще всего поставить Caddy перед NocoDB — он сам выпускает и продлевает сертификат Let's Encrypt, если домен указывает на IP сервера:
caddy:
image: caddy:2-alpine
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
depends_on:
- nocodb
volumes:
caddy_data:
reg.example.com {
reverse_proxy nocodb:8080
}
Подробности автоматического SSL и типичные ошибки при первом запуске разобраны в статье про установку Caddy на VPS.
Отдельный вопрос — спам и повторные заполнения. Публичная форма без какой-либо защиты рано или поздно словит либо ботов, перебирающих формы по интернету, либо гостя, который в панике заполнил форму трижды, не увидев подтверждения после первого раза. От автоматических ботов помогает базовая защита на уровне сети — fail2ban, банящий IP по частоте запросов к URL формы, если видит явно ненормальный паттерн обращений. От повторных заполнений живым человеком защищает не техническая мера, а логика: сделайте поле email или телефон обязательным и с проверкой на уникальность в таблице (в NocoDB это настраивается на уровне колонки), тогда вторая попытка зарегистрироваться с тем же контактом либо будет отклонена, либо вы просто увидите дубль в таблице и разберётесь с ним вручную — что для потока в десятки, а не тысячи регистраций, вполне рабочий вариант.
Полноценную капчу городить обычно не стоит — она добавляет трение для реального гостя ради защиты от угрозы, которая для формы на разовое мероприятие с небольшой аудиторией статистически маловероятна. Если ссылка на форму не публикуется в открытых местах, а рассылается адресно приглашённым, объём случайного спама и так будет минимальным.
Управление списком гостей: статусы, фильтры, экспорт для бейджей и рассадки
Форма — это только вход данных. Реальная работа event-менеджера начинается после того, как гость её заполнил: нужно видеть, кто подтвердил приход, кто ещё не ответил, у кого особые пожелания по питанию, и в итоге получить список для распечатки бейджей и рассадки.
В NocoDB это решается представлениями поверх той же таблицы guests, без дублирования данных:
- Grid-представление со скрытыми служебными колонками — рабочий список для повседневного просмотра и ручной правки статусов;
- Kanban-представление по колонке «статус» (например: ожидает / подтвердил / отказался / пришёл) — удобно двигать карточки в день мероприятия прямо с телефона на входе;
- Отфильтрованное представление только по подтверждённым гостям с особыми диетическими пожеланиями — отдельная ссылка для передачи кейтерингу, без доступа ко всей базе;
- Представление только для чтения, расшаренное коллегам на входе — они видят список и могут отмечать приход, но не могут менять контакты гостей.
Для печати бейджей или передачи списка подрядчику (например, охране на входе с ФИО и номером стола) экспорт в CSV или XLSX делается прямо из грид-представления — как обычная выгрузка таблицы, без ограничений на число строк, в отличие от бесплатных тарифов многих сервисов форм, где экспорт либо платный, либо урезан по объёму.
Если мероприятие не разовое, а серия (курс лекций, регулярный митап, годовая программа мастер-классов), таблицу удобно расширить связанной таблицой «Мероприятия» — тогда одна и та же база гостей может использоваться повторно, а история посещений видна по каждому контакту. Это уже выходит за рамки одной формы регистрации, но собирается на той же связке NocoDB и PostgreSQL без дополнительных инструментов.
Персональные данные гостей: что нужно сделать по закону
Собственный сервер не освобождает от требований к обработке персональных данных — он просто убирает из цепочки лишнего посредника в виде стороннего сервиса форм. Обязанности по работе с данными гостей остаются на вас как на операторе, который эти данные собирает.
Практически это означает несколько простых вещей:
- на форме должен быть чекбокс согласия на обработку персональных данных, обязательный к отметке — без него гость не должен иметь возможности отправить форму;
- собирайте минимум полей, реально нужных для мероприятия — паспортные данные, если они не требуются пропускной системой конкретной площадки, лучше не запрашивать вовсе;
- определите заранее, сколько времени данные гостей хранятся после мероприятия, и удаляйте их по истечении этого срока, а не оставляйте таблицу расти бессрочно;
- ограничьте доступ к таблице с полными данными только теми людьми, кому он действительно нужен — остальным коллегам достаточно отфильтрованного или урезанного представления.
Что именно считается персональными данными и какие поля к ним относятся, разобрано в статье о том, что считается персональными данными — полезно свериться, если форма собирает что-то за пределами базового набора «имя плюс контакт». Если вы регулярно работаете с формами и данными клиентов не только на разовых мероприятиях, а как часть постоянной практики, стоит один раз оформить внутреннюю политику обработки данных — что и зачем собирается, кто имеет доступ, сколько хранится — структура такой политики разобрана в статье про политику обработки данных.
Это не превращает вас в юриста и не заменяет консультацию, если мероприятие крупное или данные чувствительные (например, медицинские противопоказания для спортивного события). Но для типичной регистрации на корпоратив, конференцию или закрытую вечеринку перечисленных шагов обычно достаточно, чтобы работать честно по отношению к гостям и не создавать себе рисков.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Сколько времени занимает разворачивание такой формы с нуля?
Технически сама установка NocoDB и настройка таблицы с формой занимает от силы час, если сервер и домен уже готовы. Основное время обычно уходит не на инструмент, а на то, чтобы продумать список нужных полей и статусов заранее, — начинать эту часть стоит до, а не во время рассылки приглашений.
Что делать, если у меня несколько мероприятий одновременно и для каждого своя форма?
Заведите отдельную таблицу (или отдельное представление формы) под каждое мероприятие в той же базе NocoDB — они не мешают друг другу, а ограничения по числу форм или таблиц, характерные для платных тарифов SaaS-сервисов, здесь просто отсутствуют.
Нужно ли гостю создавать аккаунт, чтобы заполнить форму?
Нет, публичная форма-представление в NocoDB открывается по прямой ссылке без регистрации и без входа — гость просто заполняет поля и отправляет, как в обычной веб-форме.
Как отправить гостям подтверждение регистрации автоматически, а не вручную?
Прямого встроенного email-рассыльщика для этого в NocoDB нет, но таблицу можно подключить через вебхук к внешнему сервису рассылки, который будет срабатывать при добавлении новой строки. Для небольшого потока регистраций (до нескольких десятков в день) ручная или полуручная рассылка подтверждений обычно остаётся проще, чем настройка автоматизации ради разового мероприятия.
А если мероприятие бесплатное и разовое на 20 человек — оправдан ли вообще свой сервер?
Для одного небольшого мероприятия хватит и бесплатного тарифа стороннего сервиса. Развёртывание своей формы окупается, когда мероприятий несколько в год, лимиты чужих тарифов начинают мешать, или когда вы сознательно не хотите передавать данные гостей третьей стороне — например, для мероприятий с закрытым списком или чувствительными данными участников.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →