All 51 builds

Leads and enquiries

Never lose an urgent call

AI voice agents end every call the same way: a webhook fires with a transcript and hangs up. Nobody reads it until a customer calls back annoyed that nobody followed up. Below is how I actually catch the urgent ones: a webhook, a usability check, a model that only extracts facts, and code that decides what happens next instead of the model.

The question
this build answers

How do I make sure an urgent call to my AI voice agent reaches a real person, not just a transcript nobody reads?

From the first trigger
to the finished job.

The working version, step by step.

All three stages, and the setup written on the canvas
All three stages, and the setup written on the canvas
The whole voice-call handoff workflow on the n8n canvas: usability check, extraction and routing, then WhatsApp alert and CRM log.
  1. Receive the call and check it's usable

    The webhook receives the end-of-call payload from your voice agent, whichever one you run: Vapi, ElevenLabs, Retell or similar. A no-answer, a voicemail or an empty transcript never reaches the model. It's logged as unprocessable and stops there, so I'm not paying for a model call on nothing to extract.

  2. Extract facts, never a decision

    An OpenAI extractor reads the transcript and returns sentiment, urgency, intent, a summary and a follow-up date, and nothing else. I tell it explicitly not to decide what happens next. The model reports what it heard; it doesn't get to route the call.

  3. Decide urgency in code, not on a hunch

    I read the model's own sentiment and urgency fields plus a keyword list you set in a code node, and that's what marks a call urgent, never the model's opinion asked directly. A call is urgent if the model marked urgency high, sentiment negative, or the summary matches one of your keywords.

  4. Alert the owner, never the caller

    I let an urgent call message the business owner on WhatsApp within seconds, gated by a switch you control. The number the alert goes to is fixed in one settings node, so a caller reciting a different number back can never end up as the one who gets messaged.

  5. Log every call, whatever happened

    Urgent, routine or unprocessable: every single call writes one row to a master Call Log. Urgent and routine calls also land in their own tabs. Nothing is dropped because a transcript was empty or a call rang out unanswered.

  6. Point it at your own CRM

    I ship it wired to Google Sheets because it's the fastest thing to prove the pattern on. The three logging nodes swap for HubSpot, Airtable or Postgres without touching anything upstream of them.

The template, on n8n

Hand off AI voice calls to WhatsApp and your CRM without losing urgent ones

Fifteen working nodes make up this one, the setup written on canvas and a setup guide for every node I wrote myself. Every call is logged, including the ones no model could read.

Open the template on n8n

What a missed urgent call actually costs

I'm not going to hand you a missed-call statistic, because I haven't measured one on my own operations and I'd only be borrowing somebody else's number. What I can tell you is the shape of the failure: a voice agent handles the call cleanly, hangs up, and the transcript sits in a webhook log nobody opens until a customer rings back annoyed.

The calls that matter most are exactly the ones a webhook-only setup is worst at catching. A voicemail because nobody picked up. A caller who mentions a gas leak in passing halfway through a sentence about something else. None of that reads as urgent to a system that isn't looking for it.

The parts that break

The extraction step is the one gap I'd flag before running this against real traffic: if the OpenAI call itself fails outright, that run stops rather than falling back to an unprocessable row, unlike the no-answer and empty-transcript cases earlier in the flow. I'd wire proper error handling onto that node first.

Keyword lists drift, too. Gas leak catches on obvious wording and won't catch every unusual way a caller describes an emergency, so I'd treat the keyword list as something you edit after reading a few weeks of real calls, not something you install once.

What it costs to run

The model call is small: one transcript makes a short prompt, and what you already pay for the automation platform will dominate long before the OpenAI calls do.

The real cost is attention, same as every build I ship like this. Somebody has to own the keyword list, and somebody has to notice if the WhatsApp number in Handoff Settings is ever wrong. Get that number wrong and the alert goes nowhere, silently.

Why take this from me

Because I build and run this class of pipeline daily rather than just describing it. The work below links to things that are actually running, including an operational brain that's open source, so you can read how I build before paying me anything.

The fair objection is that my proof is my own operation rather than a roster of trades firms and clinics, and there are no reviews on this site because I don't have any yet. I'd rather write that down than have you notice it.

Before you spend anything

The fit matters.

Who should not buy this

If your voice agent has no end-of-call webhook to point anywhere, there's nothing here to wire up. That's a different, bigger conversation before this one.

If you don't use WhatsApp Business and have no way to receive the alert, the urgent branch has nowhere to send its message. I'd rather say so than sell you half a build.

If what you actually want is live call transfer, mid-call, to a human, this isn't that. It acts after the call has already ended.

Yours to keep

What lands
on your desk.

  • I set it up inside your own n8n, pointed at your own voice agent's webhook, under your own credentials
  • Your urgent keyword list and the WhatsApp switch written into Handoff Settings with you, in one place
  • The extraction step's error handling wired in properly, so a failed model call costs you a review, never a dropped call
  • A Google Sheets log across three tabs (or your own CRM instead), so nothing is missing from the record
  • A walkthrough I write down, so whoever touches it next is not dependent on me

A few useful
answers.

Does the AI decide which calls are urgent?

The model doesn't decide anything. It only extracts facts: sentiment, urgency, intent and a summary. A code node reads those fields plus your own keyword list and makes the routing decision, never the model's opinion asked directly.

Who gets the WhatsApp alert?

The business owner, fixed in one settings node. It never goes to the caller, whatever number they gave during the call.

What happens to a call with no transcript?

A no-answer, a voicemail or an empty transcript never reaches the model. It's logged as unprocessable in the master Call Log and the run stops there.

What if the extraction call itself fails?

That's the one gap I'd close before trusting this against real traffic: right now that run stops rather than falling back to a logged row, and I'd wire proper error handling onto it first.

Make this work for you

Your tools.
Your working version.

Want this built and handed over working? Tell me what your version needs to do. One line is enough to start.

Start a brief