n8n portfolio · workflow 1 of 3

AI Voice Call Center

A Twilio phone line answered by a Claude agent that books visits, checks job status, answers pricing questions and escalates emergencies, then scores every call afterwards. Built for home-service businesses that lose jobs to missed calls.

Nodes
43 + canvas notes
Entry points
3 Twilio webhooks · setup
AI
Claude Opus 5 · agent + QA analyst
Integrations
Twilio · Postgres · Google Calendar · Slack
File
01-ai-voice-call-center.json ↓

Architecture

Twilio calls three webhooks during a call. One config node and one router send each event to its lane, so every setting lives in one place.

① Incoming callgreets in one round trip, logs afterwards② Conversation turnruns on every caller utteranceTOOLBELT · TOOLS EXECUTE INSIDE N8N③ After the callQA, CRM record, follow-upsdials/incoming/turn/statusincomingturnsilence · emergency · 'human' · max turns: skip the AItool calls ⇄ resultsthen persiststatusno speechalwaysPSTNCallerany phoneTWILIO VOICETwiliospeech-to-texttext-to-speechSET + SWITCHConfig & routerone config noderoutes 3 eventsPOSTGRESIdentify callercaller ID → CRM profileCODECompose greetinghours · VIP · repeat callerRESPOND → TWILIOTwiML greeting<Gather> + <Say>, barge-inPOSTGRESLog call startcalls row + turn 0POSTGRESLoad call stateturn++ · caller profileCODEGuardrailsdecide before the LLMCLAUDE · AI AGENTReceptionist agent7 tools · per-call memoryCODERead tool tracecontinue / transfer / endRESPOND → TWILIOBuild TwiML<Gather> · <Dial> · <Hangup>KB search · FTSJob lookupCheck calendarBook visitCreate ticketTransfer humanEnd callMemory · CallSidPOSTGRESSave turntranscript + flagsSLACKTransfer alertonly when transferringFILTERCall completed?POSTGRESAssemble transcriptevery turn, in orderCLAUDE · EXTRACTORQA analystJSON: intent · sentiment · QAPOSTGRESSave analysisCRM-ready recordSLACKEscalationnegative · urgent · callbackTWILIO SMSRecap textonly with consentPOSTGRESPurge LLM memorytranscript is keptTWILIO SMSMissed-call text-backhung up in the greeting
Solid arrows are the call path. The accent path skips the AI entirely when a guardrail matches. TwiML replies travel back to Twilio on the same HTTP request, so the caller hears the answer the moment a Respond node runs.

One conversation turn

What happens between the caller finishing a sentence and hearing the reply.

speaks (can interrupt)POST /turn · SpeechResult, CallSidturn_count++ · caller profilecall statespeech + memory + call contexttool call: Check_Availability (runs in n8n)booked slotsreply text + tool traceTwiML <Gather><Say>…speaks the reply, listens againsave turn, after the reply is sentPSTNCallerTWILIOTwilio VoiceN8NWorkflowCLAUDEReceptionist agentPOSTGRES · CALENDARTools & stateguardrails first: silence · emergency · human · max turns
Accent messages mark the two choices that matter most for safety and latency: deterministic guardrails run before any model call, and the database write happens after the reply is already on its way to the caller.

Engineering decisions

Why it is built this way.