Seat product · ESL control plane

FreeSWITCH CCaaS & Multi-Tenant IP PBX Platform

A configurable contact-center and hosted PBX product: PostgreSQL is the source of truth, NestJS is the decision layer, and FreeSWITCH executes via ESL — with three keys: super-admin, tenant admin and agent.

Built for operators, MSPs and CCaaS product teams who need to sell seats without SSH into XML for every extension.

Productized case-study delivery Scope-based estimator BYOC · Twilio · Telnyx · Sinch

Problems we solve

Operators who sell contact-center seats without a control plane typically hit:

  • Operators SSH into FreeSWITCH for every queue or extension change
  • No tenant isolation — one GUI for every company on the box
  • Agent dialer disconnected from campaigns and leads
  • Supervisors cannot see live channels in the web app
  • Campaign lists live in a CSV beside the PBX
  • Dialplan and directory files drift from what admin saved
  • Agents fail silently when no extension is assigned
  • Reporting pretends Grafana exists when metrics are still placeholders

One platform: Tenant admin saves objects → PostgreSQL → FreeSWITCH Sync (dialplan/SIP) → agent registers SIP.js → preview next lead → originate → disposition

Multi-tenant control plane

  • Three roles: super-admin, tenant admin, agent (JWT + RBAC)
  • Tenant lifecycle, diagnosis and platform health dashboard
  • DB → FreeSWITCH full / dialplan / SIP sync screen
  • Extensions, queues, IVR, DID, trunks and routes as menus
  • Swagger IPPBX API 1.0 with Super-Admin-only tenant create
  • PostgreSQL as truth — not orphan XML on disk

Contact center & agent workspace

  • Campaigns (inbound / outbound / blended) with assigned agents
  • Leads: single add, bulk upload, groups, next-lead preview
  • SIP.js softphone over WSS with ready / break / lunch status
  • Visible “no extension assigned” failure instead of silent SIP fail
  • Active calls via ESL show channels → Socket.IO
  • CDR, contacts and report groups (queue, agent, IVR analytics)
  • Optional recording, CRM pop / webhooks, Prometheus later

Browser agent calling with SIP.js

Agents register from the browser when an extension is linked. Originate can also go through the API. Live events flow ESL → Nest → Socket.IO so screens move without a refresh.

  • No second desktop softphone for many deployments
  • Campaign and dialpad on the same desk
  • Supervisors see live channels, not yesterday’s CDR
  • Honest offline banner when SIP cannot register
  • BYOC or CPaaS trunks behind the same agent UI

SIP.js over WSS to FreeSWITCH; NestJS ESL for originate and events. Carrier path selectable in the quote builder.

Platform architecture

flowchart TB
  subgraph ui [Vue 3 SPA]
    SA[Super-admin]
    TA[Tenant admin]
    AG[Agent workspace]
  end
  API[NestJS /api/v1 JWT RBAC]
  PG[(PostgreSQL tenants PBX campaigns)]
  FS[FreeSWITCH ESL]
  SA --> API
  TA --> API
  AG --> API
  API --> PG
  API --> FS
  FS --> AG

Deployment: Cloud · VPS · On-premises · BYOC · Twilio · Telnyx · Sinch

Proven case study

This product is a productized delivery of the documented engineering case study — evidence stays on this page so you do not have to guess what was shipped.

  • 12 running screens on the published case study
  • Login, dashboard, FreeSWITCH Sync, campaigns, leads, agent workspace
  • Swagger with Super-Admin-only POST /tenants
  • Working-system video of the same stack
  • Honest Prometheus placeholder labelled as incomplete
CCaaS super-admin dashboard with system status and health tiles
Super-admin — is the engine up, and which tenant needs a call?
FreeSWITCH Config Sync with full dialplan and SIP sync buttons
Push DB → XML. PostgreSQL is truth; FreeSWITCH executes.
Agent Workspace with campaign selector dialpad and extension warning
Soft dialer that refuses to pretend SIP works without an extension.
Campaigns table with type status scripts and Add Campaign
Campaigns live next to trunks and IVR — not a CSV beside the PBX.

Full case study with video and FAQ →

Configure this scope & send RFQ →

Built for

MSPs / operators

Sell CCaaS seats with tenant isolation and a sync screen instead of SSH.

CCaaS product teams

Own NestJS + Vue + FreeSWITCH — not Genesys or Five9 seats.

Contact-center founders

Super-admin, tenant admin and agent on one login.

Supervisors

Live channels, reports groups and campaign assignment in the SPA.

Integrated vs fragmented stack

Traditional setupThis product direction
SSH into FreeSWITCH XMLAdmin UI writes PostgreSQL; Sync pushes dialplan/SIP
One office-PC passwordJWT + RolesGuard; agents never see Tenants or Sync
Campaign CSV next to the PBXLeads and campaigns on the same rail as extensions
Silent SIP failureBanner: ask admin to link an extension

Outcomes

Designed to let operators sell seats without snowflake XML per tenant. Case-study screens are a quiet lab capture — zeros are not a published SLA. Runtime is agent preview dial, not a claimed server-side predictive engine.

Deployment & carriers

  • Managed VPS — operate on your cloud account with runbooks.
  • Your cloud — AWS/GCP/Azure; you own the account.
  • On-premises — regulated or air-gapped cores (quote adjusted).
  • BYOC / own SIP — your carrier contract or trunks on the PBX we deploy.
  • Twilio / Telnyx / Sinch — CPaaS pass-through shown in the estimator (planning only).

Estimates are scope-based planning figures — not binding quotes. Taxes, carrier deposits, DIDs and third-party AI usage are scoped in discovery.

Frequently asked questions

Is this a Genesys, Five9 or Amazon Connect login?

No. You own NestJS, Vue, PostgreSQL and FreeSWITCH. UnifiedPBX.in is not a public CCaaS tenant login.

Is this the same as UnifiedPBX on Asterisk 22?

No. Asterisk 22 UnifiedPBX is a different product (Next.js + AMI/ARI). This CCaaS path is Vue 3 + ESL + SIP.js.

Do you ship a predictive dialer?

Campaign types include inbound, outbound and blended. Runtime in this build is agent preview: next lead, then SIP.js or originate. A backend auto-dialer worker is scoped separately.

Can MSPs resell this?

Yes. Super-admin owns tenants; tenant admin owns PBX and campaigns; agents get the workspace. Isolation is tenant-scoped APIs plus FreeSWITCH directory variables.

Can we use our own SIP trunks or Twilio?

Yes. BYOC, own SIP, Twilio, Telnyx and Sinch are in the quote builder.

Can agents call from the browser?

Yes. SIP.js registers over WSS when an extension is linked to the user.

Deploy on our cloud?

Managed VPS, your AWS/GCP/Azure account, or on-prem — selectable in the estimator.

Can you integrate our CRM?

CRM pop / webhook is an optional requirement in the quote builder; discovery confirms APIs.

Requirements



Request formal quote