One switch: in-house or GoHighLevel

A single per-account toggle rewrites the whole messaging stack — Twilio and Mailgun, or GoHighLevel — and can be flipped back at any time.

What it is

setCommsProviderMode writes a complete plan of binding priorities and statuses for both channels. 'inhouse' puts Twilio first for texts and Mailgun first for email with Resend behind it and GoHighLevel parked. 'ghl' promotes GoHighLevel on both channels with in-house as fallback. The organizations row records the mode and an audit_log entry records who flipped it.

Also called: change my texting provider · switch to my own Twilio · use GHL for email · comms provider mode

See it
One switch: in-house or GoHighLevel
Area
Integrations
Group
Provider architecture
System
Provider Independence
Solves
2 named problems
01Operator picks a mode on the sub-account's Integrations panel.
02Existing binding rows are read so their per-provider config survives the flip.
03A plan of (capability, provider, priority, status) rows is upserted.
A two-state segmented control (In-house / GoHighLevel) with the resulting chain redrawing beneath it. Rendered by the sub-account Integrations panel and src/components/settings/CommunicationsTab.tsx. Sample data — no customer information appears here.
How it works
  1. 1Operator picks a mode on the sub-account's Integrations panel.
  2. 2Existing binding rows are read so their per-provider config survives the flip.
  3. 3A plan of (capability, provider, priority, status) rows is upserted.
  4. 4A Twilio row still in pending_setup keeps that status but sits first, so it wins the moment A2P clears.
  5. 5The registry cache is invalidated and an audit row is written.
Why we built it

Keith 08-18, quoted in the module header: 'inhouse — Twilio for texts, Mailgun for email (Resend as fallback). The default for EVERY new account. ghl — GoHighLevel for texts and email, in-house as fallback. For a builder who insists on GHL; flip back any time.' The design note that matters is that 'nothing else in the app knows or cares which mode is on; the registry just reads the chain' — so the switch cannot leave half the app pointing at the old provider.

The problem
  • Provider choice used to be operator-only, done by hand in SQL.
  • A switch that deleted the old chain left nothing to fall back to and no way to undo.
Sound familiar?
What you get
A builder's stack changes in one click and reverses in one click.
Per-provider settings (sending domain, number) survive the switch.
Who changed it and when is on the audit trail.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →