Voice agent hangs up → transcript captured, AI brief written, CRM updated, Slack notified. Same architecture across Retell AI, Vapi, and Bland — one pipeline, three platforms, zero manual steps.
Voice agents on Retell, Vapi, and Bland were closing real conversations every day. The recordings sat in three different vendor dashboards. Transcripts had to be pulled by hand. Briefs were written in slow Slack threads after the fact. The CRM was only updated when someone remembered.
Each platform had its own webhook shape, its own transcript format, its own way of exposing call metadata. Engineering effort was scattered across three integrations that never quite talked to each other.
The ask: one post-call pipeline that works the same way regardless of which voice platform handled the call. Transcript, AI brief, CRM record, and Slack notification — all done before the operator even checks their inbox.
| Step | The Work |
|---|---|
| Webhook Capture | Each platform fires its end-of-call webhook into a single n8n entry node. Retell, Vapi, and Bland payloads are normalized to one internal call schema (id, agent, transcript, recording, metadata). |
| Transcript Stitching | Speaker-tagged transcript is cleaned, timestamps merged, agent vs. caller turns split. Stored in Supabase against the call ID for downstream lookup. |
| AI Brief | OpenRouter / Claude writes a structured brief: outcome, intent, action items, sentiment, follow-up window. One prompt, one pass, schema-validated output. |
| CRM Sync | Contact is matched (by phone or call metadata) or created. The AI brief, sentiment, and recording URL are attached as a fresh activity entry — HubSpot or custom CRM. |
| Slack Notification | Channel message: who called, what about, what to do next, sentiment, and direct links to the recording and CRM record. Operator opens Slack, sees the brief, decides — no transcript hunting. |