Private Club Membership

The user wants a bot that accepts subscription payments, grants access to a separate Telegram group or channel, and controls access while the subscription remains active. The bot is an access gate, not the club or community content itself.

Flow Preview

Paid Access SignupPayment FulfillmentMembership Status CheckMembership Access Audit

Overview

Sell recurring private club access with Stripe, invite paid members to a separate Telegram group or channel, and prepare a recurring broadcast that checks subscription status and removes unpaid members.

Who It's For

The user wants a bot that accepts subscription payments, grants access to a separate Telegram group or channel, and controls access while the subscription remains active. The bot is an access gate, not the club or community content itself.

Setup Requirements

  • What is the Stripe recurring Price ID for the membership plan?
  • Which separate Telegram group, supergroup, or channel should paid members access?
  • How often should subscription status be checked?
  • Before testing checkout, fill the secret variable STRIPE_SECRET_KEY in the Stripe module setup.
  • Stripe API keys docs: https://docs.stripe.com/keys
  • To enable payment fulfillment, add the webhook endpoint in Stripe Dashboard. Open the "Payment Fulfillment" flow, select the Start webhook block, copy the Full Webhook URL, and paste it into Stripe Developers > Webhooks.
  • For Telegram invite generation and member removal, add the bot as an administrator in the target channel or group with permission to invite users and manage members.
  • Target Chat can be a public Telegram link like https://t.me/privateclub, a username like @privateclub, or a numeric -100 chat ID.

Node Breakdown

  • Start in the paid access signup flow
  • Collect a receipt email before checkout
  • Use the installed Stripe create-subscription-checkout-session module action
  • Send a URL button with the checkout link
  • Use a Stripe webhook trigger flow for checkout completion
  • Create a one-person Telegram group/channel invite link for paid members
  • Store subscription_id, customer_id, invite_link, and membership status on contact variables
  • Use a separate membership status check flow for recurring audits
  • Create a draft recurrent broadcast that runs the membership status check flow
  • Remove members from the Telegram group/channel and notify them when subscription status is no longer active

Details

Good to know

  • Use moduleActionRef for [email protected] templateKey create-subscription-checkout-session when the Stripe module is installed.
  • Use moduleActionRef for [email protected] templateKey retrieve-subscription in the recurring membership check flow.
  • Use [email protected] create-chat-invite-link after payment and remove-chat-member when group/channel access is no longer paid.
  • For Telegram remove-chat-member user_id, use {{sysvar|platformId}} for the current contact or broadcast recipient; do not create an empty contact variable for the Telegram user ID.
  • Use the Stripe stripe-payment-events-webhook trigger template for payment fulfillment when it is installed.
  • For create_broadcast, use the current applicationId and selected Telegram botId; data.flowId is the broadcast flow placeholder.
  • Keep the recurring broadcast as a draft with create_recurrence_schedule and attach_recurrence_to_broadcast.

Keep in mind

  • Do not add users to a Telegram group or channel before Stripe confirms payment.
  • Do not use a normal reusable invite link for paid access; create a limited invite link per paid member.
  • Do not model recurring audits as a normal message chain; use a recurrent broadcast draft.
  • Do not build the community, news, events, or content experience itself; keep that inside the separate Telegram group or channel.