[Help] Queue calls go to agent's voicemail

Hi,

Running asterisk 1.2.10 on Debian Sarge, Zaptel 1.2.7, all latest.

I have a queue defined in queues.conf:

[support] music=default strategy=roundrobin context=queueout announce-frequency=90 ;periodic-announce-frequency=60 announce-holdtime=yes timeout=15 retry=15 wrapuptime=15 maxlen=0 joinempty=strict ;leavewhenempty=yes ;announce-frequency=0 ;announce-holdtime=no member => Agent/1300,0 member => Agent/1400,0 member => Agent/1500,1

I have three agents, defined like so in agents.conf:

agent => 1300,secretgoeshere,Elvis Presley agent => 1400,secretgoeshere,James Dean agent => 1500,secretgoeshere,Frank Sinatra

I have a way to login and logout my agents like so, in extensions.conf:

exten=> 2001,2,AgentCallbackLogin(||${CALLERIDNUM}@sip-internal) exten=> 2002,2,AgentCallbackLogin(||l)

And of course, a caller can join the queue like so, defined in extensions.conf also:

exten=> 2020,1,Answer exten=> 2020,2,Ringing exten=> 2020,3,Wait(2) exten=> 2020,4,Queue(support) exten=> 2020,5,Voicemail(SupportQueue@test) exten=> 2020,6,Hangup

I have made a queue, and what I want out of this queue is:
1-If there are no agents logged in, go to voicemail box called SupportQueue.
2-If one agent is logged in and is available, and someone joins the queue, then the caller enters the queue and loiters on music on hold while the available agent’s phone rings.
3-If one agent is logged in but is in a conversation, either with another extension or with the outside, and someone joins the queue, I want the caller to go to the queue and loiter on music on hold until the agent finishes his conversation and hangs up. Then the queue should ring the free agent’s phone.

Right now it’s number three that is not working. If someone joins the queue while the logged in agent is on the phone, it automatically goes to the AGENT’S VOICEMAIL, not even the SupportQueue Voicemail.

So actually, it’s not possible to wait in the queue if there is an agent logged in and busy, which defeats the purpose of having a queue.

Does anyone have any idea what causes this? Or does anyone have any idea what is going on?

I have tried removing the voicemail for the agent’s phone, to no avail, it dumps back to the “invalid” priority.

Thanks for any help.

Edit: I corrected the version number, it’s 1.2.10, not 1.2.9.10. I wrote 1.2.9.10 due to the dain bramage.

we use AddQueueMember/RemoveQueueMember to add/remove dynamic devices to the queue, and do not have this issue.

since agentcallbacklogin is going to be deprecated in 1.4, you might consider looking at using it instead…works great for us.

otherwise, i’m not sure why this would be happening…

you MIGHT try removing the context from queues.conf, but i doubt that would do anything. someone with more experience with AgentCallbackLogin might know why this occurs, but i don’t.

I’m going to give it a whirl using AddQueueMember and RemoveQueueMember.

Stay tuned for the results.

sweet, let me know if you need a hand at all.

All right, here come the findings:

The agents can log in and out with two simple lines in extensions.conf:

exten=> 1000,1,AddQueueMember(support) exten=>1001,1,RemoveQueueMember(support)

When they log in they are dinamic agents that don’t show up in with “show agents”, but they do show up in “show queues” as dynamic members.

So, let’s go back to the list:

[quote]1-If there are no agents logged in, go to voicemail box called SupportQueue.
2-If one agent is logged in and is available, and someone joins the queue, then the caller enters the queue and loiters on music on hold while the available agent’s phone rings.
3-If one agent is logged in but is in a conversation, either with another extension or with the outside, and someone joins the queue, I want the caller to go to the queue and loiter on music on hold until the agent finishes his conversation and hangs up. Then the queue should ring the free agent’s phone.[/quote]

Using AddQueueMember and RemoveQueueMember, points 2 and 3 are working!

HOWEVER… Point 1 becomes broken. Calling with no agents logged in unfortunately yields the queue, yet again. It does not yield the SupportQueue voicemail as it should.

