Skip to main content

Calls · Complaint detection

Multi-workflowContact centres

Finding the complaints customers make on calls but nobody logs

Customers rarely say the word complaint. This architecture transcribes each call, flags likely complaints with the exact words used, and lets a complaint handler confirm every entry in the register.

Valnora & Elric team5 min read

Workflow 1 turns recordings into transcripts. Workflow 2 flags likely complaints with quoted evidence. Workflow 3 asks a complaint handler to confirm each one and writes it to the register. A dashboard and monitor track logging gaps.

Customers almost never announce a complaint. They say the fee has been charged three times, that nobody called back, that they are thinking of moving their account. An adviser under time pressure fixes the immediate problem and moves on, and the complaint never reaches the register.

For firms regulated by the FCA, that gap matters. The FCA Handbook defines a complaint as any oral or written expression of dissatisfaction, whether justified or not, that alleges loss, distress or inconvenience. An oral complaint on a call counts, whether or not the customer used the word. DISP also expects firms to identify and fix recurring or systemic problems, which is hard to do with complaints that were never recorded.

This post walks through an architecture in Agent Serve that reads every call, flags likely complaints with the customer’s own words as evidence, and leaves the final decision with a complaint handler.

Why three workflows rather than one

Each workflow does one job and can be changed without touching the others. Transcription changes when your telephony provider does. Detection changes when your complaint policy or model does. Registration changes when your complaints system does. Splitting them also makes Logs easier to read: a reviewer can open the detection run for a call and see exactly what the model was given and what it returned.

The three are built in the workflow builder and chained with the Workflow block, which runs another workflow as a step and passes its inputs along.

Workflow 1: transcribe

The first workflow runs on a schedule, or on a webhook if your telephony platform can send one when a recording is ready. For each recording, the Speech-to-Text block produces a transcript with speaker turns.

Before anything else reads the transcript, a Guardrails block with PII detection masks card numbers, account numbers and other personal data. The complaint detector does not need them, and masking early keeps them out of every later step and log.

If your platform already produces transcripts, skip the Speech-to-Text step and read the transcript files with the File block instead.

Workflow 2: detect

The detection workflow does three things.

  • Looks up your policy. The Knowledge block searches your complaint definition and handling procedures in the Knowledge Base, so the model judges against your wording rather than a generic idea of a complaint.
  • Classifies the call. An Agent block reads the transcript and returns a structured answer: whether dissatisfaction was expressed, the exact quote, a suggested category and a confidence note. Asking for the verbatim quote is the most important design choice here. It makes every flag checkable in seconds.
  • Checks what was logged. An API block looks the call up in your CRM or complaints system, and a Condition block routes on the answer. Calls where a complaint was already raised are recorded as captured; the rest go on to confirmation.

Workflow 3: confirm and register

What the solution produces

Complaint flag sent for confirmation (illustrative)

Record
Call
Inbound · card services · 11 min 40 s
Customer said
"This is the third time I have been charged that fee and nobody has fixed it. I want it refunded."
Why it was flagged
Expression of dissatisfaction about a repeated charge, with a request for redress.
Suggested category
Fees and charges
Logged on the call?
No. The adviser reversed the fee but did not record a complaint in the CRM.
Confidence
High. Customer named the problem, its impact and the outcome they wanted.
Waiting for a complaint handler · the register is updated only on confirmation

No flag becomes a complaint without a person. The Human block pauses the run and shows the complaint handler the flag, the quote and a link to the call. The handler confirms it, rejects it with a reason, or edits the category.

Only confirmed complaints are written to the complaints register in Tables, or to your complaints system through its integration. A Slack or Microsoft Teams message tells the team a new case needs an owner. Rejections are kept too, because they are how you tune the detector: a cluster of rejected flags for one phrase usually means the prompt needs a clearer example.

Watching the gap

The dashboard built with Dashboards shows three numbers by team, product and week: complaints flagged, complaints confirmed, and confirmed complaints that were already logged on the call. The difference between the last two is the logging gap, and it is the number a complaints lead will want to see fall.

A Rules flag marks confirmed complaints that were not logged at the time, and a Monitor alerts the complaints lead when the count passes a threshold you set. Row-level access lets each team leader see their own team’s calls.

The same transcripts can also feed a Call Compliance dashboard, built with Dashboards and its transcript upload panel, if you want QA checks such as "the adviser acknowledged the customer’s dissatisfaction and offered to log a complaint" scored on every call. See full QA coverage for that setup.

Controls worth setting from day one

Controls and governance

PII detection

A Guardrails block detects personal data and blocks or masks it before text reaches the next step.

Run logs

Every workflow run records each block’s inputs, outputs and errors, so a reviewer can trace how a result was reached.

Deployed versions

Workflows run from a deployed version, so a change is reviewed before it reaches production runs.

Roles and permission groups

Admin, write and read roles per workspace, plus permission groups that limit which models, blocks and integrations a team can use.

Row-level access

Row-level policies narrow what each person sees in tables, dashboards, exports and scheduled reports.

Self-hosting

Run Agent Serve in your own cloud or data centre, next to the systems it reads.

Zero data retention

Zero data retention with supported model providers, backed by your own provider keys and agreements or self-hosted models. Some provider features keep data by design, such as Gemini Deep Research, so they are outside zero data retention.

GDPR ready

Retention from one day to five years, deletion and access controls support GDPR obligations. Ready means the controls are in place, not a certification.

More on how Agent Serve handles access, data and audit on the security page.

Keep the detector advisory. It flags, a handler decides. Mask personal data before analysis. Deploy each workflow as a version, so a prompt change is reviewed before it reaches live calls. If recordings cannot leave your environment, run Agent Serve self-hosted with your own model keys or a self-hosted model.

Once complaints are reliably captured, the next question is why they happen. Complaints root cause picks up from the register.

What you need

  • Access to call recordings, or transcripts if your telephony platform already produces them
  • Your complaint definition and handling procedures, uploaded to a Knowledge Base
  • Read access to your CRM or complaints system to check what was already logged
  • A complaints register table, or the system it should write to
  • Named complaint handlers to confirm flags, and a team channel for new cases
  • A sample of past calls with known outcomes to test detection before go-live
How it works

From call recording to confirmed complaint

Workflow 1 · Transcribe

  1. 01New recordingsA schedule or webhook picks up finished call recordings from your telephony storage.
  2. 02Speech-to-TextThe Speech-to-Text block turns each recording into a transcript with speaker turns.
  3. 03Mask personal dataA Guardrails block masks card numbers and other personal data before analysis.
  4. 04Hand to detectionA Workflow block runs the detection workflow with the transcript and call metadata.

Workflow 2 · Detect

  1. 05Complaint policyThe Knowledge block searches your complaint definition and handling procedures.
  2. 06Classify the callAn Agent block decides if dissatisfaction was expressed and quotes the exact words.
  3. 07Was it logged?An API block checks the CRM for a complaint raised on the call; a Condition block routes the result.

Workflow 3 · Confirm and register

  1. 08Handler confirmsThe Human block pauses until a complaint handler confirms, rejects or edits the flag.
  2. 09Complaints registerConfirmed complaints get a row with the quote, category, call link and handler.
  3. 10Team noticeA Slack or Teams message tells the complaints team a new case needs an owner.

Dashboard · Logging gaps

  1. 11Complaint capture viewFlagged, confirmed and already-logged complaints by team, product and week.
  2. 12Unlogged complaintsA rule monitor alerts when confirmed complaints were missed on the call.

Enterprise access

Put AI agents to work across your team

Agent Serve is available to teams by invitation. Tell us what you want to build and we will set up your workspace with you.