; macros to do login and out of queues [macro-queueloginout] ; first argument is the queue to be added to, second(not yet implemented) is penality exten => s,1,Answer exten => s,n,Set(OUR_QM_LIST=${QUEUE_MEMBER_LIST(${ARG1})}) ; assign member list to variable so it doesn't change exten => s,n,Set(CHANNEL_TO_MATCH=${CUT(CHANNEL,-,1)}) ; get rid of the unique identifier on the end exten => s,n,Set(X=1) ; initialize counter exten => s,n,While($[${EXISTS(${CUT(OUR_QM_LIST,\,,${X})})}]) ; while we still have a value (not-null), loop exten => s,n,Set(MATCHED=${IF($[${CUT(OUR_QM_LIST,\,,${X})} = ${CHANNEL_TO_MATCH}]?1:0)}) ; match against the channel exten => s,n,Exec(${IF($[${MATCHED}]?ExitWhile():NoOp())}) ; exit while on match exten => s,n,Set(X=$[${X} + 1]) ; increase the iterator exten => s,n,EndWhile() ; End of the loop exten => s,n,GotoIf($[${MATCHED}]?100,1:400,1) ;branch on match, 100 means yes 200 means no exten => 100,1,noop(yup) ; agent is already logged in, log em out exten => 100,n,RemoveQueueMember(${ARG1}) exten => 100,n,playback(agent-loggedoff) exten => 100,n,Hangup exten => 400,1,noop(nope) ; agent is not logged in, log em in exten => 400,n,AddQueueMember(${ARG1}) ; catch if queuemember breaks exten => 400,n,Execif($[ ${AQMSTATUS} = ADDED ],Playback,agent-loginok) exten => 400,n,Execif($[ ${AQMSTATUS} = NOSUCHQUEUE ],Playback,try-again) exten => 400,n,Hangup