B Blengi docs

Platform admin

Managed plans & Calendly CTA

A Managed plan is a high-touch tier where the Blengi / Blengi team handles setup, AI training, knowledge-base configuration, and ongoing maintenance for the customer. The visitor doesn't pay online — they book a call with a sales rep who closes the deal and bills them off-platform.

Under the hood, Managed plans piggyback on the regular Plan model with one extra knob: cta_type. Set it to calendly and the pricing card swaps the self-serve Stripe checkout button for a Book a call link that opens your Calendly event in a new tab.

Creating a Managed plan

  1. Open /admin/plans/create.
  2. Fill in the basics: name (e.g. Managed), monthly conversation cap (use 0 for unlimited), monthly price.
  3. Scroll to the Checkout behaviour card.
  4. Set CTA type = Book a call (Calendly).
  5. Paste your Calendly event URL — for example https://calendly.com/your-handle/discovery. Use a specific event link, not your profile root, so the visitor lands on a bookable slot directly.
  6. (Optional) Enter a one-time setup fee in your plan currency. When both a setup fee and a monthly price are set, the pricing card renders the dual line "€999.00 setup + €199.00/month" under the headline price.
  7. Marketing bullets — list what the plan includes (Full setup, AI training, Knowledge base setup, Lead capture configuration, Ongoing maintenance, Priority support). Max 8 entries × 80 characters each.
  8. Save.

What changes vs. a self-serve plan

  • Stripe sync is skipped. Calendly plans never get a Stripe Product or Price provisioned up front — even if you set a monthly price. After the call you bill the workspace from /admin/subscriptionsBill (see Closing the deal below), which mints the price and sends the invoice for you.
  • The PayPal and Razorpay syncs are also skipped for the same reason. The per-row Sync button on /admin/plans returns a friendly "Calendly plans bypass gateway sync" message instead of an error.
  • The pricing card button is an <a> with target="_blank" rel="noopener noreferrer". It does NOT carry the self-serve interval=year query-string hint — Calendly would ignore it anyway.
  • Default for new signups should not be set on a Managed plan. New workspaces auto-attached to a Managed plan would have no Stripe customer or subscription, breaking the billing UI.

Closing the deal after the call

Once you've spoken with the customer, bill their workspace directly from the admin — no Stripe Dashboard, no manual price juggling:

  1. Open /admin/subscriptions.
  2. Find the customer's workspace (search by name, slug, or Stripe id) and click Bill on its row.
  3. In the dialog pick the plan (defaults to Managed), the currency (defaults to EUR), the days until due, and the customer's company name, address, country, and (optional) VAT number — the legal details that print on the invoice.
  4. Click Send invoice. Stripe emails the customer a proper B2B invoice payable by bank transfer / IBAN (for EUR) or card, and the green admin banner shows an Open the invoice link you can copy and forward yourself.

The plan does not activate yet. The workspace shows a pending (unpaid) invoice and keeps its current plan until the money arrives. When Stripe reports the invoice paid, the workspace is flipped to the billed plan automatically (the invoice.payment_succeeded webhook) — no further admin action. Non-payment runs Stripe's dunning and eventually reverts to Free.

This reuses the same "pay by invoice" engine customers can use on their own billing page, so EUR invoices carry SEPA / IBAN funding instructions and an EU B2B buyer's VAT reverse-charges automatically when you supply the VAT id. It needs Stripe configured in Settings → System; it is not gated behind the customer-facing "pay by invoice" toggle.

Switching an existing plan to / from Calendly

The cta_type column defaults to stripe_checkout for every existing row, so the migration is a no-op for self-serve plans. Switching a plan TO Calendly mid-life is supported: existing subscriptions stay on the Stripe Price they were minted at, and the public pricing card immediately swaps to the Book-a-call CTA.

Switching FROM Calendly back to Stripe re-enables the gateway sync. Hit the per-row Sync button on /admin/plans to mint a fresh Stripe Product + Price.

Field reference

ColumnTypeMeaning
cta_type string(32) stripe_checkout (default) | calendly.
calendly_url string(512), nullable External Calendly event URL. Required when cta_type=calendly.
setup_fee_cents integer, nullable One-time setup fee in minor units. Combined with the recurring price for the dual-line display.

See also: Plans & Stripe sync for the broader plan CRUD surface.