(Yes, Penalties are kinda bonkers in Asterisk 1.2, but seem to be a fair bit better in 1.4.)
I have a number of queues that my agents log into and take calls from. Some agents are better suited for some queues then others, but the goal is to get to the calls as quickly as possible, and not have calls holding and agents idle.
What I'd like to do is to assign a penalty to each agent for each queue. For example John might be a priority 1 in queues 100, and 101, but a priority 2 in 102 and 103, while Mary would be a priority 2 in 100/101 and a priority 1 in 102/103. Such that in the ringall strategy a call into queue 100 will only ring John on it's first attempt, then try both John and Mary again on the 2nd go around.
Static agents aren't viable as with them there's no way to tell that the agent isn't available to answer the call. (We have a fallover mechanism for calls into a queue either too long, or with no agents.)
So the idea is to alter the admin UI such that we add a new parameter for each queue "Default Dynamic Agent Penalty" (defaults to 1), and this penalty is used in the dialplan in the AddQueueMember? command. Then in the UI we can add specific agents that would have a different non-default priority. These could be stored in the AsteriskDB internally, or generated somehow in the .conf file, or perhaps an AGI command.