AI voice agent for contractors — answers calls, books appointments, collects info, dispatches techs. Available across contractor tiers.
!hasVoiceAgentSetup → onboarding overlay (all tiers)
VoiceAgentConfig — empty state when !config
useQuery(api.voiceAgent.configs.getByContractor)
VoiceAgentDashboard — config.isEnabled === true
useQuery(api.voiceAgent.calls.getRecent), useMutation(api.voiceAgent.configs.update)
VoiceAgentAnalytics — period-filtered aggregations
useQuery(api.voiceAgent.usage.getByPeriod), useQuery(api.voiceAgent.calls.getOutcomeBreakdown)
VoiceAgentConfig — accordion sections, all fields from schema
useMutation(api.voiceAgent.configs.update)
VoiceAgentCallList — filtered by outcome, accent bar color = outcome
useQuery(api.voiceAgent.calls.list, { outcome?, limit: 20 })