How to stop a WhatsApp chatbot from looping: retry limits, fallbacks and a way out
“Sorry, I didn't understand. Please choose an option.” Once is fine. Three times and the customer is gone. A counter, a fallback branch and a handoff rule turn a looping bot into one that knows when to stop.
MonoChat Team Updated: 7 min read
On this page
A WhatsApp chatbot loops when it cannot match a customer’s answer and keeps asking the same question. To stop it, give every question a fallback branch for unexpected answers, count how many times the bot has asked, and hand the conversation to a person after two or three attempts, with the history attached. In MonoChat that is three nodes: Question Answer with its On Other output, Set Flow Variable to count, and an If condition on the count that leads to Assign Session.
This guide explains why loops happen on WhatsApp, how to design the fallback, and how to build a retry limit step by step.
Why chatbot loops cost more than they save
Bots save money on every conversation they finish. They lose it on the ones they trap. In an April 2026 article in California Management Review, Yuqing Ren and Rongjin Zhang bring the research together:
- multiple surveys find that 53–77% of respondents have had a bad or frustrating chatbot experience;
- a Gartner survey of 5,728 customers found that 64% would prefer companies did not use AI for customer service, and 53% would consider switching to a competitor over it;
- the same Gartner survey found that only 14% of customer service issues are fully resolved in self-service;
- 70–80% of customers prefer dealing with a human agent.
The authors name the “chatbot loop” as one of the main sources of that frustration: instead of handing over, the bot keeps asking questions, repeating information or apologising. They also point to “no easy path to a human” as the irritant that turns a small annoyance into a loss of trust.
None of this argues against bots. It argues for bots that know when to stop.
Why WhatsApp bots get stuck
Most WhatsApp bots are menus: a question with reply buttons or a list. Meta’s limits shape them. A reply-button message carries up to 3 buttons of at most 20 characters each; a list message carries up to 10 rows across all sections, each row title at most 24 characters. Within those limits, customers still do four things the menu did not expect:
- They type instead of tapping. “the second one”, “delivery”, “2”.
- They answer a different question. The bot asks for an order number; the customer sends a photo of the parcel.
- They write something the menu does not cover. “My order arrived broken” on a menu of Track / Return / Talk to us.
- They come back later to a question the bot asked yesterday.
A bot that treats each of these as “invalid, please choose again” loops. A bot that has a plan for each one does not.
WhatsApp’s own rules point the same way. Its Business Messaging Policy allows automation during the 24-hour window, but says businesses “must also have available prompt, clear, and direct escalation paths”: an in-chat transfer to a human agent, a phone number, email, web support, a store visit or a support form.
How MonoChat reads an answer
Before building the limit, it helps to know what the Question Answer node does with a reply:
- A tapped button or list row goes to that option’s output.
- A typed answer is compared with the option titles. If it is close enough to one of them, it counts as that option; “Track my order” matches a “Track order” button.
- A number picks the option in that position, so “2” means the second button or row.
- Anything else (text that matches nothing, a photo, a voice note) goes to the node’s On Other output.
So the loop is not in the matching; it is in what you connect to On Other. Leave it pointing back to the same question with no limit, and the bot will ask forever.
Build a retry limit, step by step
The example is a delivery-question menu for an online store. Customers pick Track order, Return an item or Something else.
1. Ask the question
- Go to Settings › Automation › Flows and open your bot flow, or create one.
- Add a Question Answer node with your question and three buttons. Keep the button titles short and distinct; similar titles make typed answers harder to match.
- Connect each button’s output to the branch for that topic.
2. Count the attempts
- Add a Set Flow Variable node and connect the On Other output of the question to it.
- Add a row: name
attempts, operation Increase by, value1. An empty value also counts as 1, and a variable that does not exist yet starts from 0, so the first wrong answer sets it to 1. - Rows run in order. If you want to keep what the customer wrote, add a second row that Sets
last_answeras Text from{{message.text}}.
3. Decide: ask again or hand over
- After Set Flow Variable, add an If node.
- In the condition, open the Flow group and choose Flow Variable Value:
attempts, Greater Than or Equal,2. - Connect False to a Send Message node that asks again, more clearly, and then back to the Question Answer node.
- Connect True to the handoff in step 4.
A second attempt should not repeat the first word for word. Say what the bot can do and show the options again:
Sorry, I can help with these three things here. Tap one, or type its number: 1 Track order · 2 Return an item · 3 Something else
4. Hand over properly
- Add an Assign Session node on the True branch and choose the team or agent who handles delivery questions.
- Before it, add a Send Message that tells the customer what happens next: “I’m passing you to a colleague. They can see this chat, so you won’t need to repeat anything.”
- If you have working hours, add an If with Within Working Hours first. Outside them, say when a person will reply rather than promising one now.
The agent sees the whole conversation in the shared team inbox, including the answers the bot could not match.
5. Give “Something else” a real exit
“Something else” is the button that most often leads to a loop, because it opens a free-text question the menu cannot answer. Connect it directly to Assign Session, or to an AI step that can read free text, rather than to another menu.
What the conversation looks like
Customer: hi my parcel came damaged
Bot: Hi Elena! I can help with orders here. What do you need? [Track order] [Return an item] [Something else]
Customer: it’s broken
Bot: Sorry, I can help with these three things here. Tap one, or type its number: 1 Track order · 2 Return an item · 3 Something else
Customer: (sends a photo of the box)
Bot: I’m passing you to a colleague. They can see this chat, so you won’t need to repeat anything.
Agent: Hi Elena, I’m Sam. Sorry the parcel arrived damaged, I can see your photo. I’ll arrange a replacement now.
Two attempts, one clear handoff, and the photo is already in front of the agent.
When the bot is an AI agent
AI agents read free text, so they loop less over buttons, but they can still go round in circles: asking for details the customer already gave, or repeating an answer that did not help. Two rules carry over:
- Limit the run. MonoChat’s AI Agent node works within an execution budget and continues on Completed, Budget Exceeded, Timed Out or On Fail. Connect every output except Completed to a person.
- Count the turns. The same Set Flow Variable counter works around an AI step: increase
ai_turnseach time the customer replies, and hand over after a number you choose. Our guide to AI to human handoff covers the handoff message and routing in more detail, and testing an AI agent before launch shows how to find the questions it cannot answer before customers do.
Checklist
- Every Question Answer node has its On Other output connected.
- A Set Flow Variable node increases an
attemptscounter on that branch. - An If node with Flow Variable Value decides between asking again and handing over (2 or 3 attempts).
- The second attempt is worded differently and shows the options with numbers.
- “Something else” goes straight to a person or an AI step, never to another menu.
- Assign Session sends the chat to the right team, with a message that says what happens next.
- Outside working hours, the bot says when a person will reply.
- AI steps send Budget Exceeded, Timed Out and On Fail to a person.
Get started
Retry limits are built in the no-code workflow automation builder. Start on the free Basic plan at app.monochat.ai, or read our guide to building a WhatsApp chatbot and the options for WhatsApp interactive messages.
Sources
- Yuqing Ren and Rongjin Zhang, “Chatbot Frustration is Real: Hidden Costs and Best Practices”, California Management Review Insights, 28 April 2026 (opened 3 November 2026)
- WhatsApp Business Messaging Policy (opened 3 November 2026)
- Interactive reply buttons messages (Meta for Developers) (opened 3 November 2026)
- Interactive list messages (Meta for Developers) (opened 3 November 2026)
- MonoChat Help Center: Flows, Set Flow Variable and Flow Variables (opened 3 November 2026)
Put this into practice with MonoChat