Asterisk Queue
From Luke Jackson
Revision as of 04:44, 17 May 2007 (edit) Ljackson (Talk | contribs) (→Dynamically Manage Members and log Time-In-Queue (Asterisk 1.2)) ← Previous diff |
Revision as of 04:45, 17 May 2007 (edit) Ljackson (Talk | contribs) (→Dynamically Manage Members and log Time-In-Queue (Asterisk 1.4)) Next diff → |
||
Line 52: | Line 52: | ||
</pre> | </pre> | ||
- | === Dynamically Manage Members and log Time-In-Queue (Asterisk 1.4) === | + | === Dynamically Manage Agents/Members and log Time-In-Queue (Asterisk 1.4) === |
Adds or removes a dynamic member to the queue and logs the time in queue in seconds in /var/log/asterisk/queue_log. | Adds or removes a dynamic member to the queue and logs the time in queue in seconds in /var/log/asterisk/queue_log. |
Revision as of 04:45, 17 May 2007
Contents |
Queue Log App
QueueLog(queuename,uniqueid,agent,event,params):
Allows you to write your own events into the queue log:
QueueLog(101,${UNIQUEID},${AGENT},WENTONBREAK,600)
http://bugs.digium.com/view.php?id=7368
Dynamic Members Extension
Add the following line to enable the agent-add macro for a queue into your extensions configuration file.
exten => 1234*,1,Macro(agent-add,1234,)
Dynamic Members Macros
Add the appropriate macro for your needs and version of asterisk into your macros configuration file.
Dynamically Manage Agents/Members and log Time-In-Queue (Asterisk 1.2)
Adds or removes a dynamic member to the queue and logs the time in queue in seconds in /var/log/asterisk/queue_log.
; Adds or removes a dynamic agent/member for a queue and logs Time-In-Queue ; arg1 = trunk number, arg2 = number [macro-agent-manage] exten => s,1,Wait(1) exten => s,2,Macro(user-callerid) exten => s,3,Set(CALLBACKNUM=${CALLERID(number)}) exten => s,4,GotoIf($["${CALLBACKNUM}" = ""]?116)) ; if no number, jump to fail. exten => s,5,AddQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal/n) ; using chan_local allows us to have agents over trunks exten => s,6,QueueLog(${UNIQUEID},${ARG1},${CALLBACKNUM},AGENTLOGIN,0) exten => s,7,Set(DB(agentlogin/q_${ARG1}_a_${CALLBACKNUM})=${EPOCH}) exten => s,8,UserEvent(Agentlogin|Agent: ${CALLBACKNUM}) exten => s,9,Wait(1) exten => s,10,Playback(agent-loginok) exten => s,11,Hangup() exten => s,106,RemoveQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal/n) exten => s,107,UserEvent(RefreshQueue) exten => s,108,Set(ORGEPOCH=${DB(agentlogin/q_${ARG1}_a_${CALLBACKNUM})}) exten => s,109,Set(LGNT=$[${EPOCH} - ${ORGEPOCH}]) exten => s,110,GotoIf($["${LGNT}" = "0"]?116:111) exten => s,111,QueueLog(${UNIQUEID},${ARG1},${CALLBACKNUM},AGENTLOGOFF,${LGNT}) exten => s,112,DBdel(agentlogin/q_${ARG1}_a_${CALLBACKNUM}) exten => s,113,Wait(1) exten => s,114,Playback(agent-loggedoff) exten => s,115,Hangup() exten => s,116,Playback(sorry-cant-let-you-do-that) exten => s,117,Hangup()
Dynamically Manage Agents/Members and log Time-In-Queue (Asterisk 1.4)
Adds or removes a dynamic member to the queue and logs the time in queue in seconds in /var/log/asterisk/queue_log.
; Adds or removes a dynamic agent/member for a queue and logs Time-In-Queue ; arg1 = queue number, arg2 = number [macro-agent-manage] exten => s,1,Wait(1) exten => s,2,Macro(user-callerid) exten => s,3,Set(CALLBACKNUM=${CALLERID(number)}) exten => s,4,GotoIf($["${CALLBACKNUM}" = ""]?116)) ; if no number, jump to fail. exten => s,5,AddQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal/n||j) ; using chan_local allows us to have agents over trunks exten => s,6,QueueLog(${UNIQUEID},${ARG1},${CALLBACKNUM},AGENTLOGIN,0) exten => s,7,Set(DB(agentlogin/q_${ARG1}_a_${CALLBACKNUM})=${EPOCH}) exten => s,8,UserEvent(Agentlogin|Agent: ${CALLBACKNUM}) exten => s,9,Wait(1) exten => s,10,Playback(agent-loginok) exten => s,11,Hangup() exten => s,106,RemoveQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal/n) exten => s,107,UserEvent(RefreshQueue) exten => s,108,Set(ORGEPOCH=${DB(agentlogin/q_${ARG1}_a_${CALLBACKNUM})}) exten => s,109,Set(LGNT=$[${EPOCH} - ${ORGEPOCH}]) exten => s,110,GotoIf($["${LGNT}" = "0"]?116:111) exten => s,111,QueueLog(${UNIQUEID},${ARG1},${CALLBACKNUM},AGENTLOGOFF,${LGNT}) exten => s,112,DBdel(agentlogin/q_${ARG1}_a_${CALLBACKNUM}) exten => s,113,Wait(1) exten => s,114,Playback(agent-loggedoff) exten => s,115,Hangup() exten => s,116,Playback(sorry-cant-let-you-do-that) exten => s,117,Hangup()
Asterisk 1.4
; Adds a dynamic agent/member to a Queue ; arg1 = trunk number, arg2 = number [macro-agent-add] exten => s,1,Wait(1) exten => s,2,Macro(user-callerid) exten => s,3,Set(CALLBACKNUM=${CALLERID(number)}) exten => s,4,GotoIf($["${CALLBACKNUM}" = ""]?116)) ; if no number, jump to fail. exten => s,5,AddQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal/n||j) ; using chan_local allows us to have agents over trunks exten => s,6,UserEvent(Agentlogin|Agent: ${CALLBACKNUM}) exten => s,7,Wait(1) exten => s,8,Playback(agent-loginok) exten => s,9,Hangup() exten => s,106,RemoveQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal/n) exten => s,107,UserEvent(RefreshQueue) exten => s,108,Wait(1) exten => s,109,Playback(agent-loggedoff) exten => s,110,Hangup() exten => s,111,Playback(sorry-cant-let-you-do-that) exten => s,112,Hangup()
FreePBX
The above macros are based on macros from the FreePBX front-end to Asterisk. If you choose to implement any of the above macros and are using FreePBX I recommend doing some additional cleanup.
- Remove all references to agent-del in extensions_additional.conf as agent-manage will now facilitate this.
exten => 1234**,1,Macro(agent-del,1234,1234)
- Remove agent-del from extension.conf as agent-manage will now facilitate this.
Categories: VoIP | Linux | Mac OS X