Routing Rules
A routing rule decides who handles a conversation. Without rules, everything lands unassigned and someone has to triage manually. With rules, you can route by skill, language, tier, channel, sentiment, time of day, or any combination of those.
Anatomy of a routing rule
| Component | Examples |
|---|---|
| Trigger | conversation.created, message.received, transfer.requested |
| Conditions | Channel, language, customer tier, agent skill, sentiment, time, custom field |
| Actions | Assign to agent / team / queue, set priority, set SLA, tag, transfer to AI, notify |
Common routing patterns
Skill-based routing
Trigger: conversation.created
Condition: conversation contains "billing"
Action: route to team "Billing Support"Language routing
Trigger: conversation.created
Condition: detected language == "de"
Action: route to team "DACH Support"Tier routing with overflow
Trigger: conversation.created
Condition: customer.tier == "gold" AND team("Senior").available_count > 0
Action: assign to team "Senior"
Trigger: conversation.created (lower-priority rule)
Condition: customer.tier == "gold"
Action: assign to team "Tier 2", priority "high"Sentiment-based escalation
Trigger: scorecard.created
Condition: scorecard.sentiment_end == "negative" AND scorecard.empathy < 3
Action: notify supervisor, tag "needs-coaching"Conditions can reference any field on conversations, contacts, agents, and scorecards β including custom fields. The condition builder autocompletes available fields as you type.
Build a rule
Open Automations
Automations β Routing rules β New rule.
Pick a trigger
Most rules use conversation.created. Other useful ones: message.received (for ongoing conversations), ticket.created, scorecard.created.
Add conditions
Combine with AND / OR. The rule fires only when all AND-grouped conditions pass and any OR-grouped conditions pass.
Add actions
| Action | Notes |
|---|---|
| Assign to agent | A specific agent β useful for VIP routing. |
| Assign to team | The teamβs queue picks it up by capacity. |
| Assign to AI agent | Hand off to a specific AI agent. |
| Set priority | low, normal, high, urgent. Drives SLA. |
| Set SLA policy | Override the default SLA. |
| Add tag | For reporting and downstream rules. |
| Notify | Slack / email β see Notifications. |
| Call webhook | POST to your endpoint. |
| Transfer | Move to a different channel or team mid-conversation. |
Test
Use Test against last 100 conversations to see what would have happened. Adjust conditions until the test results look right.
Activate
Toggle the rule on. It applies to new triggers from that point β it doesnβt retroactively re-route existing conversations.
Capacity and skill matching
When you route to a team, Omniflow picks an agent based on:
- Online status β only online agents.
- Capacity β agents under their concurrent-conversation limit.
- Skills β only agents with matching skills (if the rule specifies any).
- Workload balance β round-robin within the eligible set.
Configure skills under Settings β Skills and assign per-agent.
Stop on match vs continue
By default, the first matching rule wins. To layer rules (e.g. always tag, then route), set the upstream rule to Continue.
| Pattern | Setup |
|---|---|
| Pure routing | Stop on match. |
| Tag β route β notify | Three rules, first two continue, last one stops. |
| Default fallback | Last rule with no conditions, continue off. |
Donβt build catch-all routing rules at the top of the list. Theyβll match everything and short-circuit your specialized rules. Keep specific rules first, generic last.
Open in Omniflow
Related
| If you want to⦠| Go to |
|---|---|
| Set SLA timers | SLA & Business Hours |
| Send routing alerts | Notifications |
| Use CRM data in conditions | CRM integrations |