BreadCrumbs: Asterisk Queue

Asterisk Queue

From Luke Jackson

(Difference between revisions)
Jump to: navigation, search
Revision as of 04:29, 17 May 2007 (edit)
Ljackson (Talk | contribs)

← Previous diff
Current revision (20:51, 17 May 2007) (edit)
Ljackson (Talk | contribs)
(Dynamic Members Macros)
 
Line 1: Line 1:
-== Queue Log App ==+== Queue Log Function ==
QueueLog(queuename,uniqueid,agent,event,params): QueueLog(queuename,uniqueid,agent,event,params):
Line 11: Line 11:
== Dynamic Members Extension == == Dynamic Members Extension ==
-Add the following line to enable the agent-add macro for a queue into your extensions configuration file.+Add the following line to enable the agent-manage macro for a queue into your extensions configuration file.
- exten => 1234*,1,Macro(agent-add,1234,)+ exten => 1234*,1,Macro(agent-manage,1234,)
== Dynamic Members Macros == == Dynamic Members Macros ==
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 Add Members and Record Time-In-Queue (Asterisk 1.2) ===+* '''Important:''' Ensure that your context for internal calls is the same as '''from-internal''' if not you will have to change this.
-Adds or removes a dynamic member to the queue and logs the time in queue in seconds in /var/log/asterisk/queue_log.+=== Dynamically Manage Agents/Members and log Time-In-Queue (Asterisk 1.4) ===
 + 
 +Adds or removes a dynamic member to the queue based on called ID information and logs the time in queue in seconds to /var/log/asterisk/queue_log.
<pre> <pre>
-; Adds a dynamic agent/member to a queue and logs Time-In-Queue+; Adds or removes a dynamic agent/member for a queue and logs Time-In-Queue
-; arg1 = trunk number, arg2 = number+; arg1 = queue number, arg2 = number
-[macro-agent-add]+[macro-agent-manage]
exten => s,1,Wait(1) exten => s,1,Wait(1)
exten => s,2,Macro(user-callerid) exten => s,2,Macro(user-callerid)
exten => s,3,Set(CALLBACKNUM=${CALLERID(number)}) exten => s,3,Set(CALLBACKNUM=${CALLERID(number)})
exten => s,4,GotoIf($["${CALLBACKNUM}" = ""]?116)) ; if no number, jump to fail. 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,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,6,QueueLog(${UNIQUEID},${ARG1},${CALLBACKNUM},AGENTLOGIN,0)
exten => s,7,Set(DB(agentlogin/q_${ARG1}_a_${CALLBACKNUM})=${EPOCH}) exten => s,7,Set(DB(agentlogin/q_${ARG1}_a_${CALLBACKNUM})=${EPOCH})
Line 48: Line 50:
exten => s,114,Playback(agent-loggedoff) exten => s,114,Playback(agent-loggedoff)
exten => s,115,Hangup() exten => s,115,Hangup()
-exten => s,116,Playback(sorry-cant-let-you-do-that)+exten => s,116,Playback(sorry-cant-let-you-do-that) ; Catch error and give simple notification.
exten => s,117,Hangup() exten => s,117,Hangup()
</pre> </pre>
 +
 +=== Dynamically Manage Agents/Members and log Time-In-Queue (Asterisk 1.2) ===
 +
 +Adds or removes a dynamic member to the queue based on called ID information and logs the time in queue in seconds to /var/log/asterisk/queue_log.
 +
 +* Requires Queue_Log patch see [[#Queue Log Function|Queue Log Function]]
<pre> <pre>
-; Removes a dynamic agent/member from a Queue+; Adds or removes a dynamic agent/member for a queue and logs Time-In-Queue
-; arg1 = trunk number, arg2 = number+; arg1 = queue number, arg2 = number
-[macro-agent-del]+[macro-agent-manage]
exten => s,1,Wait(1) exten => s,1,Wait(1)
-exten => s,2,Playback(sorry-cant-let-you-do-that)+exten => s,2,Macro(user-callerid)
-exten => s,3,Hangup()+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) ; Catch error and give simple notification.
 +exten => s,117,Hangup()
</pre> </pre>
-=== Asterisk 1.4 ===+=== Dynamically Manage Agents/Members (Asterisk 1.4) ===
 + 
 +Adds or removes a dynamic member to the queue based on called ID information.
<pre> <pre>
-; Adds a dynamic agent/member to a Queue+; Adds or removes a dynamic agent/member for a queue
-; arg1 = trunk number, arg2 = number+; arg1 = queue number, arg2 = number
-[macro-agent-add]+[macro-agent-manage]
exten => s,1,Wait(1) exten => s,1,Wait(1)
exten => s,2,Macro(user-callerid) exten => s,2,Macro(user-callerid)
exten => s,3,Set(CALLBACKNUM=${CALLERID(number)}) exten => s,3,Set(CALLBACKNUM=${CALLERID(number)})
-exten => s,4,GotoIf($["${CALLBACKNUM}" = ""]?116)) ; if no number, jump to fail.+exten => s,4,GotoIf($["${CALLBACKNUM}" = ""]?111)) ; 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,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,6,UserEvent(Agentlogin|Agent: ${CALLBACKNUM})
Line 81: Line 111:
exten => s,109,Playback(agent-loggedoff) exten => s,109,Playback(agent-loggedoff)
exten => s,110,Hangup() exten => s,110,Hangup()
-exten => s,111,Playback(sorry-cant-let-you-do-that)+exten => s,111,Playback(sorry-cant-let-you-do-that) ; Catch error and give simple notification.
exten => s,112,Hangup() exten => s,112,Hangup()
</pre> </pre>
 +
 +=== Dynamically Manage Agents/Members (Asterisk 1.2) ===
 +
 +Adds or removes a dynamic member to the queue based on called ID information.
 +
 +<pre>
 +; Adds or removes a dynamic agent/member for a 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}" = ""]?111)) ; 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,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) ; Catch error and give simple notification.
 +exten => s,112,Hangup()
 +</pre>
 +
 +=== 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-add and agent-del in extensions_additional.conf as agent-manage will now facilitate this.
 + exten => 1234*,1,Macro(agent-add,1234,)
 + exten => 1234**,1,Macro(agent-del,1234,1234)
 +
 +* Remove agent-add and agent-del from extension.conf as agent-manage will now facilitate this.
 + [macro-agent-add]
 + [macro-agent-del]
 +
