[Asterisk-Users] Queue and Agent functionality

Marco Nicolayevsky marco at misterart.com
Sat Sep 25 14:43:51 MST 2004


Chris,

I agree with your assessment of asterisk's queues. I took Robert's reply to
my original post, and came up with a way to tackle your first scenario (no
agents in queue=caller in limbo) with his idea of setting variables. My idea
deals with setting global variable states for each agent. I only have 4
agents, so it should work for me fairly easily. In the extensions.conf file
I would have something like this:

[globals]
GCSR1=off
GCSR2=off
GCSR3=off
GCSR4=off  

Then, in the context where my agents log in/out of queue, I set the global
variable to on/off depending on their action. When the agent dials 800,
GCSR1 becomes 'on'. When they dial 801##, GCSR1 becomes 'off'.

[fromcsr1]
exten=> 800,1,AgentCallbackLogin(101|101 at dispatchlogin)
exten=> 800,2,SetGlobalVar(GCSR1=on)
exten=> 800,3,Hangup
exten=> 801,1,AgentCallBackLogin(101)
exten=> 801,2,SetGlobalVar(GCSR1=off)
exten=> 801,3,Hangup


Then, in my queue, I check for the value of GCSR1 before dumping them to the
queue. Otherwise, dump them to VM. Obviously, the GotoIf would have to check
if GCSR1 = on | GCSR2 = on | GCSR3 = on | etc... For my testing, I was just
using GCSR1.

[queue]
exten => 1,1,DigitTimeout,1
exten => 1,2,ResponseTimeout,1
exten => 1,3,GotoIf($[${GCSR1} = on]?4:5)
exten => 1,4,Queue(order|tT)
exten => 1,5,Goto(generalvm|s|1)


While this idea seems to make sense (in my head), I am unable to make it
work. For example, my GotoIF command does work, so the value of GCSR1 will
determine which path the caller takes. The part that doesn't work is in the
[fromcsr] context. My SetGlobalVar(GCSR1=on) seems to have no effect,
therefore, making my solution not work.

Does anyone have any ideas?

Thanks,

Marco



-----Original Message-----
From: asterisk-users-bounces at lists.digium.com
[mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Chris Icide
Sent: Saturday, September 25, 2004 1:34 PM
To: Asterisk Users Mailing List - Non-Commercial Discussion
Subject: [Asterisk-Users] Queue and Agent functionality

I've seen alot of posts lately on Queue and Agent functionality, and alot of
hacks to make them do different things that most call center managers want.

In the sake of doing this one time, I'd like to develop a single list of
request so we can consolidate a feature request for the Queue/Agent system.

Here are the ones that I run into the most:

1.  Queue should know the status of agents assigned to a queue and act
accordingly.

 Here are a couple examples of the problem.  

A queue has no agents logged in and handling the queue, a call comes in for
the queue, the call remains in the queue until either an agent logs in, or
the queue reaches it's timeout.  What it should do is immediately time out
setting priority +101.  Normal timeout (caller in busy queue with agents
active) should exit with priority set +1.

A Queue has active agents in a prioritized fashion.  Agent 1 is priority 1,
2 is 2, 3 is 3, and 4 is 4.  Agent 1 needs to make an outbound call as does
agent 2.  Both are now 'busy'.  The Queue still attempts to call agent 1,
gets 'busy' back from the sip device (i've only tried this with sip), and
then the system appears to wait for something like 7-8 seconds before trying
the next agent in line.

2. The queue system should allow a set of messages to be played at specific
times.  For example, a message that is played upon entry into the queue and
no other time, the current set of messages played every frequency=XX, a
message played to the caller when the call is accepted by an agent (eg
"transfering"), finally, a set of messages played to the user based upon a
predefined period int he config file.. see example below

message1-time=<time in seconds>
message1-frequency=<never|once|always>
message1=<message1-file-loc>

message2-time=<time in seconds>
message2-frequency=<never|once|always>
message2=<message2-file-loc>

Where a message <messageX-file-loc> is played <never|once|always> every
<time in seconds>.

if time is set to 0, or freqency is set to never, the message is not played.

If time is set to >0, and frequency is set to once, message is played at
messagex-time, and never again.

if time is set to >0 and frequency is set to always, message is played every
messagex-time in seconds.

3.  Agent timeout (logs the agent off if they do not respond to a ring in a
defined about of time) does not track across calls.  For example, if an
agent steps away and forgets to log out, then thier phone will ring based
upon whatever call strategy is used.  If the agent timeout is set higher
than the time the queue polls a set of agents they will never be logged out.
The timer needs to increment per agent across multiple polls.  So if my
queue poll timer is 20 secons, but the agent timeout is set to 60 seconds,
the preferred function would be to log the agent out of the queue if they
completely miss three poll events.

4. If a caller empties a handled queue (active agents) with no callers, the
caller will still hear messages (you are first in queue, etc.).  This should
not occur.  Someone posted a 2-line patch on -dev list recently to fix this
issue.



-Chris
_______________________________________________
Asterisk-Users mailing list
Asterisk-Users at lists.digium.com
http://lists.digium.com/mailman/listinfo/asterisk-users
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

!DSPAM:4155ba98170742049917856!





More information about the asterisk-users mailing list