A customer asks your support bot how to connect a custom domain. It finds the setup guide and explains the DNS records.
Then the customer replies: “I already tried that. The domain works on my laptop, but checkout fails on my phone.”
That second message is the interesting engineering problem. Repeating the documentation is easy. Recognizing that the conversation needs a different path takes more deliberate design.
For a small SaaS or ecommerce team, I would start with one requirement: when automation reaches its limit, the customer should be able to continue without starting over.
Disclosure: This article is from the TWT Chat team. The workflow and examples below are general design recommendations, not a description of a specific product API or an implementation benchmark.
1. Define the boundary before choosing the model
Start by defining a response and an escalation boundary for common requests:
| Request | Useful first response | Escalation boundary |
|---|---|---|
| “Where can I find my invoice?” | Explain the documented steps | The invoice is missing or incorrect |
| “How do I connect my domain?” | Share the relevant setup instructions | The instructions have already failed |
| “Why was I charged twice?” | Acknowledge the issue and gather minimal context | Account-specific billing investigation |
| “Can I talk to someone?” | Offer the human support path | Immediately |
The boundary should be a product decision. A fluent answer does not establish that a system has the evidence or authority to resolve a request.
Keep account changes, refunds, and other consequential actions behind explicit authorization checks. A retrieved help article can explain a refund policy; it cannot establish whether a particular payment qualifies.
2. Give every conversation an owner
A minimal workflow can use five states:
- AI active: the assistant is helping within its supported scope.
- Waiting for a human: escalation has been requested and queued.
- Human active: a support agent owns the conversation.
- Ticket open: follow-up is asynchronous.
- Resolved: the outcome has been recorded.
Once a conversation enters the waiting state, pause autonomous replies. Otherwise, the assistant can keep suggesting steps while a human is reviewing the same issue.
The following pseudocode illustrates routing priorities. It is intentionally vendor-neutral:
if conversation.owner != "ai":
return KEEP_CURRENT_OWNER
if customer.requests_human:
return HANDOFF("customer_request")
if request.requires_account_review:
return HANDOFF("account_review")
if previous_guidance_failed:
return HANDOFF("unresolved_after_guidance")
if approved_sources_are_missing_or_conflicting:
return HANDOFF("insufficient_evidence")
return ANSWER_FROM_APPROVED_SOURCES
Treat those inputs as signals your application must validate. A model's self-reported confidence should not be the only reason to continue automatically.
The ownership change also needs to be atomic. If an agent claims the conversation while an AI answer is being generated, recheck ownership before sending that answer. Use an idempotency key when creating the escalation so retries do not create duplicate tickets.
3. Transfer context along with the conversation
“Let me transfer you” is only useful if the next person receives enough context to act.
A small handoff record might look like this:
{
"conversation_id": "example-conversation-1042",
"reason": "unresolved_after_guidance",
"customer_language": "es",
"summary": "Customer reports checkout failure on mobile after domain setup.",
"attempted_steps": [
"Reviewed the domain setup guide",
"Customer reports desktop works but mobile fails"
],
"next_owner": "technical_support",
"status": "waiting_for_human"
}
This is an illustrative data structure, not a TWT Chat API payload.
Keep the original conversation available to authorized agents alongside the summary. Summaries can omit details or turn a customer's assumption into an apparent fact. Phrases such as “customer reports” help preserve that distinction.
For multilingual conversations, preserve the original wording as well as the translation. Error messages, product names, and order references are especially easy to distort. Collect only the information needed for the investigation, and exclude passwords, payment credentials, and unrelated personal data.
4. Design the offline path explicitly
A global customer may ask for a human when the entire team is asleep.
Instead of leaving them in an indefinite queue, offer an asynchronous ticket, ask for their preferred reply channel, and show the team's actual support hours. Only promise a response time that the team can meet.
Also handle the less visible failure: ticket creation itself can fail. Do not tell the customer “your ticket is open” until the system confirms that it exists. Preserve the request for retry and display an alternative contact route if needed.
For troubleshooting that depends on what the customer sees, a call or remote assistance session may be useful. Ask for consent before starting, explain what will be visible, and give the customer an obvious way to end it.
5. Test the transitions, not just the answers
Before rollout, run a small set of realistic conversations through the whole flow:
| Test case | Expected behavior |
|---|---|
| Customer asks for a human in the first message | Escalate without another troubleshooting loop |
| Two help articles give conflicting instructions | Avoid presenting either as a certain answer |
| Agent takes ownership during answer generation | Suppress the pending automated reply |
| Escalation request is retried | Keep one ticket and one owner |
| Customer changes language mid-conversation | Preserve the original messages and current language preference |
| No agent is available | Offer a clear asynchronous path |
| Ticket service is unavailable | Do not falsely confirm ticket creation |
Track the outcomes that reveal whether the handoff works: time from escalation to a human response, repeat contacts for the same issue, how often customers must repeat information, and unresolved conversations after escalation. Separate business-hours and after-hours results so averages do not hide the staffing constraint.
A lower escalation rate alone is ambiguous. It could mean better answers, or that customers are giving up before reaching someone.
Where TWT Chat fits
TWT Chat brings together AI customer service, live chat, ticketing, a knowledge base, multilingual translation, audio/video calls, and remote assistance. For a small team supporting customers across countries, those capabilities are relevant to keeping different stages of support connected.
When evaluating it—or any support platform—use the scenarios above as acceptance tests. Check the actual handoff behavior, available configuration, and integration requirements against your team's workflow. A feature list is a starting point; a complete customer conversation is the useful test.
If you are adding AI support to your product, start with one common question, one clear escalation boundary, and one reliable human follow-up path. Expand after that path works.
Which handoff failure would you test first: lost context, duplicate replies, or the after-hours queue?
Prepared with AI assistance. Cover illustration generated with AI.
Top comments (0)