1. Script the journey
Tell the agent the whole road before it dials: which menu answers first, which key at each level, what comes after. A working prompt from our own test line:2. Tell it how to recognise a person
The handover moment matters most, so put it in the prompt explicitly: a real person greets you or asks you something - “hello”, “reception speaking”, “how can I help”. A machine states and confirms - “please hold”, “you have reached support”, “I have your account number”. Read-backs are still the machine.[IVR_END] to the greeting, not to a press - after a press you are still inside the menu.
3. Slow your digits when menus miss them
Some menus buffer audio and miss fast key tones. Put pauses between digits:w is half a second, W a full second.
w pauses on a retry, W only if digits are still missed.
4. Send multi-digit entries in one tag
Account numbers, extensions, and by-name entries go in a single press tag, in order, with the terminator if the menu wants one:5. Hold queues: script the patience
Queues speak every 30 seconds - “your call is important to us” - and an unprepared agent treats that as a person or a dead line. Name it:ivr_timeout_seconds for queue-heavy lines so the wait does not expire mid-queue.
6. Dead ends: say so and leave
If the menu might not have what you need, script the exit - otherwise the agent improvises (often reasonably, by finding a human who can route it - but that may not be what you want):7. Size the menu wait
ivr_timeout_seconds (default 240) is the maximum the agent stays inside menus - reaching a person always cancels it early. Size it to the line: 120s for a menu that answers straight away, 600s+ for lines with long queues. If it expires with no person reached, the agent says a brief goodbye and the call ends with ended_reason: ivr_timeout - a clean signal in your call data that the menu, not the conversation, was the problem.