Appearance
AI Voice Call Center (Convai)
Convai (menu name "AI Call Center", app slug convai) is Lubb ERP's AI voice-agent module: it lets admin staff build, test and run voice agents that qualify leads, chase debtors or field inbound calls, and it wires every real call back into the CRM pipeline as a deal, activity and (where relevant) a scheduled callback or promise-to-pay. It's used by sales/collections admins to design and monitor agents, and runs unattended once a campaign is started — placing or answering calls, scoring outcomes, and handing off to a human only when the agent decides to transfer.
What you can do
- Build voice agents in the Trainer — have a conversation with the Trainer chat to define an agent's persona, qualifying questions/criteria, consent script and transfer rules; upload reference documents to seed its knowledge; every save compiles a new immutable, versioned agent definition (with an editable system prompt) rather than overwriting the live one.
- Run test calls in the Test Studio — simulate a call against a saved caller persona/scenario (text sim, or in-browser voice), or run a whole regression suite of scenarios at once, and get a structured evaluation (pass/fail vs. ground truth, per-criterion scoring trace, compliance/transfer checks and suggested prompt edits you can apply straight back to the Trainer).
- Manage agents — activate, archive or delete an agent, see its live version number and description on the Agents grid.
- Run the live Call Center — place a real outbound qualification call to a CRM deal's contact with one click, or launch "Start calling new leads" against a whole campaign; a Live toggle on Call Logs shows calls in progress.
- Review Call Logs — every sim/voice/SIP call session with mode, status, phase, qualified/score, outcome, call duration and billed seconds, plus transcript and recording where captured; expandable from a deal's own Calls tab.
- Run outbound campaigns and a deals pipeline — group leads into a named Campaign (qualifier / debtors / quote follow-up) tied to one agent, work its targets as a Kanban board of Campaign Target deals across pipeline stages, reset a deal's call count, build a quotation from a qualified deal, or refresh a debtors campaign with newly overdue customers.
- Manage Callbacks and Debtor Commitments — a calendar of scheduled callback slots the agent booked with a lead, and (for debt-collection calls) logged promise-to-pay commitments, each carrying a snapshot of the lead's captured info.
- Send SMS from a call outcome — confirm a booked callback, send a debtor a promise-to-pay reminder, or send/track bulk SMS through the same panel.
- Administer the commercial package layer (operator-level) — edit the Starter/Growth/Professional/Enterprise package ladder (price, included minutes, agent/line caps, languages, features), assign/suspend a tenant's subscription (which also controls whether the AI Call Center app is visible to them at all), and review closed billing-period usage/overage per tenant.
Common tasks
Create and train a new agent Go to Agents → open the Trainer and describe the agent's job (what it should ask, when it should qualify vs. disqualify, when to transfer to a human) in the chat. The Trainer turns the conversation into a draft agent definition; each meaningful change compiles a new version. Saving activates it for use in the Test Studio and, once you're happy, in real calls.
Test an agent before going live From the Test Studio, pick a scenario (a caller persona with a known "should qualify / should not" ground truth) and run it as a text simulation or in-browser voice call. Read the evaluation report — decision correctness, compliance checks, transfer correctness, and any suggested edits — and apply an edit straight back to the Trainer if the agent got something wrong. Run the whole scenario suite for a regression check after any prompt change.
Launch an outbound campaign On the Leads grid, select leads and use "Create call center campaign" (or "Send to AI Call Center" if the leads live on a different site) to create a named Campaign and open a Campaign Target deal per lead, each pointing at that campaign's agent. Open Campaign Targets, click "Start calling new leads" to begin dialling untouched targets, and watch progress on Call Logs (Live toggle) or the campaign's target-count link back on the Campaigns grid.
Place a one-off qualification call From Campaign Targets (or a deal's drawer), click "Qualify (call)" on a single deal to place a real outbound call to its contact right now. If an agent has already called this deal the maximum number of times, use "Reset call count" to allow it again.
Review what happened on a call Open Call Logs (or expand a deal's Calls tab) to see status, phase, qualification, score, outcome, duration and billed seconds for each session; captured lead fields and per-criterion scores are available per row. Recordings (where the plan/feature supports them) and transcripts are attached to the session.
Assign or change a tenant's package As an operator, use AI Call Center Subscriptions to put a tenant on a package (Starter/Growth/Professional/Enterprise) or a per-customer override (extra minutes, agents, lines, features); suspending a subscription removes the app from that tenant entirely. AI Call Center Usage shows each tenant's closed billing periods with minutes used, overage and invoice reference.
Data model
- QualAgent (
panel_qual_agents) — a configured voice agent: name, slug, status (draft/active/archived), current version, and live in-progress Trainer state (draft definition, session id, transcript) so re-entering the Trainer resumes where you left off. - QualAgentVersion (
panel_qual_agent_versions) — an immutable, versioned snapshot of an agent's compiled definition and system prompt; every Trainer save creates a new one rather than mutating the live agent. - QualScenario (
panel_qual_scenarios) — a test caller persona plus ground truth (should it qualify, expected action, edge cases) used by the Test Studio's regression suite. - QualCallSession (
panel_qual_call_sessions) — one call (sim, in-browser voice, or real SIP): agent/version, matched CRM deal (deal_id), status/phase, qualification/score, captured fields, metering (duration_seconds,billable_seconds,billable) and recording path/size. This is the row the Call Logs grid and a deal's Calls tab both read. - QualCallTurn (
panel_qual_call_turns) — one turn (caller/agent/system) within a call session, with structured field updates and per-turn timing. - QualEvalReport (
panel_qual_eval_reports) — the Test Studio's structured evaluation of a call against a scenario's ground truth (pass/fail, compliance/transfer checks, suggested edits). - QualTransferEvent (
panel_qual_transfer_events) — a warm-handoff (or attempted handoff) to a human, with the context payload passed along. - QualCallback (
panel_qual_callbacks) — a scheduled callback booked with a lead during a call, shown on the Callbacks calendar. - DebtorCommitment (
panel_debtor_commitments) — a debtor's logged promise-to-pay from a collections call, linked back to the CRM deal/customer where known. - QualPlan / QualTenantPlan / QualUsagePeriod (
panel_qual_plans/_tenant_plans/_usage_periods) — the commercial layer: package tiers, which tenant is on which tier (and whether the app is visible to them at all), and closed-period metered usage for billing.
Relationship to CRM: a QualCallSession is phone-matched to a CrmDeal (deal_id) the first time a match is found; a CrmCampaign of type qualifier/debtors/quote groups deals and points at one QualAgent; every real call also logs a CrmActivity (kind call) against its deal, which is what deal-level call counts and "last called" indicators are derived from.
Configuration & integrations
- Voice/telephony worker — real voice and SIP calls are placed and answered by the separate telecloud-conversational-ai service (
settings.VOICE_WORKER_URL), which bridges SIP audio, mixes and uploads call recordings, and streams turns back to the API's/panel/qualifier/voice-turn/*and/sip/call-outendpoints. The API itself only speaks turn-by-turn JSON/audio events with this worker; it doesn't touch SIP directly. - Text-to-speech — Azure TTS voices for English, Afrikaans and isiZulu (
af-ZA/en-ZA/zu-ZA), gated by which languages a tenant's package includes. - LLM brains — the agent's conversational "brain" runs on Claude (configurable per deployment:
QUALIFIER_LLM_MODELfor text/sim calls, a lighterQUALIFIER_VOICE_LLM_MODELfor live voice scoring reliability), invoked through the platform's Claude CLI bridge; a separate small extraction model is used for structured field-extraction utility calls. - SMS — callback confirmations, debtor reminders and bulk SMS are sent through the tenant's configured SMS provider credentials (Panacea).
- Commercial entitlement — every cap (agents, concurrent lines, included minutes, languages, features) is read through
qualifier_plans.entitlements()off the tenant'sQualTenantPlan; a tenant with no subscription row is treated as unmetered/internal, but the AI Call Center app itself is only visible with an active subscription. - Billing item linkage — each package tier can reference the accounting catalogue item codes (
item_code, setup/overage item codes) it bills through, keeping the package price and the sellable product in step.
API reference
All routes are mounted under /panel/qualifier and are tenant-scoped via require_role (a second tenant sees none of another's agents, scenarios or logs).
| Method | Path | Purpose |
|---|---|---|
| GET/POST | /panel/qualifier/agents | List / create voice agents |
| GET/PATCH/DELETE | /panel/qualifier/agents/{slug} | Read, update or delete an agent |
| GET | /panel/qualifier/agents/{slug}/versions | List an agent's compiled versions |
| POST | /panel/qualifier/agents/{slug}/versions | Save a new compiled version |
| GET/PUT | /panel/qualifier/trainer-rules | Read/set the site-wide Trainer rules |
| PUT | /panel/qualifier/agents/{slug}/persona | Set an agent's persona rules |
| POST | /panel/qualifier/agents/{slug}/persona/apply | Apply pending persona rules to the draft |
| POST | /panel/qualifier/agents/{slug}/trainer | Send a message in the Trainer chat |
| POST | /panel/qualifier/agents/{slug}/trainer/fork | Fork the Trainer conversation |
| POST | /panel/qualifier/agents/{slug}/trainer/reset | Reset the Trainer session |
| POST | /panel/qualifier/agents/{slug}/trainer/upload | Upload a reference document into the Trainer's knowledge |
| POST | /panel/qualifier/agents/{slug}/compile | Compile the current draft into a system prompt |
| POST | /panel/qualifier/agents/{slug}/apply-edit | Apply a single suggested edit from an eval report |
| GET/POST | /panel/qualifier/scenarios | List / create test scenarios |
| PATCH/DELETE | /panel/qualifier/scenarios/{slug} | Update or delete a scenario |
| POST | /panel/qualifier/scenarios/generate | Generate a scenario from a prompt |
| POST | /panel/qualifier/run | Run one test call (sim/voice) against an agent/scenario |
| WS | /panel/qualifier/run-ws | Live test-call streaming (Test Studio in-browser voice) |
| POST | /panel/qualifier/run-suite | Run a full regression suite |
| POST | /panel/qualifier/call-out | Place a real outbound SIP call |
| POST | /panel/qualifier/voice-turn/open / /{call_id} / /{call_id}/end / /{call_id}/stream | Turn-by-turn exchange with the voice worker for a live call |
| GET | /panel/qualifier/calls | List call sessions (Call Logs grid) |
| GET | /panel/qualifier/calls/{call_id} | Read one call session (transcript, eval) |
| POST | /panel/qualifier/calls/{call_id}/stop | End a running call |
| POST/GET | /panel/qualifier/calls/{call_id}/recording | Upload / fetch a call's recording |
| POST | /panel/qualifier/calls/clear | Bulk-clear call sessions |
| GET/POST | /panel/qualifier/callbacks | List / create scheduled callbacks |
| PATCH/DELETE | /panel/qualifier/callbacks/{callback_id} | Update or delete a callback |
| GET/POST | /panel/qualifier/commitments | List / create debtor commitments |
| PATCH/DELETE | /panel/qualifier/commitments/{commitment_id} | Update or delete a commitment |
| GET/PUT | /panel/qualifier/plan | Read/assign a tenant's package (operator) |
| GET | /panel/qualifier/plans | List package tiers |
| GET | /panel/qualifier/usage/history | List a tenant's closed billing periods |
| POST | /panel/qualifier/retention/purge | Purge expired call recordings/data |
| GET/POST | /panel/qualifier/sms/* | SMS status/balance/inbox/send for call-driven texting |
Agents, packages, subscriptions and usage also have generic grid CRUD at /grid/qualifier-agents, /grid/qualifier-calls (read-only), /grid/qualifier-plans, /grid/qualifier-subscriptions and /grid/qualifier-usage (read-only), and the CRM side (Campaigns, Campaign Targets/deals) is served the same way at /grid/crm-campaigns and /grid/deals, both with bespoke row/bulk-action buttons (create campaign, start calling, qualify, reset calls, refresh debtors) layered on top of standard grid CRUD.