Calls · Complaint detection
Multi-workflowContact centresFinding 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
- WorkflowsThe visual builder: blocks, models and integrations wired into agent logic.
- TablesA database, built in, for cases, queues and decisions.
- Knowledge BasePolicies and procedures agents search before they answer.
- DashboardsCharts, tables and KPI tiles over governed metrics.
- RulesPlain-language checks that pass, fail or flag a record.
- MonitorsWatch a metric and alert the right people when it moves.
- LogsEvery run traced block by block.
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.
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
From call recording to confirmed complaint
Workflow 1 · Transcribe
- 01New recordingsA schedule or webhook picks up finished call recordings from your telephony storage.
- 02Speech-to-TextThe Speech-to-Text block turns each recording into a transcript with speaker turns.
- 03Mask personal dataA Guardrails block masks card numbers and other personal data before analysis.
- 04Hand to detectionA Workflow block runs the detection workflow with the transcript and call metadata.
Workflow 2 · Detect
- 05Complaint policyThe Knowledge block searches your complaint definition and handling procedures.
- 06Classify the callAn Agent block decides if dissatisfaction was expressed and quotes the exact words.
- 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
- 08Handler confirmsThe Human block pauses until a complaint handler confirms, rejects or edits the flag.
- 09Complaints registerConfirmed complaints get a row with the quote, category, call link and handler.
- 10Team noticeA Slack or Teams message tells the complaints team a new case needs an owner.
Dashboard · Logging gaps
- 11Complaint capture viewFlagged, confirmed and already-logged complaints by team, product and week.
- 12Unlogged complaintsA rule monitor alerts when confirmed complaints were missed on the call.