BreadCrumbs: Asterisk Queue

Asterisk Queue

From Luke Jackson

(Difference between revisions)
Jump to: navigation, search
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:44, 17 May 2007 (edit)
Ljackson (Talk | contribs)
(Dynamically Manage Members and log Time-In-Queue (Asterisk 1.2))
Next diff →
Line 19: Line 19:
Add the appropriate macro for your needs and version of asterisk into your macros configuration file. Add the appropriate macro for your needs and version of asterisk into your macros configuration file.
-=== Dynamically Manage Members and log Time-In-Queue (Asterisk 1.2) ===+=== 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 member to the queue and logs the time in queue in seconds in /var/log/asterisk/queue_log.

Revision as of 04:44, 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 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.
Personal tools