“Let’s hire AI bots and make support cheaper.” What could go wrong?
Practice · AI support · LLM · workflow · customer experience
AI can lower support costs and improve first-response time. But when the model is not backed by reliable state, entity and ownership management, customers get an instant reply instead of a resolution. A real-world case shows how a simple operation took about five hours—and how to design the system differently.
In short: chat history is not task state, an account-created event is not a customer outcome, and a fast first response is not a fast resolution.
A simple operation that took five hours
A customer accidentally signed up for the wrong product from the same provider. The account contained no websites, domains, mail or databases. The task was simply to transfer the available balance from a shared-hosting account to a new Cloud account so the customer could buy a server.
At first, we tried to understand why the customer could not sign in. Support checked account blocks, country restrictions and the IP address. The actual reason emerged separately: hosting and Cloud used different authentication systems. A customer could reasonably believe they had registered with one provider while actually entering a different product and control panel.
Once that was clear, the request was precise: transfer the entire balance between two products. The conversation nevertheless repeated the same loop:
-
The customer explains the task
They identify the source, destination and expected outcome.
-
The agent asks for known context
The customer repeats information already present in the conversation.
-
The case is handed to a colleague
The next participant reconstructs the meaning of the thread from scratch.
-
The loop starts again
Replies arrive quickly, but the operation does not move closer to completion.
The root cause was not necessarily a weak model or an individual operator. It was an architectural gap: the case had no reliable shared state and no single owner accountable for the outcome.
Chat history is not task state
Giving the next model the last 50 messages is useful, but insufficient. The model still has to infer:
- ParticipantsWho contacted support, who owns the accounts and on whose behalf the operation is performed.
- EntitiesThe contact account, source Hosting account, destination Cloud account and owner email.
- Known factsWhat is verified, what is only assumed and which statements conflict.
- ActionsCompleted checks, successful changes, failures and pending confirmations.
- Expected outcomeThe observable result the customer needs—not merely an internal event.
- Next ownerThe AI, specialist queue or human operator with the required permissions.
Every handoff becomes another classification problem. Even if an agent reconstructs state correctly 95% of the time, ten independent reconstructions leave only about a 60% chance of completing the whole chain without an error. This illustrates compounding risk; it is not a measurement of the provider in this case.
What the backend should store
After the first few messages, the system could already have built structured case state. All identifiers in this example are intentionally redacted.
{
"intent": "transfer_full_balance",
"source": {
"account_id": "hosting_account_redacted",
"product": "virtual_hosting",
"owner_verified": true
},
"destination": {
"account_id": "cloud_account_pending",
"product": "cloud",
"owner_verified": false
},
"assets": {
"balance": "all_available",
"sites": 0,
"domains": 0,
"mailboxes": 0,
"databases": 0
},
"status": "identity_verification_required",
"next_action": "verify_owner",
"completion": [
"balance_visible_in_cloud",
"customer_can_sign_in",
"server_purchase_available"
]
}
The next agent should start from a machine-readable handoff contract: the reason for transfer, known and verified facts, completed and failed actions, missing information and the next required step.
A correct fact attached to the wrong entity
During the conversation, support quoted an exact account balance. A later check showed that the amount belonged to a different account. This was not merely an inaccurate reply; it was an entity resolution failure.
The case simultaneously involved the account used to contact support, the customer's account, Hosting and Cloud products and the owner's email. Without an explicit “fact → entity → source → verification time” relationship, a dangerous combination appears:
Correct fact + wrong entity = wrong answer.
The specificity makes such an answer unusually convincing. Critical facts therefore cannot live only inside a model-generated summary. They need stable entity identifiers, provenance and verification status.
A technical event is not a customer outcome
Support eventually reported that the Cloud account had been created. The customer still could not sign in. The internal workflow may have ended at a technical event:
cloud_account_created = true
The business outcome was different:
customer_can_access_cloud = true
balance_is_visible = true
server_purchase_is_available = true
Until that entire sequence is verified, the case is not resolved. Support is responsible for the observable customer outcome, not merely a successful internal API call.
Seven types of state an AI support system needs
What the customer has said
Intent, constraints, clarifications and communication preferences.
Which objects are involved
People, accounts, products, payments, orders and their relationships.
Where the operation stands
Current status, valid transitions, blockers and timeouts.
Where each critical fact came from
A customer message, API response, operator note or verification result, including who confirmed it and when.
Who is responsible for the next step
A named agent, operator or queue with the right permissions and SLA.
What must happen next
One executable step with inputs, expected output and error handling.
How resolution is verified
An observable customer outcome—not an emitted command or created database row.
How to place an LLM inside a support orchestrator
An LLM is valuable here, but it should not be the only place where the business process exists. Its job is to understand unstructured language and help choose the next step.
-
Extract
After every message, return intent, entities, facts and requested_action against a strict schema.
-
Validate and persist
The backend validates types, links facts to entities, records provenance and saves the state change.
-
Resolve conflicts
A new value must not silently overwrite a verified fact. Create a conflict and require another check.
-
Select a workflow
Rules choose the allowed action: request data, call an API, route to a specialist or stop a risky operation.
-
Create a handoff contract
The recipient sees structured context, the transfer reason and the next action—not only a long chat transcript.
-
Verify the outcome
Close the case only after completion criteria pass or the customer explicitly confirms the result.
Every case needs an owner
An agent → agent → agent chain cannot continue indefinitely. If the current participant cannot perform the action, the case must move to a named operator or queue with the required permissions. Accountability and a deadline for the next step move with it.
| Weak implementation | Working implementation |
|---|---|
| Every agent rereads the entire chat | The agent receives state plus the relevant recent messages |
| Facts exist only inside prose | Facts are linked to entities and evidence |
| A generic “colleague” handoff | Routing to a queue with the required permissions |
| An internal action completed | The customer outcome was achieved and verified |
| First Response Time is optimized | Time to Resolution and first-contact resolution are optimized |
What to measure beyond first-response time
- Time to ResolutionTime to a real solution, not the first message.
- First Contact ResolutionCases resolved without another contact or queue.
- Handoffs per CaseNumber of transfers and the share that were actually necessary.
- Context RepetitionHow often customers repeat facts already supplied.
- Entity Error RateHow often correct data is attached to the wrong account, order or customer.
- Outcome VerificationShare of closed cases with an automated or customer-confirmed result.
A three-second First Response Time can look excellent on a dashboard. The customer will remember the five-hour resolution.
Frequently asked questions about AI support
Can the LLM receive the entire chat history?
Yes, as supporting context. Critical facts, entities, workflow status, completed actions and completion criteria still need structured backend storage. Otherwise every agent has to reinterpret the conversation.
Which support tasks are a good fit for AI?
Request classification, parameter extraction, knowledge-base search, response drafting, conversation summaries and workflow selection. Risky operations and changes to verified data require explicit rules, validation and permission controls.
When should a case be handed to a person?
When the operation requires permissions the AI does not have, verified data conflicts, the action is irreversible or risk exceeds a defined threshold. The case should go to a specific owner or specialist queue with a structured handoff contract.
When is a support case truly resolved?
When predefined customer-outcome criteria pass. Creating an account or receiving a successful API response is insufficient if the customer still cannot sign in, see the balance or complete the intended action.
Design AI support around the outcome
The core problem with AI support bots is not that modern models are “too stupid.” It appears when no engineering system exists around the model. Without state, entity resolution, provenance, workflow, ownership and a verifiable outcome, the result is a very modern support operation: everybody replies instantly, but nobody owns the resolution.
AI Support · LLM · State Management · Workflow · Entity Resolution · Customer Experience
