Панель

Закриті клуби

Окремий клубний бот, приватні канали/групи, тарифи, оплата в DM, заявки на вступ.

Два Telegram-боти в проєкті

Для закритих клубів потрібен окремий клубний бот — не той самий токен, що в Налаштування → Канали → Telegram (бот для діалогів і flows у DM).

Клубний бот: підписка/оплата в особистих повідомленнях, видача інвайтів, обробка заявок на вступ, синхронізація прав у каналах і групах. Один клубний бот на весь проєкт — і канали, і групи.

Без підключеного клубного бота додати канал у розділі «Закриті клуби» неможливо (fallback на основний бот вимкнено).

Підключення клубного бота

  • У Telegram: @BotFather → /newbot → скопіюйте токен **другого** бота
  • Панель → **Закриті клуби** (/closed-clubs) → картка «Бот клубу» → вставте токен → Підключити
  • Оберіть стартовий flow для DM /start (за замовчуванням tpl_tg_closed_club)
  • Після деплою webhook реєструється на …/webhook/telegram-club/{secret}/{projectId}

Канал або група

Додайте клубного бота адміністратором у приватний канал або групу з правами: запрошення користувачів, обмеження учасників. У каналі увімкніть Заявку на вступ (join request).

У панелі: вкладка Канали → Chat ID (-100…) → Підключити. Система перевірить права бота через Telegram API.

  • join_handler_mode: авто-approve якщо оплачено / завжди decline
  • grace_days — дні після закінчення доступу до відкликання
  • invite_ttl_hours — термін дії одноразового інвайт-лінку
  • renewal_flow_slug — flow після закінчення підписки

Тарифи

Вкладка Тарифи: ціна в ₴, термін доступу (дні), провайдер з підтримкою рекурентних платежів (LiqPay, Monobank тощо). Демо-тариф — без оплати на N днів.

Тариф прив'язується до основного каналу; додаткові канали/групи — через extra channels (одна підписка → кілька чатів).

Flow: два окремі блоки

Користувач пише клубному боту в DM → стартовий flow (оплата, демо). Після оплати блок Платний клуб видає одноразове посилання createChatInviteLink.

Для маркетингу (бонус за підписку на публічний канал) використовуйте блок Перевірка підписки в основному боті — це окрема задача, не змішуйте з клубом.

Шаблони клубу: tpl_tg_closed_club, tpl_tg_club_renewal, tpl_tg_join_handler. Маркетинг: tpl_tg_subscription_bonus, комбо tpl_tg_subscribe_and_club.

Тригери вступу / виходу

У блоці Тригер режими «Вступ у канал» та «Вихід з каналу» — для welcome/onboarding або реактивації.

Клубний бот синхронізує теги учасника (tg_ch__member / tg_ch__left) для сегментації розсилок.

Журнал подій каналу — вкладка Події в панелі «Закриті клуби» (вступ, кік, інвайт, перевірки, пости).

Webhook на продакшені

Основний бот: /webhook/telegram/{secret}/{projectId} — лише message і callback_query.

Клубний бот: /webhook/telegram-club/{secret}/{projectId} — message, callback, chat_join_request, my_chat_member.

Після деплою або зміни токена: перепідключіть бота в UI або на сервері `node apps/api/dist/scripts/reregister-webhooks.js`.