TowPilot
Digital Dispatch

Avoid rule traps

The rule-ordering and missing-data behaviors that surprise teams most, each with the fix.

Digital Dispatch checks your rules from the top and stops at the first one that matches. That one sentence has sharp corners: a rule in the wrong position, or a request that arrives missing a piece of information, produces a decision you didn't intend.

Each behavior below is real and deliberate. The fix is almost always your rule order or a setting, not a rewritten rule.

A broad rule above starves specific rules below

A rule that applies to all accounts is checked in the same order as everything else. Being broad doesn't push it to the back of the list, so it swallows the requests you wrote narrower rules for.

Say rule 1, "Catch All," covers all accounts as Normal with a 60-minute ETA, and rule 2, "VIP Premium," covers VIP Motors as Normal with a 20-minute ETA. A tow comes in from VIP Motors.

What you expectedWhat actually happens
Rule 2 gives VIP Motors its 20-minute ETA.Rule 1 matches first and accepts at 60 minutes. Rule 2 never runs.

Fix: keep specific accounts and narrow conditions at the top of the list and all-accounts catch-alls at the bottom. Drag the rules list into the order you want, as described in Write acceptance rules. The new order applies to the very next request.

A Must Match rule rejects on the spot — it never falls through

Normal and Must Match (Required) accept the same way. They differ on a failed condition: a Normal rule hands the request to the next rule, while a Must Match rule rejects it immediately with its rejection reason. No later rule runs, and the global default never gets a turn.

Say rule 1, "AAA Strict," covers AAA Western as Must Match with a 30-mile limit, and rule 2, "AAA Flexible," covers AAA Western as Normal with a 100-mile limit and a 90-minute ETA. AAA Western sends a pickup 50 miles out.

What you expectedWhat actually happens
Rule 1 passes the request along and rule 2 accepts at 90 minutes.Rule 1 rejects on the spot. Rule 2 never runs.

Fix: pick Must Match only where rejection is the outcome you want, and place it below any rule that should get a chance first.

A Must Match rule with no internal reason does nothing

A Must Match rule rejects only when it carries an Internal Rejection Reason. Without one it rejects nothing: it behaves like a Normal rule and passes failed requests down the list. The rule form fills that field in for you and won't save a Must Match rule without it, so this shows up only on rules set up outside the form.

Say "Bob's Garage Strict" is a Must Match rule with a 25-mile limit and no internal rejection reason. Bob's Garage sends a pickup 60 miles out.

What you expectedWhat actually happens
The request is rejected on the spot.The rule rejects nothing. Checking continues to the next rule, then to the global default.

Fix: open the rule's Actions tab and save it with an Internal Rejection Reason chosen. The account-specific provider reason override hides that field behind a placeholder, but the internal reason underneath is what makes a rejection fire.

A matching Skip rule ends everything

Skip is a match like any other. When a Skip rule matches, the request is left for your team and checking stops, so no rule below it can accept.

Say rule 1, "Skip Heavy Duty," skips heavy-duty work on all accounts, and rule 2, "VIP Always Accept," covers VIP Motors as Normal with a 30-minute ETA. VIP Motors sends a heavy-duty truck.

What you expectedWhat actually happens
Rule 2 accepts VIP Motors the way it always does.Rule 1 matches and the request is left for your team. Rule 2 never runs.

Fix: put the rules that must always win above your Skip rules, or narrow the Skip rule to a single account so it can't reach the others.

Skip rules under an accept-everything default still accept the rest

A Skip rule covers only what it matches. Everything it doesn't match falls through to the global default, and with Accept with Default ETA that means automatic acceptance of work you never named.

Say your global default is Accept with Default ETA at 60 minutes, and your only rule, "Skip Heavy Duty," skips heavy-duty work on all accounts. Bob's Garage sends a light-duty tow.

What you expectedWhat actually happens
Nothing is automatic until you write accept rules.No rule matches, so the global default accepts at 60 minutes.

Fix: set the global default to Skip (Let Human Decide) when your rules are meant to name what's automatic. Keep Accept with Default ETA only when accepting everything you haven't excluded is genuinely what you want.

Requests from unknown accounts skip your rules entirely

When the account on a request has no record in TowPilot, no rules are checked at all — not that account's rules, and not your all-accounts rules. The global default decides on its own. An account held by a partner company still resolves, and your all-accounts rules do run against it.

Say your global default is Accept with Default ETA at 60 minutes, and your only rule, "Review Unfamiliar Work," skips all accounts. A request arrives from an account with no record in TowPilot.

What you expectedWhat actually happens
The rule matches everything, so the request is left for your team.No rules run at all, so the global default accepts at 60 minutes.

Fix: leaving unfamiliar accounts to your team comes from the global default, not from a catch-all rule. Set the default to Skip (Let Human Decide) or Reject Automatically.

A request with no distance passes your distance limits

Max En-Route Distance, Min En-Route Distance, and Min Loaded Distance all pass when the request carries no figure for them. Location conditions fail the other way: when the pickup address can't be resolved, include filters and the per-rule base-location radius fail. One request can clear your distance guard and fail your location guard.

Say "Metro Tows" is a Normal rule with a 50-mile en-route limit, and a request arrives carrying no en-route distance.

