Updated this as per wishes of Kevin Fleming. Needs review. Any mistakes/misconceptions/glaring errors?

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@40360 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Steve Murphy 2006-08-18 02:31:12 +00:00
parent a95851978b
commit 3607ab46c2
1 changed files with 101 additions and 0 deletions

View File

@ -396,6 +396,107 @@ proper actions to take. In the above dial plan code, only the cases I or O are u
which correspond to the Login and Logout actions.
=======================================================
| Controlling The Way Queues Call the Agents |
=======================================================
Notice in the above, that the commands to manipulate agents in queues have
"@agents" in their arguments. This is a reference to the agents context:
context agents
{
// General sales queue
8010 =>
{
Set(QUEUE_MAX_PENALTY=10);
Queue(sales-general|t);
Set(QUEUE_MAX_PENALTY=0);
Queue(sales-general|t);
Set(CALLERID(name)=EmptySalQ);
goto dispatch|s|1;
}
// Customer Service queue
8011 =>
{
Set(QUEUE_MAX_PENALTY=10);
Queue(customerservice|t);
Set(QUEUE_MAX_PENALTY=0);
Queue(customerservice|t);
Set(CALLERID(name)=EMptyCSVQ);
goto dispatch|s|1;
}
8013 =>
{
Dial(iax2/sweatshop/9456@from-ecstacy);
Set(CALLERID(name)=EmptySupQ);
Set(QUEUE_MAX_PENALTY=10);
Queue(support-dispatch,t);
Set(QUEUE_MAX_PENALTY=20);
Queue(support-dispatch,t);
Set(QUEUE_MAX_PENALTY=0); // means no max
Queue(support-dispatch,t);
goto dispatch|s|1;
}
6121 => &callagent(${RAQUEL});
6165 => &callagent(${SPEARS});
6170 => &callagent(${ROCK});
6070 => &callagent(${SALINE});
}
In the above, the variables ${RAQUEL}, etc stand for
actual devices to ring that person's
phone (like Zap/37).
The 8010, 8011, and 8013 extensions are purely for transferring
incoming callers to queues. For instance, a customer service
agent might want to transfer the caller to talk to sales. The
agent only has to transfer to extension 8010, in this case.
Here is the callagent macro, note that if a person in the
queue is called, but does not answer, then they are automatically
removed from the queue.
macro callagent(device)
{
if( ${GROUP_COUNT(${MACRO_EXTEN}@agents)}=0 )
{
Set(OUTBOUND_GROUP=${MACRO_EXTEN}@agents);
Dial(${device}|300|t);
switch(${DIALSTATUS})
{
case BUSY:
Busy();
break;
case NOANSWER:
Set(queue-announce-success=0);
goto queues-manip|O${MACRO_EXTEN}|1;
default:
Hangup();
break;
}
}
else
{
Busy();
}
}
In the callagent macro above, the ${MACRO_EXTEN} will
be 6121, or 6165, etc, which is the extension of the agent.
The use of the GROUP_COUNT, and OUTBOUND_GROUP follow this line
of thinking. Incoming calls can be queued to ring all agents in the
current priority. If some of those agents are already talking, they
would get bothersome call-waiting tones. To avoid this inconvenience,
when an agent gets a call, the OUTBOUND_GROUP assigns that
conversation to the group specified, for instance 6171@agents.
The ${GROUP_COUNT()} variable on a subsequent call should return
"1" for that group. If GROUP_COUNT returns 1, then the busy()
is returned without actually trying to dial the agent.
================ Caveats
In the above examples, some of the possible error checking has been omitted,