Who really ended the call?
Reporting could not tell whether a call ended because the customer hung up, because the agent used the desktop, or because the agent dropped the handset. Supervisors were guessing. A small gadget made the answer exact, and then taught me a lesson about hold.
- Platform
- Cisco Finesse · UCCE · CUIC
- Built with
- JavaScript · Finesse REST API · SQL
- Shipped
- Production, every agent
- Now at
- Version 2.2
Try it. Then try to break it.
A simulation of the agent desktop, with the gadget in it. Switch to version 2.1, consult a supervisor, end the consult, then press the button again while the customer is on hold — that is the bug agents found. Then switch to 2.2 and try the same thing.
How it decides.
- 01The gadget replaces the stock End buttonPressing it sends a drop through the Finesse REST API and writes a call variable on the call itself.
- 02The report reads the call recordCustomer and system disconnects come from the call's own disposition. A set variable means the agent used the desktop. Anything else the agent ended was the handset.
- 03It survives real lifeIt waits for a slow-loading desktop, recovers if the agent refreshes mid-call, and follows consult and hold states instead of assuming one call leg.
Built in a lab, hardened by agents.
Proven on a test system
Drop through the API, write the variable, confirm it lands in the call record. Learned the gadget has to live in a tab for the desktop's proxy to work.
Live, with its report
Deployed for every agent, with a report showing how each call ended. Added start-up polling and mid-call refresh recovery.
Consult and hold aware
The button became "end consult" during a consult and "end" on hold. Agents found the edge: ending a held call left it stuck on hold.
Retrieve first
The button hides while the customer is on hold, so it can only end a call that is really connected. Simple, and the report stays true.
What I take from it.
A reporting field is a promise. If it says the agent ended the call, every supervisor conversation built on it has to be true. The interesting part of this build was not the API call; it was the three weeks afterwards, listening to agents describe a situation I had not modelled, and choosing the fix that removed the ambiguity rather than the one that covered it up.