wifi_off {{ connError }}
Canarics Canarics

Welcome back.

Sign in to your team's sales floor.

Your team's sales floor, in one screen.
Every call answered, routed, and scored — with direct drill-down to the transcript.
100%
Calls captured
<60s
Summary latency
EU
Hosted & GDPR
Canarics HQ
campaign {{ campaignCount }} campaign{{ campaignCount === 1 ? '' : 's' }} · {{ outboundCalls.filter(c => c.kind !== 'briefing' && ['pending','no_answer','busy','failed'].includes(c.status)).length }} pending {{ briefingCount }} briefing{{ briefingCount === 1 ? '' : 's' }} · {{ outboundCalls.filter(c => c.kind === 'briefing' &&['pending','no_answer','busy','failed'].includes(c.status)).length }} pending · {{ recurringBriefings.filter(s => s.enabled !== false).length }} active schedule{{ recurringBriefings.filter(s => s.enabled !== false).length === 1 ? '' : 's' }}
Live now · {{ liveCalls.length }}
AI
{{ lc.externalNumber || 'unknown' }}
{{ lc.direction || 'inbound' }} · {{ liveAgentName(lc.agentId) }}
{{ formatElapsed(lc.startedAt) }}
AI {{ selectedAgent.kind === 'ai' ? (selectedAgent.phoneNumber || selectedAgent.id) : (selectedAgent.overrideDisplayName || selectedAgent.displayName) }}
refresh Click to retry

phone{{ activeLog.manualName || activeLog.number }} {{ activeLog.manualName || activeLog.number }}

edit
{{ formatRelative(activeLog.createdAt) }}

AI phone{{ activeLead.external_number }}

{{ formatRelative(activeLead.createdAt) }}

AI{{ activeLiveCall.externalNumber || 'unknown' }}

{{ activeLiveCall.direction || 'inbound' }} · {{ liveAgentName(activeLiveCall.agentId) }}
{{ activeLog.sentiment }} {{ activeLead.intent }} {{ activeLead.action_taken }} {{ isLiveCallStillActive ? `LIVE · ${formatElapsed(activeLiveCall.startedAt)}` : 'Call ended' }}
Score
{{ activeLog.score }}
Talk Ratio
{{ activeLog.talkRatio }}%
Deal Stage
{{ activeLog.suggested_deal_stage || 'None' }}
Routed To
{{ activeLead.employee_name || activeLead.transfer_target }}
Duration
{{ activeLead.duration }}s
Language
{{ (activeLead.language || activeLead.languageCode || '').toUpperCase() }}
person Caller history{{ activeContact.lastCustomerName ? ' — ' + activeContact.lastCustomerName : '' }}
Total touches{{ activeContact.totalTouches || '—' }}
Last touch{{ formatDate(activeContact.lastTouchedAt) }}
Last by{{ activeContact.lastKind === 'ai' ? '🤖 AI agent' : '👤 Human rep' }}
Last status{{ activeContact.lastStatus || '—' }}
Recent calls
{{ s.kind === 'ai' ? '🤖' : '👤' }} {{ formatRelative(s.ts) }} {{ s.text }}
"{{ activeContact.lastSummary }}"
person_add First-time caller — no prior history
{{ t.type === 'success' ? 'check_circle' : t.type === 'error' ? 'error' : 'info' }} {{ t.msg }}

{{ confirmState.title }}

{{ confirmState.msg }}