NNabeel Hassan

Blog · October 21, 2026 · 8 min read

How an AI Voice Agent Should Handle Upset Callers and Complaints

By Nabeel Hassan — AI Engineer · ICPC World Finalist

TL;DR: An AI voice agent should not try to win an argument with an upset caller, and it should not try to fake empathy at length either. The pattern that works on the phone is short and boring: acknowledge once in plain words, stop talking long enough for the person to finish, say exactly what the agent can do right now, capture the complaint as structured data, and get a human involved quickly when the caller wants one. The agent must never promise refunds or compensation, never blame the caller or the staff, and never pretend to be a person. I build production voice agents on Retell AI for hospitals, vet clinics, car garages and real estate teams, and the upset caller is the call I design for first, because it is the one the owner hears about.

Voice agent demos are polite people booking appointments. Real phone lines are not. Someone's dog has been vomiting since morning. Someone's car was supposed to be ready yesterday. Someone has called the hospital three times about the same referral. They are angry at the situation, and the agent is the first thing they reach.

A booking that goes slightly wrong gets fixed. A distressed caller who feels brushed off by a robot becomes a review, a complaint to the owner, and often the end of the project.

Upset is not the same as abusive, and neither is an attack

I separate three kinds of difficult call, because each needs different behavior:

If the prompt treats every raised voice as a threat, the agent gets cold with a worried pet owner. If it treats every pushy request as distress, it gets talked into promises it cannot keep.

What the agent should say: one acknowledgment, then action

Acknowledge once, in plain words

The instinct is to load the prompt with empathy. "I completely understand how frustrating this must be for you, and I'm so sorry for any inconvenience." Spoken by a synthetic voice to someone already annoyed, it sounds like a script, because it is one.

What works is one short acknowledgment that names the actual problem: "That sounds stressful, especially with your car off the road." Then move on. If the agent repeats "I understand your frustration" every turn, callers notice within two exchanges and it makes things worse. I explicitly tell the agent not to repeat the same empathy phrase, and to acknowledge at most once unless the caller raises something new. This is part of the broader point in writing prompts for speech, not text: what sounds warm written down often sounds hollow out loud.

Let them finish

Upset callers talk in long bursts, with pauses in the middle. An agent tuned for snappy booking calls will jump into those pauses and talk over them, and nothing makes a frustrated person angrier than being interrupted by a machine. For lines where difficult calls are common, I make the agent less eager to take its turn and make sure it stops speaking immediately when the caller starts again. The tuning details are in handling interruptions and background noise. A slightly slower agent that lets people finish beats a fast one that cuts them off.

Say what it can do, specifically

After the acknowledgment, the agent should state what happens next in concrete terms. Not "someone will look into this," but "I'm going to pass this to the service desk now with your booking details, and they'll call you back today." If the agent cannot do anything about the problem itself, it should say so honestly and say what it can do: take the details, flag it as urgent, or transfer the call.

Vague reassurance is what upset callers trust least. Keep each turn to one or two short sentences, and ask one question at a time.

What the agent must never do

These are hard rules in every agent I ship, written into the prompt and tested:

When to hand the call to a person

The fastest way to calm most upset callers is to let them talk to a human when they ask. I do not design agents that fight to keep the call.

For upset callers specifically, I usually lower the bar for escalation compared with ordinary calls:

The transfer has to carry context and needs a plan for when nobody answers, which I cover in human handoff and transfer. Complaints should get a dedicated route, not the same queue as new bookings.

Capture the complaint as data, not just a transcript

A transcript of a heated eight-minute call is not actionable for a busy front desk. So on complaint calls I have the agent and the post-call analysis pull out a small, fixed set of fields:

The field people forget is the promise. If the agent said "the service desk will call you today," that promise has to land in front of the service desk, or the business has broken a commitment it did not know it made. I wrote about the failure modes here in post-call automation failures, and about writing summaries that staff actually read in call summaries staff read.

In my builds the post-call webhook goes to n8n, which routes complaint calls to a different place than routine ones: a flagged task in the CRM, a message to a manager, or a dedicated channel. On the CallSetter AI work at Tested Media, GoHighLevel was the CRM, so complaint calls became tagged contacts and tasks the team could filter, rather than notes buried in a call log.

Use memory carefully with repeat callers

A caller ringing for the third time about the same issue is the most frustrated caller you will get. Greeting them like a stranger is the worst move. If the CRM shows an open complaint for that number, the agent should know it and say so: "I can see you called earlier about the referral. I'm sorry it's still not sorted." That one sentence does more than any empathy script.

It also needs restraint: no reading back private details to someone who has only given a phone number, and no claiming progress it cannot see. I covered the wiring in returning callers and CRM memory.

Test the hard calls on purpose

Upset callers rarely appear in a client's test calls, because testers are calm. So I write them into the test set deliberately: a caller who interrupts constantly, a caller who demands a refund, a caller who claims they were promised something, a caller who swears, a caller who says "just put me through to a human" in the first sentence. Each one has an expected outcome, and every change to the prompt gets run against them again.

This is the same discipline as my regression testing for voice agents and the automated pipeline I used at Fortell AI, where I built and tested agents with Claude Code and Comet browser automation. Simulated difficult callers catch obvious regressions, like a prompt change that makes the agent apologize every turn.

After launch I watch sentiment and escalations alongside booking metrics. A rise in upset transfers often signals a change in the business, like a workshop delay or staffing gap, not in the agent. More on what I track in voice agent metrics that matter.

A short checklist

Check that your agent:

  1. Acknowledges a problem once, specifically, and does not loop on empathy phrases.
  2. Lets callers finish, even if that makes it a little slower.
  3. States a concrete next step instead of vague reassurance.
  4. Never promises money, assigns blame or argues facts.
  5. Transfers immediately when asked for a human, with context.
  6. Records complaints as structured fields, including what it promised.
  7. Routes complaints separately from routine calls.
  8. Recognizes repeat callers with an open issue.
  9. Is tested against difficult callers on every change.

None of this is clever. It is about removing what makes a frustrated person more frustrated, and making sure the business can follow through.


I build production AI voice and chat agents on Retell AI, with n8n and GoHighLevel behind them, for teams that need them to hold up on real calls, including the difficult ones. If you want an agent built or a second opinion on one you already run, more about my background here, or book a call.

FAQ

Can an AI voice agent handle angry or upset callers?

Yes, if it is designed for them. The agent should acknowledge the problem once in plain words, let the caller finish without interrupting, state a specific next step, and transfer to a human quickly when the caller asks. It should not loop on scripted empathy phrases or try to argue.

Should an AI receptionist offer refunds or discounts to calm a caller down?

No. The agent should never promise refunds, discounts, waived fees or compensation. It should record the request and pass it to someone at the business who can decide, otherwise it creates commitments the business never approved.

When should a voice agent transfer a complaint to a human?

Immediately when the caller asks for a person, after a second expression of strong frustration once the agent has already offered a next step, and always for anything involving safety, a medical emergency or an animal in distress.

What should be recorded after a complaint call?

Who called and their matching record, what the complaint is about, a short neutral summary in the caller's words, what they want, what the agent already promised them, and an urgency level. Complaint calls should be routed to a different place than routine bookings.

Building something in this space?

I take on AI-agent, automation and product work directly — scoped fast, shipped fast.

Book a discovery call →

Keep reading