[asterisk-users] Queue autopause

Christian Gansberger c.gansberger at gmail.com
Fri Jul 10 02:51:02 CDT 2009


On Thu, Jul 9, 2009 at 4:41 PM, Miguel Molina<mmolina at millenium.com.co> wrote:
> Christian Gansberger escribió:
>
> On Thu, Jul 9, 2009 at 12:21 AM, Miguel Molina<mmolina at millenium.com.co>
> wrote:
>
>
> Christian Gansberger escribió:
>
>
> Hi all!
>
> I want to autopause my queue member when they are not answering within
> 20 seconds, and the autopause
> should affect all queues they are member of, not only the queue where
> the call was not answered.
>
> Is there a way to do that?
>
> The members gets dynamically added. I'm using asterisk 1.4.21.2.
>
> _______________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users
>
>
>
> Why would you want to do that? The purpose of the autopause is to
> discard the "absent" agent that is not responding to the calls to not
> try it anymore until it gets unpaused by a supervisor or someone else,
> and therefore the pause is made to all queues the agent is member of.
> Why pause it on only one queue, letting it ring on other queues?
>
> Aside from the purpose you have on this, I think you would need to
> modify the app_queue.c code to make the parameter configurable inside
> each queue definition and not on the general section of queues.conf.
> Then you would need to modify the logic to handle the autopause
> configured for each queue. This is a general idea as I didn't take a
> deep look of app_queue.c to see how it works exactly.
>
> Any other solution without changing asterisk code would imply a external
> application that monitors the queues and makes the custom autopause you
> need.
>
> Just my two cents...
>
> --
> Ing. Miguel Molina
> Grupo de Tecnología
> Millenium Phone Center
>
>
> _______________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>   http://lists.digium.com/mailman/listinfo/asterisk-users
>
>
>
> To make things clearer:
>
> I want  the queue member is autopaused on all queues. As a matter of
> fact in asterisk (vers. 1.4.24.1)
> the queue member is only paused on one Queue.
>
> I tried setting autopause=yes in general context, which doesn't do anything.
> So i set autopause=yes in every Queue definition, which is working,
> but only on that queue.
>
> I don't use the agents channel (well i tried, with ending up in lots
> of trouble), because its
> depreciated in asterisk 1.4 and gone in 1.6. so i decided to
> do as proposed in UPGRADE.txt and
> asterisk-src/doc/queues-with-callback-members.txt,
> with one change, i'm not using the Local channel, because it is not
> showing the right status
> of the devices in the queue. (I wonder how the callcenter at digiums
> ist working with that).
>
> maybe anyone else having problems with queues in asterisk 1.4?
>
> yours
> christian gansberger
>
>
> You're right, the autopause on its standard behavior pauses only the member
> of the queue where it belongs. Taking a little look at app_queue.c
> (http://www.asterisk.org/doxygen/1.4/app__queue_8c.html) you can very easily
> patch the source code to achieve the functionality you want. The key
> functions are:
>
> static int set_member_paused -> Traverses the queues doing all the things
> necessary on all different scenarios (realtime, etc) to pause the member you
> give to it. If there's no queue name given, it with pause the member on all
> queues (the PAUSEALL event).
>
> static void rna -> (as the doxygen doc says) RNA == Ring No Answer. Common
> code that is executed when we try a queue member and they don't answer.
>
> If you take a look to the rna function, with autopaused enabled it will
> pause the member if it doesn't answer the queue call after the timeout time.
> You can make it pause all members just by changing this one line:
>
> 02164       if (!set_member_paused(qe->parent->name, interface, 1)) {
>
> to
>
> 02164       if (!set_member_paused("", interface, 1)) {
>
> That way we don't send the queue name, pausing it in all the queues it is
> member of.
>
> Although it's not tested, it might work for you. That's the beauty of
> Asterisk and well documented Open Source projects, you can get to the code
> as deep as you want, learn from it how it works, and change it/improve it
> according to your needs. Good contributions make it to the official code as
> well.
>
> Cheers,
>
> --
> Ing. Miguel Molina
> Grupo de Tecnología
> Millenium Phone Center
>
> _______________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>   http://lists.digium.com/mailman/listinfo/asterisk-users
>


Thanks!

I will try changing the app_queue, on my testsystem in the next days.
For now I made some dummy-queues (timeout=1), and one queue where all
the calls are taking place
and the members are logged on.

Cheers



More information about the asterisk-users mailing list