What you expectedWhat actually happens
There's no distance to check, so the rule can't match.The distance condition passes. The rule matches on its other conditions and accepts.

Fix: when a boundary has to hold, back the distance limit with an include filter on state, county, city, or ZIP code, or with the per-rule base location. Those all fail to match when the pickup can't be resolved. An exclude filter passes instead, so it won't hold the same boundary.

Operating hours override rule time windows

Operating hours are checked before any rule. Outside them nothing runs, including a rule whose own time window covers that moment.

Say your operating schedule runs Monday to Friday, 8:00 AM to 6:00 PM, and your "Night Shift" rule carries a time window of 6:00 PM to 11:00 PM. A request arrives at 7:00 PM.

What you expectedWhat actually happens
The night rule handles it.The request falls outside operating hours, so no rules run and it's left for your team.

Fix: widen the operating schedule to cover every hour you want rules to run, then use rule time windows to divide that span.

Requests that never appear in history

Three kinds of request leave no row in the decision history. A request arriving outside your operating hours is left for your team without being recorded. When your dispatch provider shares one request with a partner company, only the company the request belongs to acts on it. The partner's copy is dropped silently. And when the details of a request can't be retrieved from your provider at all, nothing is checked and nothing is recorded.

So if your schedule runs Monday to Friday and a request arrives Saturday at 10:00 AM, you get no row showing it was left for your team. You get no row at all, because history holds only the requests your rules were checked against.

Fix: check your operating schedule first when a request is missing. If your hours cover it, the request was either a partner company's copy or one whose details never came back from your provider. Neither leaves anything to recover.

Vehicles that can't be classified count as light duty

Every request's vehicle is sorted into motorcycle, light duty, medium duty, or heavy duty from its description. When the description isn't specific enough to tell, the request counts as light duty — so a heavy-duty filter doesn't catch it.

Say "Skip Heavy Duty" skips heavy-duty work on all accounts, and a request arrives with the vehicle described only as flatbed.

What you expectedWhat actually happens
An unclear vehicle trips the skip rule.The vehicle counts as light duty, so the rule doesn't match and checking continues down the list.

Fix: treat a vehicle-type filter as a preference, not a guard. Where a wrong class would cost you, condition the rule on the account or the service type as well.

Two rules with the same priority have no guaranteed order

Rules are checked from the lowest priority number up. Two rules sharing a number have no defined order between them: either can be checked first, and the winner can change between two identical requests. The rule form has no priority field, so new rules can land on the same number.

Say two rules both sit at priority 100: "AAA Standard," covering AAA Western as Normal with a 60-minute ETA, and "AAA Rush," covering AAA Western as Normal with a 30-minute ETA. AAA Western sends a request.

What you expectedWhat actually happens
The rule higher in the list wins.Either rule can win, and the winner can differ from one request to the next.

Fix: drag the rules list into the order you want. Reordering rewrites the priority numbers, so no two rules share one.

A person acting during the delay wins

When Delay processing is on, it holds each request for 10 to 240 seconds before Digital Dispatch decides. If someone on your team accepts or rejects it inside that window, their decision stands: Digital Dispatch records what it would have done and sends nothing. A request cancelled during the window is handled the same way.

Say your delay is 30 seconds, a request arrives at 2:00:00 PM, and your dispatcher accepts it at 2:00:12 PM.

What you expectedWhat actually happens
The recorded decision is what your provider got.Decision reads Rejected while Provider Status reads Accepted. Your dispatcher's accept is what reached your provider.

Fix: read Provider Status, not Decision, when you need to know what your provider received. Both columns sit side by side on the decision history.

Quick reference

What each situation produces, at a glance.

SituationWhat happens
A broad rule sits above a specific oneThe broad rule wins; the specific rule never runs
A Normal rule's conditions failThe next rule is checked
A Must Match rule's conditions failRejected on the spot; checking stops
A Must Match rule has no internal rejection reasonNothing is rejected; the next rule is checked
A Skip rule matchesLeft for your team; no later rule runs
No rule matchesThe global default decides
The account has no record in TowPilotNo rules run; the global default decides
The request carries no distanceDistance limits pass
The pickup address can't be resolvedInclude location filters fail; exclude filters pass
The vehicle can't be classifiedCounted as light duty
Two rules share a priority numberTheir order isn't defined
The request arrives outside operating hoursLeft for your team, with no history row
A person accepts or rejects during the delayTheir decision stands; nothing is sent

Glossary

The terms used across the Digital Dispatch pages.

TermMeaning
RequestA job offer from your dispatch provider
RuleOne set of conditions and the action to take when they match
NormalAccept with the rule's ETA on a match; check the next rule otherwise
Must Match (Required)Accept on a match; reject and stop on a failed condition
Skip (Let Human Decide)Leave matched requests for your team; check the next rule otherwise
PriorityThe number that sets checking order, lowest first
Global defaultThe action taken when no rule matches
Operating hoursWhen Digital Dispatch may act at all; they override rule time windows
Delay processingThe buffer, in seconds, before a decision is made
Learning modeDecisions are recorded but never sent to your provider
Live modeAccept and reject responses reach your provider
Provider StatusWhat your dispatch provider ended up recording for the request

On this page