AI Technician (answers the phone, works the queue).
AI answers the phone. Opens tickets. Reads status back to callers. 24/7.
- →Client calls your number. AI answers in their language, identifies the caller, opens a ticket.
- →Client calls to check status. AI looks up existing tickets and reads back state, ETA, last action, technician assigned.
- →Off-hours, overflow, or primary line — the voice agent handles all three cases.
The actual product.
Screens from a running instance on demonstration data. Softened on purpose — customer records never appear on this site.

The bracketed lines are not spoken. The caller gets ordinary intake questions; the brackets are what Ana worked out while asking them, and what she hands to the technician.
- Ana
Good afternoon. I am Ana, the A.I. assistant at MegaMsp. I am still in training, so please bear with me. I will be recording this call so I can understand the language better in future — if you would rather I did not, please hang up now and email us instead. My colleagues are on other calls, so I will take your IT problem myself, or I can record a message for one of them.
not spoken[Introduces herself as an A.I. in the first second, and the recording consent is spoken out loud rather than buried in a terms page. In the background the number has already resolved: Poblenou Logistics, Laura Bosch.]
- Ana
Am I speaking with Laura Bosch, from Poblenou Logistics?
not spoken[A number match is a hypothesis, not proof — it gets confirmed out loud. Had the number mapped to more than one company, the question would have been which company she is calling from.]
- Caller
Yes, that's me.
not spoken[Identity confirmed, so the ticket is pinned to this client and this requester rather than to a guess.]
- Ana
I am listening. Tell me, please, how I can help.
not spoken[A neutral opening: a caller may only want to leave a message for a colleague, so a problem is never assumed.]
- Caller
The label printers in the packing hall have stopped.
not spoken[Intent is an incident. Opens the client's estate — 12 endpoints, one server. Says nothing about it.]
- Ana
I understand. Since when has this been happening?
not spoken[Pins the start time so the log window can be cut precisely.]
- Caller
Since about twenty to ten this morning.
not spoken[Window 09:30 to now. Alerts on BCN-WH-SRV01 in that window: the print service stopped three times since 09:38. Correlation, not diagnosis.]
- Ana
And is it the whole hall, or one station?
not spoken[Scope: a shared component, or a single device.]
- Caller
All of them. The jobs go in and nothing comes out.
not spoken[Every device on the site rather than one, so something they share. Consistent with the alert.]
- Ana
Has anyone tried printing from a different computer?
not spoken[Rules out the workstation — the question that separates her PC from their server.]
- Caller
Yes, from the office as well. Same thing.
not spoken[Server side confirmed. Event log on the host: the spooler is faulting, 47 jobs held in the spool folder.]
- Ana
Thank you. Is this holding anything up right now?
not spoken[Impact. Priority is set from the business consequence, not from how loud the caller is.]
- Caller
Yes — two trucks leave at two and we cannot label the pallets.
not spoken[Dispatch blocked against a hard 14:00 deadline, so this goes up as high priority.]
- Ana
Let me read that back: nothing is printing on any of the label printers in the packing hall — the jobs go in and nothing comes out — since about nine forty this morning, the same from a computer in the office, and it is holding up a dispatch at two. Have I got that right?
not spoken[The read-back is spoken, and the caller's yes is what commits the ticket.]
- Caller
Yes, that is it.
not spoken[Confirmed. Now she looks for a KB article, a runbook and any history before writing the ticket.]
- Ana
Thank you. I am opening a ticket now and a technician will pick it up remotely. There is nothing you need to do at your end — you will get an email with the ticket number.
not spoken[No promised deadline and no diagnosis given to the caller. The finding goes to the technician, not down the phone.]
- Caller
Alright. Thank you.
- Ana
Thank you Laura. Have a good day.
not spoken[Call ends at 2 min 41 s. The recording and the transcript are attached to the ticket.]
What the technician gets
- Caller
- Laura Bosch · Poblenou Logistics · +34 933 08 41 22 — identified by number, confirmed on the call
- Problem
- Every label printer in the packing hall stopped at about 09:40. Dispatch blocked, two trucks leave at 14:00.
- From the call
- All devices, not one · reproduced from a second computer · hard 14:00 deadline
- Queried automatically
- BCN-WH-SRV01 — print service stopped 3× since 09:38; event log shows the spooler faulting, 47 jobs held in the spool folder
- Knowledge base
- “Print Spooler crash loop — clearing the spool queue” — article found and attached
- Runbook
- Available and automated: clear the queue, restart the service, set the recovery policy. Ana can apply it directly, on approval.
- History, this client
- Same fault on 14 May, fixed by the same runbook
- History, other clients
- Three clients this quarter, every one after a driver update — ZDesigner 8.4.2 the common factor
- Priority
- High · transcript and recording attached

Core capabilities.
Inbound call → ticket
Caller number matched to client. Voice captured, transcribed, summarised. Ticket created with caller metadata and audio transcript attached.
Status lookup by phone
Caller asks "what is the status of my case from yesterday?" — agent finds open tickets for the caller, reads summary + last technician note + SLA deadline.
Multi-language
Speaks RO / EN / DE / FR — picks language automatically from greeting, or per-client configuration.
Caller identification
Caller ID matched against client contact list. Falls back to asking for VAT / company code if unknown.
Handoff to human
Caller can ask for a technician at any time. Agent transfers to on-call rotation or warm-transfer to assigned technician.
Call recording + transcript
Every call recorded + transcribed. Attached to the ticket it created or updated. Retention per-client.
Service account auth
Dedicated `voice-agent@mspcorex.com` service account. API-key authenticated (SHA-256 hashed at rest). Pre-auth interceptor in the pipeline.
Rate limiting + IP allowlist
Configurable rate_limit_per_minute (default 30). `allowed_ips` JSON allowlist enforced at auth.
Full audit on every call
Every action the voice agent takes on behalf of a caller produces a normal audit event (voice-agent as actor). Chain-of-reasoning logged.
Per-tenant opt-in
Voice agent is off by default. Enabled per-tenant via `/admin/voice-agent/config`. API keys generated + revocable from the admin UI.
Business-hours routing
Can act as after-hours fallback only, or as primary line. Per-client schedule.
Escalation policies
SLA breach imminent → voice agent proactively calls the on-call technician with ticket brief.
Asterisk PBX receives SIP calls (per-tenant DIDs). Asterisk routes to DGX inference server (voice model) via ARI/AGI/WebSocket. DGX authenticates to the MspCoreX API with a hashed API key (`voice_agent_api_keys` table, SHA-256 at rest). The voice agent runs through a dedicated pre-auth interceptor (`voiceAgentAuth.ts`) that sets the service-account identity before the normal pipeline (tenant context, ACL, audit). Every call produces the same audit events as a human technician would.
FAQ.
Does the AI handle every call?+
Per-client config. Options: always, after-hours only, overflow only (when no tech picks up in N seconds), or never.
What if the AI does not understand?+
Escalates to human: transfers to on-call rotation, or schedules a callback, or offers to send an email confirmation to the caller for the technician.
Does the call audio leave your infrastructure?+
No. Speech-to-text, the language model and the speech synthesis all run on the technician’s own GPU, on our own hardware. The recording and the transcript never leave it. Ticket text can reach a fallback provider on other AI features — every one of them is on our sub-processor register.
Privacy of recordings?+
Recording opt-in is enforced before the call starts (voice prompt). Recordings encrypted at rest. Retention per-client. Deletable on demand.
Which telephony provider?+
Any SIP trunk. We integrate through Asterisk PBX that we deploy + maintain (or connect to yours). Tested against major EU telephony providers.
Can it book callbacks instead of talking live?+
Yes — "leave a message" + "schedule a callback for tomorrow morning" flows are built in.
How is the AI instance isolated per-tenant?+
Each tenant has its own voice-agent API key, its own `allowed_ips`, and rate limit. Inference is shared infrastructure in EU but stateless per-call — no cross-tenant context.
Related modules.
PSA & Ticketing
Tickets, statuses, dispatch. SLA-aware. AI-triaged. SSE real-time.
AI & Automation
Triage, session summary, anomaly detection, KB authoring, translation.
Integrations
OAuth, webhooks, typed API, company lookup, payment gateways, voice.
Mobile (iOS & Android)
On-call workflow on your phone. Push. Remote triage. Biometric unlock.