PRODUCT / INTERNAL BUILD · SAAS CONTROL PLANE

Multi-Tenant AI Receptionist & Voice Operations Platform

AI-powered call handling, lead capture and business workflows—connected to existing telephony infrastructure.

A multi-tenant SaaS platform that helps service businesses manage inbound calls, capture customer requirements, coordinate callbacks and appointments, and configure AI receptionist workflows from a centralized web portal.

Vue 3FastAPIPostgreSQLFreeSWITCH / FusionPBXESLJWT / RBACAI provider integrations
Industry
Home services · clinics · appointment-driven desks
Type
Multi-tenant AI receptionist SaaS
Use cases
Inbound capture · callbacks · voice workflows
Roles
Platform admin · tenant owner · staff
Stack
Vue 3 · FastAPI · PostgreSQL · ESL
Honest split
SaaS control plane · not the PBX media engine
SAAS CONTROL PLANE · NOT THE PBX

The receptionist product is the tenant OS. Telephony stays an adapter.

Built with Vue 3, FastAPI and PostgreSQL, the platform separates customer workspaces from platform administration and integrates with FreeSWITCH/FusionPBX for telephony control. Its visual workflow editor is the foundation for conversation paths, business rules, conditional routing and CRM actions.

This page is not Asterisk voice AI (RTP turn engine) and not a FusionPBX reskin. Sibling SIP+LLM proof: production AI voice agent.

Working-system video

The recording is the live portal — tenant workspaces, agents, leads and platform administration. Same product surfaced on the AI receptionist product page.

Watch on YouTube → · Duration 5:54 · Dedicated demo page →

Growth Plumbing owner dashboard showing inbound calls, captured jobs, bookings and an escalated leak in the tenant workspace
Tenant owner workspace — evaluation seed data on the glass.

Owner overview from the live portal (Growth Plumbing tenant). KPI tiles and activity rows are product chrome on that host — not a published SLA, recovered-job count or uptime figure.

The business problem

Missed calls often mean lost jobs, delayed callbacks and incomplete customer records. Traditional voicemail does not classify urgency, capture structured requirements or give staff a reliable follow-up queue.

The van is on a job, two calls arrive at once, lunch and after-hours go to voicemail, notes live on paper, and the owner reconstructs the day at 10pm. The next plumber or clinic gets the work.

The platform is designed to connect the first customer conversation to the next business action: capture the inquiry, create a lead, request a callback, coordinate an appointment or escalate the call according to configured rules.

Platform capabilities

AI receptionist workflow design

Configure greetings, information collection, business rules, conditional branches, actions and fallback paths through a visual conversation workflow editor. Validate structure before publishing.

Multi-tenant SaaS workspaces

Separate platform administration from each customer’s workspace. Tenant owners manage settings and users; staff focus on calls, leads and bookings.

Native lead and callback management

Turn call outcomes into structured records with caller details, service requirements, urgency, assignment and status — a path from inbound inquiry to follow-up.

PBX and telephony integration

Connect to existing FreeSWITCH/FusionPBX infrastructure through ESL. Keep call control and media handling separate from AI orchestration and business records.

Platform administration

Centralized administration for tenants, users, plans, AI providers, telephony connections and PBX instances, with visibility into usage, costs, health and audit events.

Provider integration architecture

Keep AI, speech, telephony and business integrations behind defined interfaces so credentials, health checks and provider-specific behavior stay independent.

Business use cases: home services, clinics, appointment-driven businesses, multi-location service organizations, and teams building an AI receptionist SaaS in front of a PBX they already run.

Visual workflow builder

Operators configure conversation paths in the tenant agent workspace: a Vue Flow canvas (with a simple-list fallback), graph validation, publish, version rollback, test-lab runs and voice preview. Implemented node types are start, speak, collect, condition, action, knowledge, fallback and end. Action types include create lead, transfer, book, notify staff and end call. Conditions can branch on intent, caller input, phone presence, emergency flags and business hours.

