Skip to main content

How Dispatching Works in Onro

Learn how the dispatching algorithm works and how you can customize its settings to match your business needs.

Onro’s dispatch system is designed to get the right driver to the right order as quickly and as fairly as possible, whether that happens automatically or manually with a dispatcher’s help.

This article explains exactly how automatic dispatch works, from the triggers that start a search, through candidate selection, ranking, and offer handling, all the way to the safeguards that keep the process reliable even under load.

Driver Assignment Models: Auto vs Manual

Orders are assigned to drivers based on the Driver Assignment Model setting in the service settings. There are two available assignment models:

Automatic

Automatic dispatching only applies to On Demand, Pickup Only (P Only), or Delivery Only (D Only) order types, and only when the corresponding service's Driver Assignment Model setting is Automatic.

When an order is created, it is set to the Pending status by default. What happens next depends on whether the order is scheduled and its dispatch time (Dispatch At):

  • Non-scheduled orders: Dispatch starts immediately. The system searches for eligible drivers and sends them the order offer based on the dispatch algorithm and your configured settings.

  • Scheduled orders: Dispatch starts based on the Dispatch Threshold configured for the order’s service. This setting determines how long before the order’s scheduled due time the dispatch process should begin.

    To learn more about how the dispatching process works for scheduled orders, please read this article.

Manual

Orders will be placed in the dispatcher with an Unassigned status by default. Dispatchers choose which driver handles each order and assign it to them, allowing greater control in specific situations.

To learn about manual assignment, please refer to this article.

In this article, we only cover the auto model. Even in auto mode, dispatchers can still intervene and take control at any point.


The Auto Dispatch Flow

🔁Two-way Matching

The system searches and matches orders with drivers from both ends, with both processes running continuously at the same time:

On one side, the order looks for drivers:

This happens when a new order is created, when an order comes back to Pending, or when a driver rejects an offer. The order searches for nearby drivers who can take it.

On the other side, the driver app looks for orders:

This happens when a driver gets online, finishes a job, or moves far enough that their location has meaningfully changed. The driver then looks for nearby orders that are still waiting.

Both sides end up in the same place: a list of suitable drivers who receive an offer.


🔎What starts a new search

A search begins whenever one of these things happens:

  • New order created: When a new (non-scheduled) order is created, the dispatch search is triggered automatically right away.

  • Order returns to Pending status: When an order is moved back to Pending from another status, the dispatch process gets triggered again. For example, if a driver cancels an order and you want to offer it to other available drivers, changing the order's status back to Pending starts a new dispatch search. It allows the order to be offered to other eligible drivers.

  • Driver gets online: When a driver goes online in the driver app, the dispatch process for the driver is triggered. The system then searches for eligible orders for that driver and offers the best-matching order based on the dispatch algorithm and configured settings.

  • Driver moves far enough: There is a Driver re-scan trigger distance setting in the Dispatching page that determines how far a driver must move before the dispatch process is triggered again using their new location. The default value is 1,000 meters, but you can always adjust it to suit your needs.

  • Driver rejects the offer: If a driver explicitly rejects an offer or the offer expires because the driver does not respond within the offer timer, both are treated as a rejection. The dispatch process is then triggered again to search for another eligible driver.

  • Driver accepts an order: After a driver accepts an order, the system checks the driver's current capacity to determine whether they can take another order. If they still have available capacity, the driver can be considered for another order.

  • Scheduled Order Dispatch: When the dispatch time arrives for a scheduled order, based on the Dispatch Threshold setting, the order is automatically dispatched to available drivers.

Search Triggers Reference

What happens (Triggers)

What the system does

New order created

Starts looking for drivers

Dispatch Threshold

When the dispatch time arrives for a scheduled order, the system starts looking for drivers

Order goes back to Pending status

Cancels old offers and starts a new search

Driver goes online

Driver starts looking for available orders

Driver moves far enough

Driver looks again from the new location

Driver rejects the offer

Order looks for another driver right away

Offer timer runs out

Treated the same as rejection

Driver accepts an order

System checks if the driver can take more


🔄️Rounds

Every time an order goes back to Pending status, a new round begins.