[[Category:VoIP]] [[Category:VoIP]]
[[Category:Linux]] [[Category:Linux]]
[[Category:Mac OS X]] [[Category:Mac OS X]]

Current revision

Contents

Queue Log Function

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-manage macro for a queue into your extensions configuration file.

exten => 1234*,1,Macro(agent-manage,1234,)

Dynamic Members Macros

Add the appropriate macro for your needs and version of asterisk into your macros configuration file.

  • Important: Ensure that your context for internal calls is the same as from-internal if not you will have to change this.

Dynamically Manage Agents/Members and log Time-In-Queue (Asterisk 1.4)

Adds or removes a dynamic member to the queue based on called ID information and logs the time in queue in seconds to /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) ; Catch error and give simple notification.
exten => s,117,Hangup()

Dynamically Manage Agents/Members and log Time-In-Queue (Asterisk 1.2)

Adds or removes a dynamic member to the queue based on called ID information and logs the time in queue in seconds to /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)       ; 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) ; Catch error and give simple notification.
exten => s,117,Hangup()

Dynamically Manage Agents/Members (Asterisk 1.4)

Adds or removes a dynamic member to the queue based on called ID information.

; Adds or removes a dynamic agent/member for a 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}" = ""]?111))      ; 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) ; Catch error and give simple notification.
exten => s,112,Hangup()

Dynamically Manage Agents/Members (Asterisk 1.2)

Adds or removes a dynamic member to the queue based on called ID information.

; Adds or removes a dynamic agent/member for a 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}" = ""]?111))      ; 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,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) ; Catch error and give simple notification.
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-add and agent-del in extensions_additional.conf as agent-manage will now facilitate this.
exten => 1234*,1,Macro(agent-add,1234,)
exten => 1234**,1,Macro(agent-del,1234,1234)
  • Remove agent-add and agent-del from extension.conf as agent-manage will now facilitate this.
[macro-agent-add]
[macro-agent-del]
Personal tools