Summary:ASTERISK-17366: [patch] Skill routing
Reporter:Romain Bignon (romain_proformatique)Labels:patch
Date Opened:2011-02-08 05:38:24.000-0600Date Closed:
Versions:Frequency of
Environment:Attachments:( 0) 0001-ADD-initial-try-to-add-queue-skills.patch
( 1) asterisk.queue.skills.20110330.patch
( 2) asterisk.queue.skills.patch
Description:This patch introduces the skills for queue members, and the ability to route calls by skill rules.


Two new configuration files are created:
— queueskills.conf, which defines skills groups. Every members can be associated to a skills group. All skills are a string with a weight (an integer value)
— queueskillrules.conf defines rules sets.

The Queue() app can get a new parameter, the skill ruleset to use to route this call.

A ruleset groups several rules, which are compound by two parts. The first one is the condition to test this rule. If it fails, it jumps to the next one.

When a caller enters in the queue with a ruleset, the first rule is run. It evaluates the first part to know if we run it. For example, if the condition is that this rule may be evaluated the first 60 seconds, the selected members will be selected by this rule. If the caller waits more than 60 seconds, it jumps to the next rule.

To select members, the second part of a rule is an expression with logical operators ('&', '|'), arithmetical operators ('=', '<', '>', etc.), skills variables and meta variables. It is evaluated against every members.

A skills variable is an alphanumerical name which has the value of the skill weight.
A meta variable starts with a '$', and and used to substitute them with values given on the Queue() call.

For example, a rule “WT < 60, technic & ($os > 29 | english > 39)” is evaluated only the first 60 seconds. $os is replaced by the value given to Queue() (determined by the caller number or a voice menu, for example). Then, only members with the 'technic' skill, and the given os skill (for example 'linux') with a weight > 29, or with an 'english' skill > 39, will be selected.

To get more information with rules, please read configs/queueskillrules.conf.sample.
Comments:By: Leif Madsen (lmadsen) 2011-02-08 11:12:07.000-0600

This is one I'm going to test and look at to make sure we're doing something that is consistent with how Asterisk works. I really like the idea behind this though and is something people have wanted for a while. Thanks!

By: Leif Madsen (lmadsen) 2011-11-02 11:38:31.850-0500

Just curious if much (any?) testing has been done here by the original reporter. I haven't had a chance to try this out, but I still like the idea behind it.

By: Steven Davis (davissteve80) 2012-05-22 12:33:21.376-0500

Has there been any feedback from anyone on this patch? It would be a huge help to our org. This is the first I've run accros it. I will try to test it in our dev environment.

By: Kevin Scott Adams (nivek) 2012-08-13 10:07:14.630-0500

We are currently testing it.
The only thing I see is it needs some TLC on the coding guidelines.  But app_queue.c itself, needs some TLC in this area too.
We have patched it into
The other thing I might add/enhance is a exit status that tells the dialplan if it exited due to no agents with skills (JOINSKILLS) instead of a join when empty (JOINEMPTY).  That way the dialplan knows whats going on.
So far it is working as designed.  We might not hit every "skill" condition but so far so good.
We intend to use it for a World Wide Call Center starting with Language skills.  I am sure my users will find other ways of using it.

Might also look at a realtime version of the rules.  Don't want to get tooooo crazy.

By: Dalius M. (mdalius) 2014-10-30 04:20:06.357-0500

How can I access that "SWP-3059 [18766] [Applications/app_queue] [patch] Skill routing"?
Any news about this new feature?

By: Richard Mudgett (rmudgett) 2014-10-30 09:55:49.065-0500

You cannot.  SWP-3059 is used by Digium for internal issue prioritization.  Anything happening on the issue will be done on the public issue here.

By: Marek Cervenka (cervajs) 2015-07-21 09:43:45.901-0500

what can community do for accepting this functionality to trunk? updated patch?

By: Kevin Harwell (kharwell) 2015-07-21 09:55:18.898-0500

Supplying an updated patch and submitting it for review would certainly expedite the process. Please see https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process for more information on how to do that.

By: Martin Tomec (matesstar) 2015-08-03 16:38:58.129-0500

I have tried to update original patch. It still needs some refactoring and repairs, but if somebody wants to test it - he can compile it.
I am not sure if this patch is "clean enough" to create review request in gerrit...

By: Sylvain Boily (sboily_proformatique) 2019-04-10 19:41:34.891-0500

For Asterisk 16.3.0 you can find the latest version of this patch here: https://github.com/wazo-pbx/asterisk/blob/master/debian/patches/xivo_skill_queues, We maintain it on each new asterisk version released.

By: Marek Cervenka (cervajs) 2019-04-11 02:50:40.913-0500

what can community do for accepting this functionality ?

By: Sylvain Boily (sboily_proformatique) 2019-04-30 15:35:24.124-0500

I think this discussion need to be on asterisk dev mailing list. We discussed about this patch at this astridevcon 2011, asterisk developers said, this patch is to huge and we don't want to add new big features on asterisk app_queue. So, i don't know if asterisk developers have changed idea about this philosophy but it seems the futur for the asterisk app_queue, it's better to create a new application with ARI.
To include in asterisk someone need to create a gerrit entry with the patch and probably test, review, doc etc...