The cheapest route that kills your ASR

5 min read

You load three supplier price lists. The switch sends every call to the lowest price. A week later the customer says answer rate collapsed, and you paid for cheap minutes that never connected.

Least cost routing (LCR) is the right first sort. Leave it as the last sort and a bad terminator wins on price. SIPNEX wrote on 4 July 2026 that a cheaper minute on a weak path is an expensive minute once unanswered attempts pile up. ASTPP listed the same gap on 3 June 2026: call cost with no ASR or ACD next to it.

This article is for wholesale operators who run LCR and need the next rule: rank a terminator on live answer rate and duration, then use price to break ties.

Least cost routing ranks on price

Least cost routing loads each supplier’s prices, matches the dialed prefix (longest match), and offers the cheapest terminator first. If that path fails, the switch tries the next cheapest.

That job is real. Margin sits in the gap between buy price and sell price. The 2020 LCR article flags the quality problem: the cheapest path often has the worst quality, and LCR picks it first.

Ajoxi describes quality-weighted LCR this way: a route that is a fraction of a cent cheaper does not win when its answer rate is worse.

Answer rate changes the real cost

Answer-seizure ratio (ASR) is answered calls divided by attempts. Average call duration (ACD) is the length of those answered calls.

Our ASR article treats 40–50% as a floor and 60% as strong, and it treats ACD around 4–5 minutes as acceptable. Those numbers are a starting point. Destinations differ. A route to Pakistan and a route to France do not share one “good” ASR.

On the floor you see this:

  • Low ASR means more attempts for the same completed minutes. Customers retry. Dialers burn leads. Post-dial delay grows as the switch hunts.
  • Short ACD can mean false answer (FAS), one-way audio, or a path that answers and dies.

Price-only LCR cannot see that. It sees the row on the price list.

A teaching sketch

This is a sketch, not a trace from a Kolmisoft system.

You sell a destination at 0.020 per minute. Two terminators can reach it.

Terminator Buy price ASR on the last 50 calls
A 0.010 50%
B 0.012 80%

LCR sends the next 100 attempts to A. Fifty connect. To land the same 50 answers on B you need about 63 attempts.

You saved 0.002 per billed minute on A. You spent extra attempts, extra hunt time, and a customer who measures you on ASR, not on your buy price. SIPNEX’s line from 4 July 2026 fits: cheap minutes on a bad route are expensive minutes.

If A’s ACD also drops to 20–30 seconds while B holds a few minutes, you are not comparing two honest paths. You are comparing a path that looks cheap on the price list with a path that carries a conversation.

Rank by quality, then by price

Wholesale routing does not drop LCR. It puts a quality floor under it.

ASTPP’s 3 June 2026 billing piece names the failure: static tables that ignore carrier quality, and cost that never sits next to ASR and ACD. Ajoxi says live performance sits in the ranking, so a cheaper route loses when answer rate is worse.

On Kolmisoft, that ranking is quality routing. M4 lists it on the Class 4 page as routing by quality (adaptive routing based on an ASR/ACD formula), next to LCR, priority, and percentage routing. MOR has the same idea as an Advanced Routing add-on: you set the LCR order to Quality and pick a rule.

Wholesale volume belongs on M4. Retail, resellers, and PBX features belong on MOR. You cannot upgrade MOR into M4. See Class 4 vs Class 5.

How MOR and M4 compute quality

You write a Quality Index formula. The switch scores each path on recent calls and dials the higher score first.

On M4 the score is per dial peer and terminator pair. The same terminator can look good in one dial peer and poor in another. On MOR the score is per LCR and provider pair.

Variables you can put in the formula include:

  • ASR, ACD
  • TOTAL_CALLS, TOTAL_ANSWERED, TOTAL_FAILED, TOTAL_BILLSEC
  • PRICE (terminator or provider rate)
  • On M4 only: WEIGHT and PERCENT from the dial peer

