| Краткое описание | Discourse Member Application позволяет организовать структурированный процесс подачи заявок от потенциальных участников перед их вступлением в сообщество Discourse. | |
| Ссылка на репозиторий | R23DPrinting-group / discourse-member-application · GitLab | |
| Руководство по установке | Как установить плагины в Discourse |
discourse-member-application — Система предварительной заявки для закрытых сообществ
discourse-member-application позволяет организовать структурированный процесс подачи заявок от потенциальных участников перед их вступлением в сообщество Discourse. Заявители заполняют настраиваемую публичную форму по адресу /apply, администраторы просматривают заявки и одобряют или отклоняют их, а одобренные заявители автоматически получают персональную ссылку-приглашение.
GitLab: R23DPrinting-group / discourse-member-application · GitLab
История создания
Я управляю закрытым сообществом, использующим режим только по приглашениям в Discourse. Ранее мы обрабатывали заявки вручную — через Google Формы, таблицы и ручное копирование ссылок-приглашений. Это работало, но не масштабировалось и казалось оторванным от самого сообщества.
Я искал плагин для Discourse, который мог бы обрабатывать предварительные заявки до отправки приглашения. Я не нашел подходящего решения, поэтому создал этот плагин.
Демонстрация
Возможности
Настраиваемая форма заявки
Форма создается полностью через вкладку «Поля» в панели администратора — код не требуется. Поддерживаемые типы полей: текст, многострочный текст, да/нет, переключатели (radio), группа флажков и одиночный флажок. Поля поддерживают метки, подсказки, обязательность/необязательность, включение/отключение и условную видимость (показывать поле только если другое поле имеет определенное значение).
Панель администратора
Просмотр и управление всеми заявками на специальной странице плагина. Фильтрация по статусу (В ожидании / Одобрено / Отклонено / Использовано), поиск по email или имени пользователя, пагинация для больших списков. Просмотр полной информации о заявке, добавление частных заметок администратора, одобрение или отклонение по одной или массово.
Процесс одобрения
Одобрение заявки генерирует одноразовое приглашение Discourse и отправляет его заявителю по email. Отклонение отправляет настраиваемое письмо об отказе с возможностью добавления обратной связи. Когда заявитель использует приглашение и создает аккаунт, статус заявки автоматически обновляется до «Использовано». Одобренные участники могут автоматически добавляться в группу Discourse.
Аналитика
Вкладка «Аналитика» отображает сводную статистику (общее количество заявок, процент одобрения, среднее время рассмотрения), график тренда за 12 недель по количеству поданных заявок против одобренных, а также воронку конверсии: подано → одобрено → использовано.
Уведомления администраторов
При поступлении новой заявки частное сообщение отправляется указанным пользователям (или всем администраторам, если поле оставлено пустым).
Настраиваемый UX
- Вступительный текст в верхней части формы (поддерживает Markdown)
- Страница успеха по адресу
/apply/successпосле отправки с настраиваемым сообщением (поддерживает Markdown) - Кнопка «Подать заявку на вступление» на странице входа и на главной странице, требующей входа (можно включить/отключить)
- Истечение срока заявки — автоматическое отклонение ожидающих заявок через заданное количество дней
Редактируемые шаблоны писем
И письмо-подтверждение отправки, и письмо об отказе можно редактировать через Админ → Настроить → Шаблоны писем — изменение кода не требуется.
Безопасность
Ограничение частоты запросов (5 заявок с одного IP в час), обнаружение дубликатов (блокирует повторную отправку при наличии ожидающей или одобренной заявки с тем же email или именем пользователя, а также блокирует уже зарегистрированные email/имена пользователей) и одноразовые ссылки-приглашения.
Конфигурация
Установка
Добавьте следующее в ваш файл /var/discourse/containers/app.yml:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://gitlab.com/r23dprinting-group/discourse-member-application.git
Затем выполните пересборку:
cd /var/discourse && ./launcher rebuild app
Настройка вашей формы
После установки перейдите в Админ → Плагины → Заявки участников → Поля, чтобы создать форму заявки.
Плагин поставляется со следующими полями по умолчанию (все можно редактировать или удалять):
- Желаемое имя пользователя
- Расскажите немного о себе
- Как вы о нас узнали?
- Являетесь ли вы сейчас частью каких-либо других похожих онлайн-сообществ? (да/нет)
- Если да, то каких? (условное — отображается только если выше выбрано «Да»)
- Раскрытие информации о поставщиках (группа флажков)
- Подтверждение честности (флажок — системное поле, нельзя удалить)
Используйте кнопку Добавить поле для создания новых полей. Используйте стрелки вверх/вниз для изменения порядка. Чтобы сделать поле условным, отредактируйте его и в разделе «Показывать только когда» выберите родительское поле и триггерное значение.
Рабочий процесс
- Потенциальный участник посещает ваш сайт и нажимает Подать заявку на вступление (или переходит напрямую по адресу
/apply) - Он заполняет форму и отправляет её — аккаунт не требуется
- Администраторы получают уведомление в частном сообщении
- Администратор просматривает заявку в разделе Админ → Плагины → Заявки участников → Заявки
- Администратор одобряет → заявитель получает письмо-приглашение с одноразовой ссылкой
- Заявитель использует приглашение, создает аккаунт, и статус заявки обновляется до Использовано
Настройки
| Имя | Описание |
|---|---|
member_application_enabled |
Включить или отключить форму заявки по адресу /apply |
member_application_notify_usernames |
Имена пользователей через запятую для уведомления через ЧС при новой заявке. Оставьте пустым для уведомления всех администраторов. |
member_application_invite_group |
Название группы, в которую добавлять участника при одобрении (оставьте пустым, чтобы пропустить) |
member_application_expiry_days |
Автоматически отклонять ожидающие заявки через указанное количество дней (0 = никогда) |
member_application_expiry_notify |
Отправлять письмо об отказе при автоматическом истечении срока заявки |
member_application_show_apply_button |
Показывать кнопку «Подать заявку на вступление» на странице входа и на главной странице, требующей входа |
member_application_apply_button_text |
Текст кнопки «Подать заявку на вступление» (по умолчанию: «Подать заявку на вступление») |
member_application_intro_text |
Вступительный текст, отображаемый в верхней части формы заявки. Поддерживает Markdown. Оставьте пустым, чтобы скрыть. |
member_application_success_message |
Сообщение, отображаемое на странице /apply/success после отправки. Поддерживает Markdown. |
Примечания
- Независимо от сообщества — весь текст полей по умолчанию настраивается через вкладку «Поля»
- Работает в режиме
login_required/ только по приглашениям в Discourse - Лицензия MIT
- Протестировано на версии Discourse 2026.3.0
Проблемы, pull-запросы и предложения по новым функциям приветствуются на GitLab.