Intents
Top 5 intents typically cover 40-60% of inbound chat volume in support and 60-75% in sales. Map them by sampling 200 recent conversations and clustering by topic — most teams find the same patterns repeating: password reset, order status, shipping update, pricing question, cancel subscription. Train the intent classifier with 15-25 utterance variants per intent (Freshchat’s recommended minimum is 10; under that the model misclassifies). Add new intents only when you’ve seen them at meaningful volume — three or more in a week — because every added intent dilutes classification accuracy until you retrain with fresh data.
Flows
A conversational flow handles a structured intent: greet, disambiguate, collect info, provide answer or hand off. Keep flows shallow — three to four levels deep at most. Deep nesting frustrates users because each branch adds a 5-15 second decision delay and the abandon rate climbs sharply past depth 4. Build flows with explicit exits at every level — an “I need a human” option on every node, plus a “go back” option. The flow editor lives in Freshchat -> Freddy AI -> Bot Builder -> Flows.
// Trigger a bot flow for a specific user via API
fetch(`https://api.freshchat.com/v2/bots/${botId}/flows/${flowId}/execute`, {
method: 'POST',
headers: { Authorization: `Bearer ${jwt}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
user_id: contactId,
parameters: { order_id: 'ORD-12345', channel: 'web' }
})
});
LLM Answers
Freddy Self Service answers unstructured questions by retrieving relevant KB articles and synthesizing a response. Pair LLM with intent flows — bot uses flows for structured intents where the path is fixed and policy-controlled, LLM for edge cases and long-tail questions. Configure which KB articles are eligible for LLM grounding via tags; un-tagged articles never feed the model. Keep the eligible set tight — feeding everything generates confident answers that contradict current product behavior.
Handoff
Escalate to a human on three triggers: low confidence (intent classifier confidence below 0.6), explicit keyword match (agent, human, representative, speak to someone), or two consecutive failed attempts at any flow node. Carry context to the agent — the bot’s transcript, the variables it collected, and the detected intent — so the agent doesn’t ask the customer to repeat themselves. Configure handoff timing to skip the queue if no agent is online; offering “leave a message” beats “please wait” for after-hours conversations.
Measuring
The four metrics that matter: containment rate (conversations fully handled by the bot, no handoff), CSAT on bot interactions, handoff rate by intent (high handoff on a “supported” intent means the flow is broken), and per-intent deflection (which intents are saving real agent time). A 40% containment rate on supported intents is reasonable; 70% is excellent; above 85% usually means the bot is refusing handoffs that should happen and CSAT will drop.
Common Failure Modes
Three. First, building a 50-intent bot before testing a 5-intent bot — accuracy drops with intent count, and a poorly tuned 50-intent bot performs worse than a tight 5-intent bot. Second, no fallback to a human after midnight — bot answers feel fine in the moment but the absence of a human option amplifies frustration when the bot can’t help. Third, KB articles eligible for LLM grounding that contain stale pricing or deprecated feature behavior; the bot quotes them confidently and the customer trusts the wrong answer.
What Changed in 2026
Freshchat extended Freddy Self Service to multi-turn reasoning: the bot now remembers earlier turns in the conversation and refines answers as the user clarifies. Earlier versions reset context per turn. Useful for diagnostic flows (“my screen is black” -> “is the power light on” -> “yes” -> “is the cable connected”) where each turn narrows the diagnosis.
What to do this week
Sample 50 recent bot conversations and tag each one as success, soft fail (handed off after partial help), or hard fail (handed off immediately). The hard-fail conversations point to the next intents you need to add or the flows that need to be rewritten.