Growth Plumbing Agents screen with published reception and after-hours agents
Tenant Agents list on the live portal — create agents, open workspace, test and toggle runtime.
Agent workspace with Behavior, Knowledge, Voice and AI, Tools, Routing and Leads, and Test Lab tabs
Agent workspace — validate, test and publish workflow specs before deployment. The Vue Flow canvas lives in this workspace on hosts where the visual editor is enabled.

Screenshots captured from the live ZenTech portal host (October 2026), not generated mockups. They show configuration UI; they are not proof of live graph execution on an inbound call.

flowchart LR
  Start[start] --> Speak[speak]
  Speak --> Collect[collect]
  Collect --> Cond{condition}
  Cond -->|emergency| Notify[notify_staff]
  Cond -->|quote| Lead[create_lead]
  Cond -->|closed hours| Fallback[fallback]
  Notify --> End[end]
  Lead --> End
  Fallback --> End
Implemented graph schema — not a generated UI mockup. Live execution of a published graph on an inbound call is deployment-flagged and must be verified on the host, not inferred from the editor.

How a call becomes a business action

  1. A customer calls the business’s existing phone number.
  2. The configured telephony route directs the call to the appropriate handling path.
  3. The receptionist workflow gathers the caller’s intent and relevant information.
  4. Configured AI and business logic determine the next permitted action.
  5. The system records the call outcome and creates or updates the relevant business record.
  6. The owner or staff member reviews the inquiry and follows up from the workspace.

The exact path depends on the tenant’s configuration, available integrations and the capabilities enabled for that deployment.

flowchart TD
  Ring[Inbound DID on existing PBX] --> Route[FreeSWITCH / FusionPBX route]
  Route --> ESL[ESL park / handling path]
  ESL --> WF[Receptionist workflow]
  WF --> Logic[Configured AI and business rules]
  Logic --> Rec[Call outcome record]
  Rec --> Job[Lead, callback, booking or escalation]
  Job --> Owner[Owner Vue workspace]
  Job --> Staff[Staff follow-up list]
Call handling to captured work — multi-tenant by workspace. Media stays on the PBX; the SaaS plane stores the business record.

Platform architecture

Face, API, adapters. Isolation is an auth and row rule, not a shared spreadsheet with a company column.

LayerImplementation
Web portalVue 3 and Vite for the tenant workspace, workflow editor and platform administration.
Application APIFastAPI for authentication, authorization, tenant-scoped operations, workflow configuration and business records.
Data layerPostgreSQL for the SaaS application and persistent tenant data on the production path. Local evaluation can run against an in-memory seed store.
TelephonyFreeSWITCH/FusionPBX integration through ESL. Call control stays separate from AI-provider orchestration. The project does not provision the PBX.
AI and speechProvider integrations for language-model processing and speech services, enabled according to deployment configuration and available credentials. Evaluation can run in mock mode.
Operational controlsRole-based access, tenant-scoped API operations, provider configuration, usage and cost reporting, monitoring and audit events.
flowchart TB
  Portal[Vue 3 owner / staff / platform admin]
  API[FastAPI JWT tenants workflows records]
  DB[(PostgreSQL SaaS tables)]
  FS[FreeSWITCH / FusionPBX ESL]
  AI[AI and speech provider adapters]
  Portal --> API
  API --> DB
  FS --> API
  API --> AI
SaaS control plane in front of an existing PBX. Asterisk ARI remains a legacy adapter in the repo; it is not the current production telephony contract.

An Asterisk ARI adapter and webhook still exist for development and legacy paths. Do not read this page as “we ripped Asterisk out of the source tree.” Read it as: the live telephony contract for this product is ESL + Fusion CDR, with the PBX you already have.

Platform administration and operational visibility

The control plane is designed to support the operational responsibilities of a multi-customer voice platform:

  • Create and manage customer tenants and user access.
  • Assign plans and review usage and cost allocation.
  • Configure AI providers and telephony connections.
  • Register PBX instances and test connectivity.
  • Review application health, provider status and operational incidents.
  • Inspect audit events associated with important administrative changes.
  • Manage access policies and monitor security-related configuration.