A new round clears the history of previous rejections, meaning that drivers who rejected the offer or missed the timer earlier can be offered the order again.

Within a single round, an order is normally offered to the same driver only once. This can be changed if needed; please refer to this article for more details on how to configure it.


⚙️How the matching works

Step 1: Find possible drivers

The system looks around the order’s location:

  • Pickup point for on-demand and pickup-only orders

  • Drop-off point for delivery-only orders

A driver is considered qualified only if they are:

  • Verified and Authorized

  • Online

  • Driving a vehicle type that the order requires

  • On a team allowed to serve this order

  • Within the defined search radius

For more information on how to verify a driver's registration and authorize them, please see this article.

To learn how to assign a driver to a team, read this article.

Step 2: Filter out drivers who shouldn’t get the offer

The system removes drivers from candidates who:

  • Already have a live offer for this same order

  • Already rejected this order in the current round

  • Are full with other jobs (unless they are about to finish soon)

Step 3: Rank the remaining drivers

Drivers are ranked by three things (all equally important):

  • How close they are (closer is better)

  • How long since they last got an offer (longer wait is better)

  • How many times they have rejected this order (fewer is better)

This ranking helps keep things fair so that the drivers who have been waiting longer get a better chance.

Step 4: Expand the Search Radius When No Eligible Driver Is Found (Dynamic Radius Only)

If a Dynamic Radius is configured, the search does not start at the maximum radius. It starts with the base radius and, if no eligible driver is found, gradually expands by the configured step until it reaches the maximum radius.

The Dynamic Radius is configurable for each vehicle type and zone.

If no Dynamic Radius is configured, the default search radius set in the vehicle type settings will be used. The search radius will not be expanded and will remain at that same value.

Step 5: Send the offers

All the top drivers in the current search area get the offer at the same time.

It’s a race: the first one to accept wins the job.

Step 6: Waiting for a response

Each offer has a response timer, and its duration is determined by the Driver Offer Response Window setting in Dispatching. By default, it is set to 30 seconds, but you can adjust this setting based on your needs.

Once an offer is sent to a driver, one of two things can happen:

  • If the driver accepts: The order is assigned to that driver, and all other pending offers are cancelled.

  • If the driver rejects the offer or the timer expires: it counts as a rejection, and the system immediately starts looking for another available driver.

If no other eligible drivers are available in the same round, the same order can be offered to the same driver again (if they have the capacity) based on the Max Offer Retries Per Driver setting in the Dispatching page. For example, if set to 2, order X can be offered to driver A up to 2 times after they have already rejected it before.

Eventually, if no driver is found, the next round begins, and the search starts all over again.

This process continues until a driver accepts the order, the order is cancelled, or a dispatcher manually intervenes.


Important Dispatching Settings

You can configure all settings that affect the dispatching algorithm in Dispatching Settings. You can navigate to this page by following the path below:

Admin Center → Settings → Operation Setup → Dispatching

Offer & capacity rules

These settings control driver offer timing, offer limits, driver capacity, and retry behavior during automatic dispatch. You can customize them to match your business workflow.

Setting

Default

What it controls

Driver offer response window

30 sec

Specifies how long a driver has to respond to an offer.

Max active orders per driver

2

Specifies the maximum number of assigned orders a driver can have.

Simultaneous offer broadcast limit

30

Specifies the maximum number of eligible drivers who would receive the same job offer at the same time.

Max pending offers per driver

5

Specifies the maximum number of pending offers a driver can have at once.

Max offer retries per driver

1

Determines whether a driver who previously rejected the order is offered the same order again in the same round.

Early availability window

0 minutes

Specifies how many minutes ahead the system looks to determine if a driver’s capacity will become available.‌ This is calculated based on the driver's in-progress order ETA.

Driver search & proximity

This setting controls how far a driver must travel to trigger a fresh search for available orders.

Setting

Default

What it controls

Driver re-scan trigger distance

1000 meters

Defines the distance a driver must move before the algorithm re-scans for nearby unassigned orders

Auto-dispatch radius by vehicle type

You can configure the search radius for each vehicle type here, or add/update a Dynamic Search Radius for specific zones.

