Product Sales

The user wants a Telegram sales bot for a product, paid digital good, course, consultation, or one-off offer with online payment (Stripe by default; Telegram Payments, YooKassa, or another provider via setup variants).

Flow Preview

Product SalesStripe Payment Fulfillment

Overview

Show product cards, collect buyer email, create a checkout with the payment provider chosen during setup, and send a payment link.

Who It's For

The user wants a Telegram sales bot for a product, paid digital good, course, consultation, or one-off offer with online payment (Stripe by default; Telegram Payments, YooKassa, or another provider via setup variants).

Setup Requirements

  • Which payment provider should be used: Telegram Payments, Stripe, YooKassa, or another provider?
  • What products, prices, and currency should be offered?
  • How should the bot describe what the shop sells?
  • What success and cancel URLs should Stripe redirect to?
  • Should the bot collect email before checkout?
  • What should happen after successful payment: send a file, invite link, course access, or notify staff?
  • This template is Stripe-first: the payment provider you picked during setup (Telegram Payments, Stripe, YooKassa, or another provider) decides how the payment step was built — follow the matching instructions below.
  • Stripe: keep the Stripe module installed, fill the secret variable STRIPE_SECRET_KEY in the Stripe module setup, review the amount, currency, success URL, and cancel URL fields, and run one test checkout before publishing. Stripe API keys docs: https://docs.stripe.com/keys
  • Stripe fulfillment: add the webhook endpoint in Stripe Dashboard. Open the "Stripe Payment Fulfillment" flow, select the Start webhook block, copy the Full Webhook URL, and paste it into Stripe Developers > Webhooks. The confirmation message and staff alert only fire for events whose payment status is "paid".
  • Telegram Payments: the payment step is a built-in Telegram payment block charging Telegram Stars (XTR) with one fixed amount — open it and set your real product price. For fiat card payments, switch the block to Card, connect a provider in @BotFather (Payments settings), and paste the provider token in FlowCastle under Bot Settings > Card payments. Fulfillment and the staff alert happen right in the flow after the Paid branch.
  • YooKassa: install the YooKassa module (yokassa@1.0.0), add your shopId and secretKey in the module setup (never in chat), and point the YooKassa webhook at the "Stripe Payment Fulfillment" flow's start block so paid orders trigger the confirmation message.
  • Other provider: the checkout step is an honest "payments are being set up" message. Replace it with your provider's module action or HTTP request, map the payment link and payment status outputs into variables, and add a webhook or manual confirmation path before promising delivery.
  • Prices and currency default to USD ($). To switch currency, change the payment action's "currency" field (for example eur or gbp) and update the price labels in the product buttons and product detail message.
  • The two catalog products are samples that ship as-is — edit the product buttons, the "Set Starter/Pro Product" actions, and the prices to your real offer before going live.
  • To alert your team about every sale, tag staff contacts with the "staff" tag on the Contacts page. The Notify staff action then messages everyone carrying that tag.

Node Breakdown

  • Start or product catalog
  • Show product buttons
  • Save selected product, item name, and amount
  • Show a product detail message with image media
  • Collect buyer email
  • Run the installed Stripe create-checkout-session module action (or the setup-variant payment step)
  • Map checkout_url, session_id, and status into contact variables
  • Send a MESSAGE with a URL button pointing to the checkout URL
  • In the webhook fulfillment flow, confirm only events whose payment status is paid; log everything else silently

Details

Good to know

  • The payment_provider briefing answer selects one setup variant inside this same template: Stripe (default), Telegram Payments, YooKassa, or another provider placeholder.
  • Use the installed Stripe create-checkout-session action through moduleActionRef when the Stripe module is installed.
  • If stripe@1.0.0 is not installed but is available in marketplace modules, return a module_install_proposal before drafting checkout actions.
  • Do not replace the Stripe Checkout Session step with SET_VARIABLE, HTTP_REQUEST, or a fake checkout placeholder when the Stripe module is required by this template.
  • Call get_module_details for stripe before drafting exact inputFields and outputFields.
  • Keep Stripe secret key in the module/environment setup; do not ask the user to paste secrets into chat.
  • Use a MESSAGE URL button for the checkout URL instead of asking users to copy a raw link.
  • The webhook fulfillment flow must gate the confirmation message and staff alert behind a CONDITION on the captured payment status; unconfirmed events are only recorded, never announced as paid.

Keep in mind

  • Do not ask for or store Stripe secret keys as normal variables.
  • Do not invent a custom Stripe HTTP request when the installed Stripe module action exists.
  • Do not show checkout until product amount, currency, success URL, and cancel URL are known.
  • Do not claim fulfillment is automatic unless a webhook or manual delivery path exists.
  • Do not send the payment-confirmed message for webhook events that are not actually paid.