Routing starts before anyone hears hold music. The first rules read what the system already knows about a call, which is usually the number that was dialed and the time of day.
Xima, the platform behind Atlantech's contact center service, gives one documented example. Every call enters one Primary IVR, the top-level call flow. Conditions inside it check the dialed number and can send the call to a different menu, skill group, agent or outside number "before the caller ever hears a prompt." Schedules are another condition a flow can check. Xima's Time of Day profiles cover business hours, lunch periods and after-hours coverage, and separate Holiday profiles handle closures. A call that arrives after closing can go to voicemail or an on-call team without ever joining the daytime queue.
Then come the questions only the caller can answer. A menu asks them to press 1 for sales or 2 for billing, and the answer picks the queue.
A lookup can replace some of those questions. Xima calls this a data dip. During the call, the IVR sends a value such as the caller's phone number to a configured external web service. That service searches a connected data source, such as a CRM, and returns fields about the customer. Xima's examples include an assigned representative, a language preference, VIP status and a region. The call flow can then branch on what came back, so a known customer skips part of the menu. A lookup rule inherits the mistakes in the record, though. If the language field is wrong, that customer lands in the wrong queue on every call whose flow branches on that field.
Written channels get the same treatment with different inputs. Xima's email routing rules match keywords in the subject line or body and send the message to a skill group. The rules are checked in ranked order.
Entry rules also need a default. Xima's guide to its older Call Routing menu warns that no default skill is set out of the box, and that a call matching no rule "is disconnected immediately unless a default skill is configured." Whatever platform you use, decide where an unmatched contact goes and place a test call to confirm it.