The vehicle types listed here are your currently available vehicle types. The search radius for each one syncs with the corresponding vehicle type setting, so changes made in one place are reflected in the other.

Dynamic Search Radius allows you to set a different search radius for a specific zone so that the dispatch system can use a zone-specific search radius instead of the default radius configured for the vehicle type.

If no Dynamic Search Radius configuration exists, the system falls back to the vehicle type's own search radius, or 10 km.

Zone-specific search radius settings:

Setting

What it controls

Zones

Which zone this dynamic radius would apply to.

Base search radius

Starting distance for the first search

Radius increase step

How much the search area expands each time

Maximum search radius

Furthest distance the system will search

Orders tab search radius by working type

This setting controls how far a driver can search for available orders in the Driver's app Orders tab when they manually look for an order. It applies globally and is not configurable per zone.

The working types shown here are your currently available working types, and the Orders tab search radius value is pulled from the corresponding Orders Tab Search Radius field. The two values are synced, so changes made in one place are reflected in the other. You can create new working types if you require.

Scheduled order timing

This section controls how early automatic dispatch starts for scheduled orders for each service. The settings are pulled from your services and include the Dispatch Threshold and Service priority level configurations.

Setting

What it controls

Dispatch Threshold

Defines how many minutes before the scheduled pickup time an order should be sent for automatic dispatch.

Service priority level

Sets the dispatch priority for orders using this service. Orders with a higher priority are dispatched before orders with a lower priority. The priority can be set to any value of 0 or higher.

The Dispatch Threshold setting is explained in detail in this article.

Algorithm priority weights

These settings define how the system ranks orders and drivers when multiple eligible options are available.

You can select a preset profile to prioritize a specific factor, or manually adjust the individual ranking weights to achieve your desired outcome.

Use the sliders to control how much influence each factor has on the ranking. Move the slider to the right to increase its weight and give the factor more influence or higher priority, or move it to the left to reduce its influence or lower the priority.

Available presets:

  • Nearest first
    Gives more importance to distance, so closer drivers or orders are ranked higher.

  • Fair distribution
    Gives more importance to waiting time, helping distribute offers more evenly among drivers.

  • Priority first
    Gives more importance to order urgency and priority.

  • Rejection-aware
    Gives more importance to previous rejections when ranking drivers or orders.

  • Scheduled
    Gives more importance to how close an order is to its scheduled time.

Order weights

These settings determine how the system ranks available Pending orders when a driver is looking for an order. The weights control how much influence each factor has on the ranking.

The system considers the following criteria:

Criterion

Preference

Urgency

Urgent orders first

Service priority level

Higher priority first

Scheduled time proximity

Orders with a closer scheduled time first

Rejection history

Orders rejected fewer times by this driver are preferred

Order–driver distance

Closer orders are preferred

  • Urgent: How much priority is given to orders marked as urgent.

  • Service priority level: How much the service's priority level affects the order's ranking.

  • Scheduled time proximity: How much the order's scheduled time affects its ranking.

  • Rejection penalty: How much previous rejection by the driver affects the order's ranking.

  • Order–driver distance: How much the distance between the driver and the order affects its ranking.

Driver weights

These settings determine how the system ranks eligible drivers when an order is looking for a driver.

  • Driver–pickup distance: How much the driver's distance from the order affects their ranking.

  • Dispatch wait time: How much time since the driver's last offer affects their ranking.

  • Rejection penalty: How much the driver's previous rejection of the order affects their ranking.

The weight scale determines how much influence each factor has on the ranking, from low influence to strong influence.


Tracking & sync intervals

These settings control how frequently driver locations and order information are updated between the driver app and the system.

  • Dispatcher map refresh: How often driver locations are refreshed on the dispatcher map.

  • Driver app order list refresh: How often the driver app checks for new or updated orders.

  • Nearby drivers scan interval: How often the system scans for nearby drivers.

  • Driver update location type: Determines when the driver app sends location updates:

    • Timers: Updates are sent at a fixed time interval.

    • Distance-based: Updates are sent when the driver moves a specified distance.

  • Location ping frequency: How often the driver app sends the driver's location to the server.


Automatic Dispatch at a Glance

Did this answer your question?