MX
PBX Command
MatrixPBX operations console
Email
Password
{{ icAlertSm }}{{ loginErr }}
Enter the 6-digit code from your authenticator app for {{ loginEmail }}
{{ icAlertSm }}{{ codeErrMsg }}
← Back
MX
PBX Command
{{ item.icon }} {{ item.label }} {{ item.badge }} {{ icShieldSm }}
{{ footerText }}
{{ pageTitle }}
{{ icSearch }} ⌘K
Connected
{{ themeIcon }}
{{ userInitials }}
{{ userName }}
{{ userRole }}
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Live Calls
{{ liveCountDash }}
CallerQueueAgentStatusDuration
No active calls right now
{{ c.caller }} {{ c.queue }} {{ c.agent }} {{ c.state }} {{ c.dur }}
Trunk Status
{{ t.name }} {{ t.regAgo }} {{ t.load }}
Extensions
{{ extOnlineCount }}
{{ e.ext }} {{ e.name }} {{ e.st }}
Recent Activity
{{ a.t }} {{ a.x }}
Inbound calls per hour — today
0006121823
System Health
{{ h.label }} {{ h.val }}
Asterisk uptime
{{ astUptime }}
AI agents ready
{{ agentsReady }}
{{ icPhoneLg }}
No active calls
Queues are open — waiting for callers on 6 DIDs
Ongoing · {{ liveCount }}
+ New call
{{ c.caller }} {{ c.dur }} ⧉
→ {{ c.did }} · {{ c.queue }}
{{ c.state }}
{{ selName }} {{ selCaller }}
Call #{{ selId }} · {{ selQueue }} · answered by {{ selAgent }}
{{ icPlaySm }} {{ listenLabel }}
{{ icVolume }}
{{ l.speaker }} {{ l.t }}
{{ l.x }}
Coach the AI
Opening survey {{ svDone }}/{{ svTotal }}
{{ r.q }} {{ r.a }}
Call metadata
{{ m.k }} {{ m.v }}
Transfer call #{{ selId }}
Pick a human extension — the call transfers instantly.
{{ x.ext }} {{ x.name }} {{ x.status }}
{{ icAlertSm }}Hang up call #{{ selId }}?
The caller {{ selCaller }} will be disconnected immediately. The partial survey will be saved as a Partial lead.
New AI outbound call
Pick which AI agent calls, the number to dial, and the trunk to place it on.
AI agent
Number to call
Enter in full international format, e.g. +1…
Outbound trunk
Caller ID (optional — blank uses the trunk default)
QueueExtStatusDIDsAI agentMembersTotal callsAnsweredAbandonedAvg duration
{{ q.name }} {{ q.ext }} {{ q.status }} {{ q.dids }} {{ q.agent }} {{ q.members }} {{ q.total }} {{ q.answered }} {{ q.abandoned }} {{ q.avgDur }} ✕
{{ qdName }}
ext {{ qdExt }} {{ qdStatus }}
Members: {{ qdMembers }}
Waiting now — {{ qdWaitCount }}
{{ w.caller }} position {{ w.pos }} {{ w.dur }}
In progress — {{ qdActiveCount }}
{{ w.caller }} {{ w.state }} {{ w.dur }}
Today — answered vs abandoned
Answered {{ qdAnswered }} Abandoned {{ qdAbandoned }}
{{ a.initials }}
{{ a.name }} ext {{ a.ext }}
{{ a.lang }} · {{ a.voice }}
{{ a.status }} ✕
STT: {{ a.stt }} {{ a.surveys }}
{{ a.queues }} {{ a.calls }} calls today
{{ aeTitle }}
Identity
Name
Extension
Language
TTS engine
TTS voice
Persona
System prompt
Greeting script · tone & style go in the system prompt above
Brain
LLM model
Temperature · 0.3–0.5 keeps it on-script{{ aeTemp }}
STT · Deepgram Nova-2 {{ aeTtsBadge }} Language follows the selector above.
Surveys
Opening capture set
Closing capture set
When done — transfer to
Chain example: an opening agent transfers to a closing AI agent — the closing agent automatically receives the first call's summary and all captured fields — which then transfers to a human extension.
Silence handling (built-in) · If the caller stops responding, the agent nudges at 15s, 45s, 90s, 120s and 150s ("are you still there?"). If there's still no reply by 180s it says a closing line and hangs up. No max call duration — calls run as long as the conversation needs.
The agent's system prompt drives the whole conversation. These capture fields define what data each call pulls out into a lead — the AI fills them in live as it talks, so a mid-call hangup still keeps whatever was answered. Add one field per value you want on the lead.
These fields become columns on every lead and lines in the Telegram summary.
Opening capture fields · {{ opCount }}
{{ q.map }} {{ q.q }} {{ q.type }} ✕
No opening fields yet — add the values to capture early in the call.
Closing capture fields · {{ clCount }}
{{ q.map }} {{ q.q }} {{ q.type }} ✕
No closing fields yet — add the values captured near the end of the call.
{{ sqTitle }}
Field name / lead column
Answer type
What to capture · tells the AI what value to extract
{{ leadCount }} leads
NameEmailNumberQueueTransferred toKey answersTGDate
{{ l.name }} {{ l.email }} {{ l.num }} {{ l.queue }} {{ l.xfer }} {{ l.preview }} {{ l.tgIcon }} {{ l.date }}
{{ ldName }}
{{ ldDisp }} Score {{ ldScore }} Survey {{ ldSurveyNum }}
{{ ldDate }}
0:00 / {{ ldDur }}
Survey answers · 25 of 25
{{ a.n }} {{ a.q }} {{ a.a }}
Call metadata
{{ m.k }}{{ m.v }}
Call recording
No recording
Full transcript
{{ ldTrIcon }}
{{ l.speaker }} {{ l.t }}
{{ l.x }}
{{ t.name }} {{ t.provider }}
{{ t.regAgo }} ✕
{{ t.host }}:{{ t.port }} · {{ t.user }} · {{ t.auth }}
Active calls{{ t.active }} / {{ t.cap }}
{{ t.today }} calls today {{ t.didCount }} DIDs · CID: {{ t.cidMode }}
{{ tmTitle }}
Trunk name
Provider
Host
Port
Username
Password · superadmin only
Auth type
SIP transport
Daily call limit
Provider IP(s) · firewall allowlist, comma-separated
DIDs on this trunk
Route incoming calls to · sets inbound routing automatically — no separate rule needed
For a multi-account provider like DialCS, point all of an account's username-trunks at the same queue. Simultaneous-ring forks are auto-deduplicated to one call.
Use this trunk for outbound (manual) calls
Outbound Caller ID · choose one
Inbound Outbound (manual)
Route by the trunk (account/username) the call arrives on — the standard way for multi-account providers like DialCS. Leave DID blank to route all calls on that trunk. Simultaneous-ring forks are auto-deduplicated to one call.
On trunk (account)
DID · optional
Send to
PriDID / Trunk matchDestinationEnabled
{{ icGrip }} {{ r.pri }} {{ r.match }} {{ r.dest }}
Manual calls only — placed by staff from registered softphones. There is no automated outbound dialing.
Extension / prefix
Via trunk
Extension / prefixTrunk failover orderCaller ID policy
{{ r.match }} {{ t.label }} {{ r.cid }}
ExtDisplay nameRegistrationOutboundTrunkAI transfer target
{{ x.ext }} {{ x.name }} {{ x.regInfo }} {{ x.trunk }} {{ x.trIcon }}{{ x.trLabel }}
New extension
Extension
Display name
Role
Outbound trunk
{{ icCopy }} copy
Server {{ exServer }}
Port {{ exPort }} (UDP)
User {{ exExt }}
Pass {{ exSecret }}
✓ strong password generated · save before it's gone
QR provisioning
(Zoiper / Linphone)
{{ qeModalTitle }}
Basics
Queue name
Extension
DIDs routed here
{{ d.label }}
Assigned AI agent
{{ qeAgInitials }}
{{ qeAgent }} · {{ qeAgVoice }}
“{{ qeAgPersona }}”
Members — human extensions
{{ m.label }}
The AI agent answers queue calls; member extensions ring on overflow and receive transfers. Members can also dial the queue extension directly.
From to clear
{{ cdrCount }} records
NumberQueue / ExtAgentTrunkDate & timeDurationStatusRec
{{ r.dirIcon }} {{ r.num }} {{ r.via }} {{ r.agent }} {{ r.trunk }} {{ r.start }} {{ r.dur }} {{ r.disp }} {{ r.recIcon }}
{{ r.dur }}
{{ d.k }}{{ d.v }}
{{ t.label }}
{{ icInfoSm }} Critical events are sent to Telegram
{{ e.icon }} {{ e.t }} {{ e.src }} {{ e.sev }} {{ e.msg }} {{ e.chev }}
{{ e.detail }}
Asterisk 20.8.1 uptime 14d 6h 22m channels: 11 active last reload: 3d ago
{{ t.label }}
● modified — not applied
[didww-01]
type=registration
outbound_auth=didww-01-auth
server_uri=sip:sip.didww.com
client_uri=sip:mtx88231@sip.didww.com
retry_interval=60
; concurrent cap raised 15 → 20 (pending apply)
[didww-01-endpoint]
max_channels=20
allow=!all,ulaw,g722,opus
direct_media=no
{{ l.x }}
CLI>
IP addressJailHitsBanned
{{ b.ip }} {{ b.jail }} {{ b.hits }} {{ b.when }}
Apply pjsip.conf & reload
Review the diff. Reload is graceful — active calls are not dropped.
@@ [didww-01-endpoint] @@
- max_channels=15
+ max_channels=20
+ allow=!all,ulaw,g722,opus
- allow=!all,ulaw,g722
UserEmailRole2FALast loginActive
{{ u.initials }}{{ u.name }} {{ u.email }} {{ u.role }} {{ u.tfaIcon }} {{ u.last }}
{{ icMonitor }}
Wallboard access link
Open on any TV / kiosk — read-only display, no login, no admin access. Anyone with the link can view.
{{ wallLink }}
Audit log
{{ a.who }} {{ a.action }} {{ a.target }} {{ a.t }}
{{ invTitle }}
Name
Email
Role
Share these with the new user over a secure channel — they will not be shown again.
Login URL {{ invUrl }}
Email {{ invEmail }}
Temp password {{ invPass }}
2FA setup key {{ invSecret }}
The user adds the 2FA setup key to Google Authenticator / Authy (choose "enter a setup key" / manual entry), then signs in with the temp password + the 6-digit code.
API Keys{{ icShieldSm }}superadmin only · stored in the agent env, never shown back
{{ k.name }} {{ k.stIcon }}{{ k.status }}
Telegram{{ tgStatus }}
Bot token
Chat ID
Recording
Retention 230 GB used · oldest recording May 5
Security
Session timeout
IP allowlist — admin panel
{{ ip.addr }} {{ ip.note }} remove
{{ icAlertSm }}Danger Zone{{ icShieldSm }}superadmin only · permanent, cannot be undone
Clear data
Master reset — configuration
Select everything Clear selection
{{ purgeCount }} selected
M
MatrixPBX Live Operations
Command Center · Real-time Call Center Wallboard
LIVE
{{ wbClock }}
{{ wbDate }}
{{ t.label }}
{{ t.value }}
Live Calls {{ wbLiveCount }} tap ⧉ to open a live chat
CallerAI AgentStatusDuration
{{ c.caller }} {{ c.agent }} {{ c.state }} {{ c.dur }} ⧉
☎ No active calls — lines are open, waiting for callers
Call Log
CallerAgentTimeResult
{{ r.dirIcon }}{{ r.caller }} {{ r.agent }} {{ r.time }} {{ r.disp }}
No calls logged yet
Extensions {{ wbExtOnline }} online
{{ e.ext }} {{ e.name }} {{ e.st }}
MatrixPBX Wallboard · read-only display auto-refreshing live
{{ toastIcon }}
{{ toastTitle }}
{{ toastMsg }}
✕
{{ floatingChats }}