[asterisk-users] Fwd: add a new queue strategy: SBR

Mark Michelson mmichelson at digium.com
Mon Mar 9 14:39:58 CDT 2009


nik600 wrote:
> On Mon, Mar 9, 2009 at 3:16 PM, James Sneeringer <jsneerin at gmail.com> wrote:
> 
>> If you are using dynamic queues with Local channels (as described in
>> doc/queues-with-callback-members.txt in the Asterisk source), you can
>> also optionally implement this functionality directly in the dialplan.
>> This has the added benefit of allowing you to choose on a per-agent
>> basis who is eligible for autopause.
>>
>> -James
> 
> thanks for your reply, infact i've implemented the agents in the
> dialplan as explained in queues-with-callback-members.txt but this
> approach doesn't manage the status of the agent!
> I can add / remove / pause / unpause the member interface but what
> about the "in use" status?
> The extension in the context will be every time "Not in use" or shall
> i implement hints?
> 
> Here there is a piece of my extensions.conf:
> 
> [default]
> ; login procedure for queue 001
> exten => _001XXXX,1,Answer
> exten => _001XXXX,n,AddQueueMember(001,Local/${EXTEN:3}@agents)
> exten => _001XXXX,n,Set(DB(agents/${EXTEN:3})=SIP/${CALLERID(num)})
> 
> [agents]
> exten => _XXXX,hint,${DB(agents/${EXTEN})}
> exten => _XXXX,1,Dial(${DB(agents/${EXTEN})})
> 
> and there isn't an "agent" but only an extension on a queue.
> 
> What do you think about that?
> 
> maybe i should open a new post but i think that this kind of approach
> isn't much better than the callback functionality, what do you think
> about that?
> 

The reason that the member always appears to be "not in use" is that local 
channels are optimized away once they are bridged to their real destination. The 
result of this is that since the channel does not exist anymore, the device 
state engine interprets the interface to be "not in use" anymore. One way to 
handle this issue is to change your AddQueueMember call to use 
Local/${EXTEN:3}@agents/n (notice the /n at the end). The /n tells the local 
channel driver to not attempt to optimize the local channel away.

If you are using Asterisk version 1.6.0 or above, an even better method would be 
to specify a second interface to poll for device state when adding the queue 
member. Assuming that the member at Local/${EXTEN:3}@agents will always call 
SIP/${EXTEN:3}, then what you are really interested in when receiving device 
state notifications is the SIP channel, not the local channel. You can specify 
this second state interface in AddQueueMember like so:

AddQueueMember(001,Local/${EXTEN:3}@agents,,,,SIP/${EXTEN:3})

Doing this will tell app_queue to use the SIP channel's device state to 
determine if the member is available, but when it comes time to call the agent, 
it will actually place the call to the local channel provided.

Mark Michelson



More information about the asterisk-users mailing list