Does “joinempty” work with dynamic members? Which one do I want? joinempty = yes, no or strict? (Consider the list of behavior points)

I also (unfortunately) have a few more points to add to the list of my wanted behavior for the queue, but let’s get this small stuff out of the way first.

Thanks!

i would do joinempty=no. this means, that when nobody is signed into queue, the system will go to the next priority which in your case is VM.

you MIGHT need joinempty=strict, but i THINK that will allow members to joint the queue only if there is an AVAILABLE agent - you don’t want to send them to VM if all the agents are on other calls, only if there is nobody signed into queue…perhaps someone can confirm, but i’m pretty sure that’s how it works.

so, to make #1 work again, set joinempty=no.

list your other behaviors, we make extensive use of call queues and i’ve spent more time than i care to recount on configuring and researching…we might be able to help one another.

Well you asked for it, so here goes:

You’re already familiar with 1,2 and 3.

Let’s go to 4, 5 and 6 for the moment:
4-If people are in the queue, and Elvis Presley, James Dean and Frank Sinatra all logout, everyone in the queue at that point go
to the voicemail box named SupportQueue. (leavewhenempty=? yes, I believe? Or is it strict?)

5-I need Frank Sinatra to have a penalty compared to Elvis and James. People only get to speak to Frank Sinatra if both Elvis Presley AND James Dean are already talking. (This is the third option in AddQueueMember)

6-I do not want the penalty to be “static”, so I need agent codes. If Frank Sinatra is on Elvis’ phone, then Frank STILL has his same penalty, and if Elvis is on Frank’s phone, he doesn’t have any penalty, like he would on his own phone. (This is going to be a script that will go case by case, get user info and AddQueueMember with different parameters)

4 and 5 are quite important. 6 suits my fancy more than anything else (I just like general solutions).

AgentCallbackLogin fixed 6. But it’s in the past now and I have to let go.

Do you know if I can monitor my dynamic queue members with Flash Operator Panel (useful for the bosses).

Thanks for helping out!

4 - yes, you got it. leavewhenempty SHOULD kick to the next priority when everyone is out.

5 - yup, i use penalty for our helpdesk, so that the helpdesk manager always is rung first

our helpdesk manager dials 911, while everyone else dials in with 912. works great.

6 - the easy way to do this is (if you use numerical SIP device entries) is setup a script like above, where the agent dials in with not only a priority, but an SIP device as well. for instance, if i’m SIP/101, then i could do something like this:

so, to dial in 101 with priority 1, i’d enter 91101*1. you’d just have to make sure your agents knew who’s phone was what device.

hope this helps a bit - the hard part for me was remembering that AddQueueMember adds a DEVICE to a queue, not an extension. which is cool, because we add Zap and IAX channels all the time now, and it allows for a VERY flexible queue arrangement.

good luck.

Hi!

When I ditched AgentCallBackLogin everything started working fine.

With AgentCallbackLogin, NOTHING worked fine, joinempty and leavewhenempty had abosulutely no effect.

Thanks for the help, this might make its way into the system.

[quote]
hope this helps a bit - the hard part for me was remembering that AddQueueMember adds a DEVICE to a queue, not an extension. which is cool, because we add Zap and IAX channels all the time now, and it allows for a VERY flexible queue arrangement. [/quote]
I assume you mean that if you dial 911 from a zap trunk or IAX channel it would work?

So to recapitulate for people not following:
1-Agentcallbacklogin is evil.
2-Use AddQueueMember instead.

[quote=“xmarksthespot”]
I assume you mean that if you dial 911 from a zap trunk or IAX channel it would work?[/quote]

as my dialplan is written, no…but you could easily set something up to log in a cell phone, for instance:

exten => *900*NXXNXXXXXX,1,AddQueueMember(HELPDESK|Zap/g1/${EXTEN:-10})

it’s all in the dial plan…but being able to dynamically add whatever device you need has been a godsend for us - we have an third party IVR that hooks into our database that we were able to tie to asterisk VERY easily by using Queues with Zap channels added as queue members.

hope this helps.