Each variable uses a window of last calls. You pick the window. A short window reacts faster and jumps around more. A long window is steadier and slower to notice a dead path. The documented ceiling is 200 last calls per variable.

A formula is maths. One teaching example on M4 is:

WEIGHT + (ASR * ACD * PRICE) / 2

That line shows syntax, not a production recipe. A common start is ASR * ACD, so a path needs both answers and duration. 1 / TOTAL_BILLSEC flips the sort if you want the lowest duration first.

Higher Quality Index dials first. On M4, equal scores then follow terminator priority in the dial peer. Inspect the current order on Quality Routing Stats before you assign the rule to live traffic. If the formula uses PRICE, enter a destination number so the switch can look up the rate. Missing rate means PRICE is 0.

M4 quality routing is off in the core until you set disable_advanced_routing=0 in /etc/m2/system.conf on the Radiusd server and run m2 reload. MOR quality routing lives under Addons → Advanced Routing → Quality Routing.

Internal hangup codes do not count as bad quality. On M4, codes 300–399 stay out of the quality score, except 312 (caller canceled). On MOR, codes 200–299 stay out, except 241 (caller canceled before answer). A capacity-full hangup is not a quality verdict on the terminator.

A new terminator starts at zero

A terminator with no calls has Quality Index 0. If your formula is ASR alone, that new path sits at the bottom and may never get the calls it needs to prove itself.

Give it a start by mixing in TOTAL_CALLS. Example for a 50-call window:

ASR + 100 * (50 - TOTAL_CALLS)

Zero calls scores a large bonus. After 50 calls the bonus is gone and you rank on ASR. Every terminator in the list then gets a round of real attempts before quality takes over.

A new dial peer with old terminators is a different case. M4 and MOR can seed the first stats from calls those terminators already made on other dial peers or LCRs. Those seed stats are general. After enough calls on the new pair, the pair’s own numbers replace them.

What to do this week

  1. Pull ASR and ACD per terminator per destination for the last week. If the cheapest path is also the worst ASR, LCR did what you asked, and the ask is wrong.
  2. Put a quality rule on a test originator (M4) or a test user (MOR). Trace one call and read the order.
  3. Start with a formula you can explain: ASR * ACD, or ASR with a call-count bonus for new paths. Skip a twenty-term formula on day one.
  4. Keep LCR or priority as the backup for destinations where you do not have enough samples.

Priority routing has a job when you know the order and you do not want the CPU of a live formula. Priority-based routing is the static list. Quality routing is the list that moves when ASR moves.

Does quality routing replace LCR?

No. LCR finds the cheap path. Quality routing reorders paths that exist so a bad ASR does not win on price alone.

What ASR should I treat as a floor?

Use your own destinations as the baseline. Our ASR article cites 40–50% as a rough floor and 60% as strong. Ajoxi quotes healthy CLI routes above 90%. Those are different traffic mixes. Watch the drop against last week, not against a global number.

Why does a new supplier never get traffic?

Quality Index starts at 0 when there are no calls. Add a TOTAL_CALLS term so new paths get a first batch of attempts, then drop back to ASR or ACD.

Does MOR quality routing work the same as M4?

Same idea: a formula, a window of last calls, higher score first. M4 scores dial peer plus terminator and can use WEIGHT and PERCENT. MOR scores LCR plus provider and needs the Advanced Routing add-on. Wholesale volume belongs on M4.

Open the ranking that matches the traffic

If you run wholesale on M4, turn on quality routing in the core, write a small formula, and test it on Quality Routing Stats before you point customers at it. If you mix retail and wholesale on MOR, read the Class 4 vs Class 5 post and keep the high-volume hunt on M4.

The rate on the price list is what you were quoted. The ranking is what the customer gets.


Rank the route the customer actually gets

Turn on quality routing on M4, write a small ASR/ACD formula, and test it on Quality Routing Stats before you point live traffic at it.

Contact us

Leave a Reply

Your email address will not be published. Required fields are marked *