The depth of each control depends on the implemented integration and the deployment’s current capabilities. Usage reporting is not billing collection. Health indicators should reflect real probes rather than manually entered status values.

ZenTech platform overview with two active businesses, usage tiles and a company flagged for attention

Platform overview from the live admin workspace. Usage and margin tiles reflect that host’s data — not a published finance or uptime claim.

Tenant list with City Clinic and Growth Plumbing, plans, call volume, edit and pause actions

Tenant list: onboard a company, assign a plan, pause if they stop paying or go on holiday, compare call volume and cost. A plumber does not use this screen every day. A franchise, MSP or SaaS operator does. Later admin screens — PBX registry, security policy, live-call board — exist in the product and are not shown in this older capture.

Owner and staff — same shop, different keys

The owner’s question: “What happened on the phones while I was on a job?” The staff question: “What do I call back this morning?”

Growth Plumbing team list with tenant-owner and tenant-staff roles

Owners add a coordinator, change a role, or disable access when someone leaves. You should not share one office-PC password. Evaluation names stay on the glass; they are not listed here as credentials.

Growth Plumbing staff dashboard with the same jobs and no Users menu

Staff home looks like the owner’s home on purpose — they still need calls, leads and bookings. Look at the left menu: there is no Users item. They cannot open head-office screens. If they try, the API sends them back to their own shop.

A different business, the same product

City Clinic owner dashboard with a booked follow-up appointment and no plumbing jobs

City Clinic in this evaluation wants follow-up appointments, not leak emergencies. Latest call is booked, not escalated. Whose data? Only the clinic. Growth Plumbing never sees patient bookings. That is how you run many businesses on one platform and still stay professional. Isolation is enforced at login and API first; PostgreSQL row-level security exists as optional SQL, not as the default fleet guarantee.

Lead management lifecycle

Call outcomes become structured leads with caller details, service requirements, urgency, assignment and status. Status is not a free-form PATCH: the portal uses an explicit transition API and records history.

Tenant Leads queue with status filters and lead rows
Leads queue in the tenant workspace — structured follow-up instead of voicemail notes.

Supported statuses: new → qualified → assigned → contact_attempted → contacted → booking_pending → converted. Terminal states are converted, closed and lost. closed and lost may move to reopened. converted has no outbound transition.

flowchart LR
  N[new] --> Q[qualified]
  N --> A[assigned]
  Q --> A
  A --> CA[contact_attempted]
  CA --> C[contacted]
  C --> B[booking_pending]
  B --> V[converted]
  C --> X[closed / lost]
  X --> R[reopened]
Implemented lead state machine. Assignment can auto-move new or qualified leads to assigned, then store the assignee.

Production readiness

Engineering focus now is end-to-end workflow execution, reliable call-to-lead processing, explicit lead lifecycle transitions, PBX adapter consistency, tenant isolation and operational observability.

Production readiness requires validating real calls, AI provider behavior, fallback paths, persistent records, access boundaries and recovery procedures — not just a successful portal demonstration.

AreaStatus
Vue portal, JWT roles, tenant and admin workspacesImplemented
PostgreSQL SaaS persistence (production path)Implemented; required when the app runs in production mode
Visual workflow editor, validate, publish, rollbackImplemented
Lead transition API and historyImplemented
FreeSWITCH ESL + Fusion CDR ingestImplemented; host- and flag-dependent
Live graph execution on an inbound callPartial — deployment flag; speech path still needs host verification
Full-duplex streaming STT on the reference hostOutstanding — playback fallback exists; duplex media module is not assumed
Usage and cost summariesImplemented as reporting; not live billing collection
Stripe checkoutPartial — routes exist; this case does not claim a live charge
Call recording storage and playbackOutstanding
Fleet-wide PostgreSQL RLSPartial — optional flag, not the default
HttpOnly cookie sessions, tenant MFA product, full OTel/SLOsOutstanding
Asterisk ARI as the live production pathRemoved as a claim — adapter remains for legacy/dev

