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
- Open
/admin/plans/create. - Fill in the basics: name (e.g. Managed), monthly
conversation cap (use
0for unlimited), monthly price. - Scroll to the Checkout behaviour card.
- Set CTA type = Book a call (Calendly).
- 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. - (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.
- 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.
- 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/subscriptions→ Bill (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/plansreturns a friendly "Calendly plans bypass gateway sync" message instead of an error. - The pricing card button is an
<a>withtarget="_blank" rel="noopener noreferrer". It does NOT carry the self-serveinterval=yearquery-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:
- Open
/admin/subscriptions. - Find the customer's workspace (search by name, slug, or Stripe id) and click Bill on its row.
- 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.
- 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
| Column | Type | Meaning |
|---|---|---|
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.