{agents.conf} [general] ; ; Define whether callbacklogins should be stored in astdb for ; persistence. Persistent logins will be reloaded after ; Asterisk restarts. ; persistentagents=yes ; ; Agent configuration ; ; [agents] ; ; Define autologoff times if appropriate. This is how long ; the phone has to ring with no answer before the agent is ; automatically logged off (in seconds) ; autologoff=15 ; ; Define ackcall to require an acknowledgement by '#' when ; an agent logs in using agentcallbacklogin. Default is "no". ; ;ackcall=no ; ; Define wrapuptime. This is the minimum amount of time when ; after disconnecting before the caller can receive a new call ; note this is in milliseconds. ; wrapuptime=5000 ; ; Define the default musiconhold for agents ; musiconhold => music_class ; musiconhold => native ; ; Define updatecdr. This is whether or not to change the source ; channel in the CDR record for this call to agent/agent_id so ; that we know which agent generates the call ; updatecdr=yes ; ; Group memberships for agents (may change in mid-file) ; ;group=3 ;group=1,2 ;group= ; ; -------------------------------------------------- ; This section is devoted to recording agent's calls ; The keywords are global to the chan_agent channel driver ; ; Enable recording calls addressed to agents. It's turned off by default. ; recordagentcalls=yes ; ; The format to be used to record the calls: wav, gsm, wav49. ; By default its "wav". recordformat=wav ; ; Insert into CDR userfield a name of the the created recording ; By default it's turned off. ;createlink=yes ; ; The text to be added to the name of the recording. Allows forming a url link. ;urlprefix=http://localhost/calls/ ; ; The optional directory to save the conversations in. The default is ; /var/spool/asterisk/monitor ;savecallsin=/var/calls ; ; An optional custom beep sound file to play to always-connected agents. ;custom_beep=beep ; ; -------------------------------------------------- ; ; This section contains the agent definitions, in the form: ; ; agent => agentid,agentpassword,name ; ;Evolution agent => 1000,2222,Morgan Goodfellow agent => 1001,2222,Dan Black agent => 1003,2222,Eleana agent => 1004,2222,Elizabeth agent => 1005,2222,Nancy agent => 1002,2222,Steve Smith agent => 1006,2222,Brian Smith agent => 1007,2222,Jason Mathison ;PTS Agents agent => 3501,2222,PTS1 agent => 3502,2222,PTS2 agent => 3503,2222,PTS3 agent => 3504,2222,PTS4 agent => 3505,2222,PTS5 agent => 3506,2222,PTS6 agent => 8006412930,2222,PTS7 agent => 999,2222,test account {queues.conf} [general] ; ; Global settings for call queues ; ; Persistent Members ; Store each dynamic agent in each queue in the astdb so that ; when asterisk is restarted, each agent will be automatically ; readded into their recorded queues. Default is 'yes'. ; persistentmembers = yes ; ; Note that a timeout to fail out of a queue may be passed as part of ; an application call from extensions.conf: ; Queue(queuename|[options]|[optionalurl]|[announceoverride]|[timeout]) ; example: Queue(dave|t|||45) ;[markq] ; ; A sample call queue ; ; Musiconhold sets which music applies for this particular ; call queue (configure classes in musiconhold.conf) ; musiconhold = default ; ; An announcement may be specified which is played for the member as ; soon as they answer a call, typically to indicate to them which queue ; this call should be answered as, so that agents or members who are ; listening to more than one queue can differentiated how they should ; engage the customer ; ;announce = queue-markq ; ; A strategy may be specified. Valid strategies include: ; ; ringall - ring all available channels until one answers (default) ; roundrobin - take turns ringing each available interface ; leastrecent - ring interface which was least recently called by this queue ; fewestcalls - ring the one with fewest completed calls from this queue ; random - ring random interface ; rrmemory - round robin with memory, remember where we left off last ring pass ; ;strategy = ringall ; ; Second settings for service level (default 0) ; Used for service level statistics (calls answered within service level time ; frame) ;servicelevel = 60 ; ; A context may be specified, in which if the user types a SINGLE ; digit extension while they are in the queue, they will be taken out ; of the queue and sent to that extension in this context. ; ;context = qoutcon ; ; How long do we let the phone ring before we consider this a timeout... ; ;timeout = 15 ; ; How long do we wait before trying all the members again? ; ;retry = 5 ; ; Weight of queue - when compared to other queues, higher weights get ; first shot at available channels when the same channel is included in ; more than one queue. ; ;weight=0 ; ; After a successful call, how long to wait before sending a potentially ; free member another call (default is 0, or no delay) ; ;wrapuptime=15 ; ; Maximum number of people waiting in the queue (0 for unlimited) ; ;maxlen = 0 ; ; ; How often to announce queue position and/or estimated holdtime to caller (0=off) ; ;announce-frequency = 90 ; ; ; How often to make any periodic announcement (see periodic-announce) ; ;periodic-announce-frequency=60 ; ; Should we include estimated hold time in position announcements? ; Either yes, no, or only once. ; Hold time will be announced as the estimated time, ; or "less than 2 minutes" when appropriate. ; ;announce-holdtime = yes|no|once ; ; What's the rounding time for the seconds? ; If this is non-zero, then we announce the seconds as well as the minutes ; rounded to this value. ; ; announce-round-seconds = 10 ; ; Use these sound files in making position/holdtime announcements. The ; defaults are as listed below -- change only if you need to. ; ;queue-youarenext = queue-youarenext ; ("You are now first in line.") ;queue-thereare = queue-thereare ; ("There are") ;queue-callswaiting = queue-callswaiting ; ("calls waiting.") ;queue-holdtime = queue-holdtime ; ("The current est. holdtime is") ;queue-minutes = queue-minutes ; ("minutes.") ;queue-seconds = queue-seconds ; ("seconds.") ;queue-thankyou = queue-thankyou ; ("Thank you for your patience.") ;queue-lessthan = queue-less-than ; ("less than") ;queue-reporthold = queue-reporthold ; ("Hold time") ;periodic-announce = queue-periodic-announce ; ("All reps busy / wait for next") ; ; Calls may be recorded using Asterisk's monitor resource ; This can be enabled from within the Queue application, starting recording ; when the call is actually picked up; thus, only successful calls are ; recorded, and you are not recording while people are listening to MOH. ; To enable monitoring, simply specify "monitor-format"; it will be disabled ; otherwise. ; ; You can specify the monitor filename with by calling ; Set(MONITOR_FILENAME=foo) ; Otherwise it will use MONITOR_FILENAME=${UNIQUEID} ; ; monitor-format = gsm|wav|wav49 ; ; If you wish to have the two files joined together when the call ends, set this ; to yes. ; ; monitor-join = yes ; ; This setting controls whether callers can join a queue with no members. There ; are three choices: ; ; yes - callers can join a queue with no members or only unavailable members ; no - callers cannot join a queue with no members ; strict - callers cannot join a queue with no members or only unavailable ; members ; ; joinempty = yes ; ; If you wish to remove callers from the queue when new callers cannot join, ; set this setting to one of the same choices for 'joinempty' ; ; leavewhenempty = yes ; ; ; If this is set to yes, the following manager events will be generated: ; AgentCalled, AgentDump, AgentConnect, AgentComplete ; (may generate some extra manager events, but probably ones you want) ; ; eventwhencalled = yes ; ; If this is set to no, the following manager events will be generated: ; QueueMemberStatus ; (may generate a WHOLE LOT of extra manager events) ; ; eventmemberstatusoff = no ; ; If you wish to report the caller's hold time to the member before they are ; connected to the caller, set this to yes. ; ; reportholdtime = no ; ; ; If you wish to have a delay before the member is connected to the caller (or ; before the member hears any announcement messages), set this to the number of ; seconds to delay. ; ; memberdelay = 0 ; ; If timeoutrestart is set to yes, then the timeout for an agent to answer is ; reset if a BUSY or CONGESTION is received. This can be useful if agents ; are able to cancel a call with reject or similar. ; ; timeoutrestart = no ; ; Each member of this call queue is listed on a separate line in ; the form technology/dialstring. "member" means a normal member of a ; queue. An optional penalty may be specified after a comma, such that ; entries with higher penalties are considered last. ; ;member => Zap/1 ;member => Zap/2 ;member => Agent/1001 ;member => Agent/1002 ; ; Note that using agent groups is probably not what you want. Strategies do ; not propagate down to the Agent system so if you want round robin, least ; recent, etc, you should list all the agents in this file individually and not ; use agent groups. ; ;member => Agent/@1 ; Any agent in group 1 ;member => Agent/:1,1 ; Any agent in group 1, wait for first ; available, but consider with penalty [evolution] musiconhold = native announce-holdtime = yes timeoutrestart = yes strategy = leastrecent timeout = 600 servicelevel = 60 wrapuptime=15 retry = 5 announce-frequency = 90 periodic-announce-frequency=60 monitor-format = wav monitor-join = yes joinempty = no reportholdtime = yes member => Agent/1000 member => Agent/1001 member => Agent/1002 member => Agent/1003 member => Agent/1004 member => Agent/1005 member => Agent/1006 member => Agent/1007 [Lex_Live_Inbound] musiconhold = default announce-holdtime = yes timeoutrestart = yes strategy = leastrecent timeout = 15 servicelevel = 60 wrapuptime=15 retry = 5 announce-frequency = 90 periodic-announce-frequency=60 monitor-format = wav monitor-join = yes joinempty = no reportholdtime = yes member => Agent/126 member => Agent/120 member => Agent/3505 {extensions.conf} [general] static=yes writeprotect=no [globals] CONSOLE => Console/dsp IAXINFO => guest TRUNKMSD => 1 [macro-global_crossing] exten => s,1,SetAccount(${ARG1}) exten => s,2,Answer() exten => s,3,GotoIfTime(*|*|4|jul?evolution,50001,1) exten => s,4,GotoIfTime(7:00-20:00|mon-fri|*|*?evolution,90000,1) exten => s,5,GotoIfTime(20:01-6:59|mon-fri|*|*?evolution,50001,1) exten => s,6,GotoIfTime(*|sat-sun|*|*?evolution,50001,1) [global_crossing] include => macro-global_crossing exten => 8131,1,Macro(global_crossing,8131) exten => 0662,1,Macro(global_crossing,0662) exten => 0919,1,Macro(global_crossing,0919) exten => 2084,1,Macro(global_crossing,2084) exten => 9437,1,Macro(global_crossing,9437) exten => 1863,1,Macro(global_crossing,1863) exten => 2075,1,Macro(global_crossing,2075) exten => 2098,1,Macro(global_crossing,2098) exten => 3604,1,Macro(global_crossing,3604) exten => 4023,1,Macro(global_crossing,4023) exten => 8356,1,Goto(8888,1) exten => 6061,1,Goto(progrexion,102,1) exten => 8241,1,Goto(progrexion,220,1) exten => 9372,1,Goto(progrexion,202,1) exten => 9386,1,Goto(progrexion,204,1) exten => 8107,1,Goto(progrexion,206,1) exten => 7058,1,Goto(progrexion,205,1) exten => 0894,1,Goto(progrexion,225,1) exten => 5409,1,Goto(progrexion,109,1) exten => 9745,1,Goto(progrexion,201,1) exten => 0137,1,Goto(progrexion,114,1) exten => 8039,1,Goto(progrexion,103,1) exten => 3357,1,Goto(progrexion,106,1) exten => 3468,1,Goto(progrexion,109,1) exten => 2467,1,Goto(progrexion,112,1) exten => 7309,1,Goto(progrexion,107,1) exten => 4185,1,Goto(progrexion,142,1) exten => 7453,1,Goto(progrexion,131,1) exten => 7488,1,Goto(progrexion,108,1) [custom-callboth2] exten => _1XXXNXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _1XXXNXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _1NXXNXXXXXX,3,AGI(/var/www/asterisk/bin/callout.mysql.php|${EXTEN}) exten => _NXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _NXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _NXXXXXX,3,AGI(/var/www/asterisk/bin/callout.mysql.php|${EXTEN}) [macro-progrexion_exten] exten => s,1,SetAccount(Progrexion) exten => s,2,Dial(SIP/${ARG2},20) exten => s,3,VoiceMail(${ARG1}@${ARG3}) exten => s,4,PlayBack(vm-goodbye) exten => s,5,Hangup() [macro-evolution_exten] exten => s,1,SetAccount(Evolution) exten => s,2,Dial(SIP/${ARG2},20) exten => s,3,VoiceMail(${ARG1}@${ARG3}) exten => s,4,PlayBack(vm-goodbye) exten => s,5,Hangup() [macro-cmg_exten] exten => s,1,SetAccount(Progrexion) exten => s,2,SetVar(CALLFILENAME=${UNIQUEID}) exten => s,3,MixMonitor(${CALLFILENAME}.wav) exten => s,4,Dial(SIP/${ARG2},20) exten => s,5,PlayBack(vm-goodbye) exten => s,6,Hangup() [Evolution_IVR] exten => 4942,1,SetAccount(Evolution_IVR) exten => 4942,2,Goto(evolution,90001,1) exten => 4913,1,SetAccount(Evolution_IVR) exten => 4913,2,Goto(evolution,8888,1) [Evolution_ACD] include => global_crossing exten => 8131,1,Queue(evolution) [Progrexion_Inbound] exten => 7716,1,Goto(progrexion,103,1) exten => 0182,1,Goto(progrexion,9999,1) [progrexion] include => global_crossing include => Progrexion_Inbound ; ${ARG1} - Extension ; ${ARG2} - Device(s) to ring ; ${ARG3} - Voicemail Context ;Agent Login exten => 2001,1,wait(2) exten => 2001,2,AgentLogin() exten => 2001,3,Hangup exten => _1XXXNXXXXXX,1,Dial(Zap/g2/${EXTEN:1}) exten => _1800NXXXXXX,1,Dial(Zap/g2/${EXTEN:1}) exten => _NXXXXXX,1,Dial(Zap/g2/801${EXTEN:0}) exten => 8500,1,VoicemailMain(@progrexion) exten => #1,1,VoicemailMail(@progrexion) exten => 9999,1,Answer() exten => 9999,2,SetMusicOnHold(default) exten => 9999,3,DigitTimeout(2) exten => 9999,4,ResponseTimeout(10) exten => 9999,5,Background(ivr) exten => 1,1,Directory(progrexion,progrexion,f) exten => 2,1,Goto(112,1) exten => 3,1,Goto(127,1) exten => 4,1,Goto(114,1) exten => 5,1,Goto(106,1) exten => 6,1,Goto(107,1) exten => 7,1,Goto(1000,1) exten => 8,1,Goto(102,1) exten => 0,1,Goto(1000,1) exten => 9,1,VoicemailMain(@progrexion) exten => 900,1,Wait(2) exten => 900,2,Record(/tmp/asterisk-recording:gsm) exten => 900,3,Wait(2) exten => 900,4,Playback(/tmp/asterisk-recording) exten => 900,5,Wait(2) exten => 900,6,Hangup exten => 201,1,Macro(progrexion_exten,201,201,progrexion) exten => 202,1,Macro(progrexion_exten,202,202,progrexion) exten => 203,1,Macro(progrexion_exten,203,203,progrexion) exten => 204,1,Macro(progrexion_exten,204,204,progrexion) exten => 205,1,Macro(progrexion_exten,205,205,progrexion) exten => 206,1,Macro(progrexion_exten,206,206,progrexion) exten => 220,1,Macro(progrexion_exten,220,220,progrexion) exten => 252,1,Macro(progrexion_exten,252,252,progrexion) exten => 253,1,Macro(progrexion_exten,253,253,progrexion) exten => 254,1,Macro(progrexion_exten,254,254,progrexion) exten => 257,1,Macro(progrexion_exten,257,257,progrexion) exten => 258,1,Macro(progrexion_exten,258,158,progrexion) exten => 261,1,Macro(progrexion_exten,261,261,progrexion) exten => 262,1,Macro(progrexion_exten,262,262,progrexion) exten => 225,1,Macro(progrexion_exten,225,225,progrexion) exten => 127,1,Macro(progrexion_exten,127,127,progrexion) exten => 157,1,Macro(progrexion_exten,157,157,progrexion) exten => 107,1,Macro(progrexion_exten,107,107,progrexion) exten => 112,1,Macro(progrexion_exten,112,112,progrexion) exten => 102,1,Macro(progrexion_exten,102,102,progrexion) exten => 131,1,Macro(progrexion_exten,131,131,progrexion) exten => 121,1,Macro(progrexion_exten,121,121,progrexion) exten => 109,1,Macro(progrexion_exten,109,109,progrexion) exten => 106,1,Macro(progrexion_exten,106,106,progrexion) exten => 103,1,Macro(progrexion_exten,103,103,progrexion) exten => 120,1,Macro(progrexion_exten,120,120,progrexion) exten => 126,1,Macro(progrexion_exten,126,126,progrexion) exten => 114,1,Macro(progrexion_exten,114,114,progrexion) exten => 156,1,Macro(progrexion_exten,156,156,progrexion) exten => 124,1,Macro(progrexion_exten,124,124,progrexion) exten => 125,1,Macro(progrexion_exten,125,125,progrexion) exten => 122,1,Macro(progrexion_exten,122,122,progrexion) exten => 123,1,Macro(progrexion_exten,123,123,progrexion) exten => 142,1,Macro(progrexion_exten,142,142,progrexion) exten => 108,1,Macro(progrexion_exten,108,108,progrexion) exten => 6000,1,Macro(progrexion_exten,6000,6000,progrexion) exten => 6001,1,Macro(progrexion_exten,6001,6001,progrexion) ;exten => 6002,1,Macro(progrexion_exten,6002,6002,progrexion) exten => 6003,1,Macro(progrexion_exten,6003,6003,progrexion) exten => 2000,1,Macro(progrexion_exten,2000,2000,progrexion) exten => 2001,1,Macro(progrexion_exten,2001,2001,progrexion) [CMG] include => global_crossing exten => _1XXXNXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _1XXXNXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _1XXXNXXXXXX,3,Dial(Zap/g3/${EXTEN:1}) exten => _1800NXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _1800NXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _1800NXXXXXX,3,Dial(Zap/g2/${EXTEN:1}) exten => _1866NXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _1866NXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _1866NXXXXXX,3,Dial(Zap/g2/${EXTEN:1}) exten => _1877NXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _1877NXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _1877NXXXXXX,3,Dial(Zap/g2/${EXTEN:1}) exten => _1888NXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _1888NXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _1888NXXXXXX,3,Dial(Zap/g2/${EXTEN:1}) exten => _NXXXXXX,1,SetVar(CALLFILENAME=${UNIQUEID}) exten => _NXXXXXX,2,MixMonitor(/recordings/${CALLFILENAME}.wav) exten => _NXXXXXX,3,Dial(Zap/g3/801${EXTEN:0}) exten => 6001,1,Macro(cmg_exten,6001,6001,CMG) ;Agent Login exten => 2001,1,wait(2) exten => 2001,2,AgentLogin(||${ARG2}@CMG) exten => 3508,1,Macro(cmg_exten,3508,3508) exten => 3509,1,Macro(cmg_exten,3509,3509) exten => 3510,1,Macro(cmg_exten,3510,3510) exten => 3511,1,Macro(cmg_exten,3511,3511) exten => 3515,1,Macro(cmg_exten,3515,3515) exten => 3516,1,Macro(cmg_exten,3516,3516) exten => 3517,1,Macro(cmg_exten,3517,3517) exten => 3518,1,Macro(cmg_exten,3518,3518) exten => 3504,1,Macro(cmg_exten,3504,3504) exten => 3561,1,Macro(cmg_exten,3561,3561) exten => 3562,1,Macro(cmg_exten,3562,3562) exten => 3563,1,Macro(cmg_exten,3563,3563) exten => 3564,1,Macro(cmg_exten,3564,3564) exten => 3565,1,Macro(cmg_exten,3565,3565) exten => 3501,1,Macro(cmg_exten,3501,3501) exten => 3502,1,Macro(cmg_exten,3502,3502) exten => 3503,1,Macro(cmg_exten,3503,3503) exten => 3505,1,Macro(cmg_exten,3505,3505) exten => 3506,1,Macro(cmg_exten,3506,3506) exten => 3566,1,Macro(cmg_exten,3566,3566) exten => 3567,1,Macro(cmg_exten,3567,3567) exten => 3568,1,Macro(cmg_exten,3568,3568) exten => 3569,1,Macro(cmg_exten,3569,3569) exten => 3570,1,Macro(cmg_exten,3570,3570) exten => 3522,1,Macro(cmg_exten,3522,3522) exten => 3523,1,Macro(cmg_exten,3523,3523) exten => 3524,1,Macro(cmg_exten,3524,3524) exten => 3525,1,Macro(cmg_exten,3525,3525) exten => 3529,1,Macro(cmg_exten,3529,3529) exten => 3530,1,Macro(cmg_exten,3530,3530) exten => 3531,1,Macro(cmg_exten,3531,3531) exten => 3532,1,Macro(cmg_exten,3532,3532) exten => 3533,1,Macro(cmg_exten,3533,3533) exten => 3534,1,Macro(cmg_exten,3534,3534) exten => 3535,1,Macro(cmg_exten,3535,3535) exten => 4000,1,Macro(cmg_exten,4000,4000) [evolution] include => Evolution_IVR include => Evolution_ACD exten => _1XXXNXXXXXX,1,Dial(Zap/g4/${EXTEN:1}) exten => _1800NXXXXXX,1,Dial(Zap/g2/${EXTEN:1}) exten => _1866NXXXXXX,1,Dial(Zap/g2/${EXTEN:1}) exten => _1877NXXXXXX,1,Dial(Zap/g2/${EXTEN:1}) exten => _1888NXXXXXX,1,Dial(Zap/g2/${EXTEN:1}) exten => _NXXXXXX,1,Dial(Zap/g4/801${EXTEN:0}) exten => 50001,1,VoiceMail(50001@evolution) ;exten => 90000,1,GotoIfTime(*|*|4|jul?evolution,50001,1) ; -- Holiday -- ;exten => 90000,2,GotoIfTime(7:00-20:00|mon-fri|*|*?evolution,90000,1) ; -- Open Hours -- ;exten => 90000,3,GotoIfTime(20:01-6:59|mon-fri|*|*?evolution,50001,1) ; -- Closed Hours -- ;exten => 90000,4,GotoIfTime(*|sat-sun|*|*?evolution,50001,1) ; -- Closed Weekends -- exten => 90000,1,Answer() exten => 90000,2,SetMusicOnHold(native) exten => 90000,3,PlayBack(evo_acd) exten => 90000,4,Queue(evolution|n|||) exten => 90001,1,AGI(/home/greg/ivr/ev_ivr.php) ;auto attendant exten => 6406,1,Goto(8888,1) exten => 8500,1,VoicemailMain(@evolution) exten => 8888,1,Answer() exten => 8888,2,SetMusicOnHold(native) exten => 8888,3,DigitTimeout(2) exten => 8888,4,ResponseTimeout(10) exten => 8888,5,Background(evolution_ivr) exten => 8888,6,Hangup() ;Dial by name directory exten => 1,1,Directory(evolution,evolution,f) exten => 2,1,Goto(10000,1) exten => 3,1,Goto(10001,1) exten => 4,1,Goto(10002,1) exten => 100,1,Macro(evolution_exten,100,ev_100,evolution) exten => 103,1,Macro(evolution_exten,103,ev_103,evolution) exten => 106,1,Macro(evolution_exten,106,ev_106,evolution) exten => 107,1,Macro(evolution_exten,107,ev_107,evolution) exten => 6002,1,SetCallerID("Sjon Benson" <9998887777>) exten => 6002,2,Macro(evolution_exten,6002,6002,evolution) ;Agent Login exten => 2001,1,wait(2) exten => 2001,2,AgentLogin() exten => 2001,3,Hangup ;agent phones exten => 120,1,Macro(evolution_exten,120,ev_120,evolution) exten => 121,1,Macro(evolution_exten,121,ev_121,evolution) exten => 122,1,Macro(evolution_exten,122,ev_122,evolution) exten => 2002,1,wait(2) exten => 2002,2,RemoveQueueMember()