[asterisk-users] Callback agents without chan_agent issues (queue recording)

Andrey Solovjov solovjov at mcn.ru
Tue Nov 21 05:14:00 MST 2006


AgentCallBackLogin is going to be deprecated, so I've decided to emulate 
chan agent using AQM and RQM funcions and Local channel.
I use asterisk 1.2.13 and latest 1.2.x. zapata.
I used example 2 from 
http://www.voip-info.org/wiki/view/Agents+without+agent+channel and 
example from queues-with-callback-members.txt from asterisk 1.4 doc 
directory. My dialplan is very similar to Digium's example. I will not 
post the whole dialplan because it's quite large.
Agent Local/${agent}@agentdial is added to the queue using AQM where 
${agent} is agent number.
Context agentdial looks like this
[agentdial]
; Local/${agent}@agentdial are dynamic queue members, they are added to 
the queue
exten => _XX.,1,Noop(Agent to dial is ${EXTEN})
exten => _XX.,n,Set(agent=${EXTEN})
exten => _XX.,n,Set(ExtToDial=${DB(AGENT/${agent}/onExten)})
exten => _XX.,n,Macro(callagent,${LDP${ExtToDial}},e${ExtToDial})
LDP${ExtToDial} is global variable where Tech/peer is stored (for 
example SIP/102)
callagent is macro which dials phone where agent is. The shortened 
version of this macro is:
[macro-callagent]
;ARG1 - What device to dial (device)
;MACRO_EXTEN is dialed agent
exten => s,1,Gotoif($[${GROUP_COUNT(${MACRO_EXTEN}@agents)} > 0]?busyhere,1)
exten => s,n,Set(OUTBOUND_GROUP=${MACRO_EXTEN}@agents)
exten => s,n,Monitor(wav|/var/calls/${UNIQUEID})
exten => s,n,Dial(${ARG1},${AGENT_TIMEOUT},${DIAL_OPTIONS})
exten => s,n,Busy
As you can see I would like to monitor all calls to the agents. That's 
where the problem is. If we use Local channel without /n option then 
monitor immediately stops when agent picks up the phone. This is normal 
behaviour of Local channel.
As a result I add Local/${agent}@agentdial/n to the queue. After that I 
can record calls.
The problem appears when agent tries to transfer call using asterisk 
blind transfer (tested for SIP, ZAP) or ZAP transfer using flash button.
    - Playing 'pbx-transfer' (language 'en')
    - Executing Dial("Local/102 at agentdial-cf4a,2", "SIP/103|100|tr") in 
new stack
Agent transfered the call and is now doing nothing but 
Local/102 at agentdial-cf4a is still busy!
    CLI> show queue q1
    q1           has 0 calls (max unlimited) in 'roundrobin' strategy 
(11s holdtime), W:0, C:0, A:0, SL:0.0% within 0s
       Members:
          Local/102 at agentdial/n (In use) has taken no calls yet
          Local/103 at agentdial/n (Unknown) has taken no calls yet
       No Callers
Result: app_queue won't call that agent (Local/102 at agentdial/n) until 
calling person stop talking to SIP/103.
There is no such problem if we use Local/102 at agentdial without /n but we 
can't monitor that channel as I've mentioned above. Problem should be 
solved in different way.
I thought of using M option of Dial command. Then dialing an agent would 
look like this:
exten => 
s,n,Dial(${ARG1},${AGENT_TIMEOUT},${DIAL_OPTIONS}M(beginmonitor^${FILENAME}))
Macro beginmonitor executes Monitor command and starts call recording. 
That works but the pause between picking up the phone and bridging two 
channels is quite large.
Thanks for reading this and sorry for my mistakes in English.

Andrey Solovjov


More information about the asterisk-users mailing list