Local evaluation can still run without live phone or AI keys (mock providers and seed data). That is useful for a portal review. It is not evidence that a given host is answering real callers with a published graph.

My role

Architecture + Vue portal + FastAPI SaaS plane + FreeSWITCH/FusionPBX ESL adapter wiring, with JWT/RBAC tenancy and provider interfaces. Evaluation logins and live provider secrets stay off this page.

Architecture Vue 3 FastAPI PostgreSQL ESL JWT / RBAC

What this system established

No invented faster-percent claims. What is actually on the glass and in the APIs:

  • A signed-in portal for platform operators, tenant owners and tenant staff
  • Two isolated evaluation workspaces — field service vs clinic — on the same product
  • Owner can manage team access; staff cannot
  • Calls written up as leads, bookings or escalations instead of a voicemail pile
  • A visual conversation graph with validation and publish, distinct from live call execution
  • Provider adapters so evaluation does not require live AI or phone keys
  • A clear split from the Asterisk RTP turn-engine case

What “good” looks like after a pilot is the team opening this website instead of reconstructing the day from voicemail. Exact recovered-job counts depend on your volume, scripts and how fast people work the list.

Architectural insight

If the voice agent answers and the office still has no queue, you built a talking voicemail. If two companies share a login, you built a leak. The receptionist product is the tenant OS — roles, isolation, the morning list and the workflow graph — with the PBX and the model as adapters behind it.

Related: Asterisk voice AI (RTP turn engine), production AI voice agent, and AI call center when the buyer is a seat-selling CCaaS, not a two-van shop.

Project engagement

This architecture is relevant to teams building AI receptionist products, vertical voice automation, multi-tenant communication SaaS or integrations between an existing PBX and a business application.

Engagements can begin with an architecture review, a telephony integration assessment, a workflow prototype or a staged implementation.

Discuss your AI receptionist or voice automation project

FAQ — buyer and architecture questions

Ten questions about this case, the PBX split, and how an engagement starts.

No. Asterisk voice AI is the ExternalMedia RTP media path. This page is the signed-in SaaS control plane: tenant workspaces, workflow configuration, leads and platform administration. They can sit in the same practice; they are not the same product.

No. FreeSWITCH and FusionPBX handle call control and media. The application orchestrates AI, business records and operator screens beside that telephony layer.

No. An Asterisk ARI adapter remains in the codebase for legacy and development use. The current telephony contract is FreeSWITCH/FusionPBX through ESL, with Fusion CDR ingested into call sessions.

No. Operators can design, validate and publish a conversation graph in the Vue editor. Whether that graph drives a live call depends on deployment flags, FreeSWITCH modules and the speech providers enabled for that host.

No. Figures on the screenshots are from evaluation workspaces so the product can be shown with realistic volume. They are not a published SLA, recovered-job count or uptime claim.

The implemented lifecycle is new, qualified, assigned, contact_attempted, contacted, booking_pending, converted, closed, lost and reopened. Status changes go through an explicit transition API rather than a free-form patch.

No. The API derives quota, cost allocation and plan summaries. This case does not claim live Stripe charges or fleet billing operations.

Yes. Overflow and after-hours receptionist is a common first phase before daytime coverage or a wider SaaS rollout.

Current PBX (FreeSWITCH, FusionPBX, Asterisk or CPaaS), inbound number, what is urgent, who should see the morning list, CRM or booking system, languages and any deadline. A short call recording or screenshot beats a 40-page RFP. Use the project brief

Founders, CTOs, telecom leads and SaaS product owners building an AI receptionist, vertical voice automation, or a control plane in front of an existing PBX — not buyers who only need seats on a mass-market suite.

Discuss your AI receptionist or voice automation project

Share the number, what is urgent, and who should see the morning list. The first reply is whether this is a receptionist SaaS, a CCaaS seat product, or the RTP path — architecture, not a brochure.

Discuss Your Project