All pastes #186419 Raw Edit

Anonymous

public ini v1 · immutable
#186419 ·published 2006-09-29 22:04 UTC
rendered paste body
[macro-huntgroup]; ARG1  --  PBX; ARG2  --  huntgroup;exten => s,1,Verbose(1|Entering huntgroup ${ARG2} for PBX ${ARG1})exten => s,n,Answer()exten => s,n,Verbose(1|Getting initial values: strategy, music, timeout for PBX ${ARG1} in huntgroup ${ARG2})exten => s,n,Set(ARRAY(Q_ID,STRATEGY,MUSIC,TIMEOUT)=${HUNT_INITIAL(${ARG1},${ARG2})})exten => s,n,Verbose(1|Returned: Q_ID: ${Q_ID} - STRATEGY: ${STRATEGY} - MUSIC: ${MUSIC} - TIMEOUT: ${TIMEOUT})exten => s,n,Goto(members,1)exten => s,n,Hangup()exten => members,1,Verbose(1|Gathering members)exten => members,n,Set(COUNT=${HUNT_MEMBERS_COUNT(${Q_ID})})exten => members,n,GotoIf($[${COUNT} = 0]?h,end)exten => members,n,Set(X=1)	; Start at 1 so we don't have an infinite loopexten => members,n,While($[${X} <= ${COUNT}])exten => members,n,Set(OFFSET=$[${X} - 1])	; We want to start assigning at record 1, but SQL wants record 0exten => members,n,Set(HASH(HUNT_${X})=${HUNT_MEMBERS(${Q_ID}|${OFFSET})})exten => members,n,Verbose(1|HASH: ${HASH(HUNT_${X}|tech)} - ${HASH(HUNT_${X}|member_id)})	; Only No Operation if the HASH(HUNT_${X}|rrm_mark) returns NULLexten => members,n,Verbose(1|Value of hash: ${HASH(HUNT_${X}|rrm_mark)})exten => members,n,GotoIf($["${HASH(HUNT_${X}|rrm_mark)}" = "1"]?setvar:next)exten => members,n(setvar),Set(RRM_START=${X})exten => members,n(next),Verbose(1|RRM_START: ${RRM_START} - HASH rrm_mark: ${HASH(HUNT_${X}|rrm_mark)})exten => members,n,Set(X=$[${X} + 1])exten => members,n,EndWhile(End of loop)exten => members,n,GotoIf($["${RRM_START}" = ""]?:goto_strategy)exten => members,n,Set(RRM_START=1)exten => members,n(goto_strategy),Goto(${STRATEGY},1)exten => rrmemory,1,Verbose(1|Entering round-robin memory strategy)	; If we are less than or equal to COUNT (last position), return one less than start postion, else, return start (one)exten => rrmemory,n,Verbose(1|RRM_START: ${RRM_START})exten => rrmemory,n,Set(RRM_END=${IF($[${RRM_START} <= ${COUNT} & ${RRM_START} != 1]?$[${RRM_START} - 1]:${COUNT})})exten => rrmemory,n,Verbose(1|RRM_START: ${RRM_START})exten => rrmemory,n,Set(POS=${RRM_START})exten => rrmemory,n(start),Verbose(1|Calling ${HASH(HUNT_${POS}|tech)} - ${HASH(HUNT_${POS}|member_id)}); What kind of tech are we calling? GRP, SIP, IAX, or PEER (peer will use either SIP or IAX based on chanisavail)exten => rrmemory,n,GotoIf($["${HASH(HUNT_${POS}|tech)}" = "SIP"]?sip)exten => rrmemory,n,GotoIf($["${HASH(HUNT_${POS}|tech)}" = "IAX"]?iax)exten => rrmemory,n,GotoIf($["${HASH(HUNT_${POS}|tech)}" = "PEER"]?peer)exten => rrmemory,n,GotoIf($["${HASH(HUNT_${POS}|tech)}" = "GRP"]?grp:h,1) ; no where to go... lets die!exten => rrmemory,n(sip),Verbose(1|Calling SIP member...); OK, lets get the information of who we're really callingexten => rrmemory,n,Set(HASH(MEMBER)=${ROUTE_MEMBER(${HASH(HUNT_${POS}|member_id)})})exten => rrmemory,n,Set(MEMBER=SIP/${HASH(MEMBER|user_name)}#${HASH(MEMBER|pbx)})exten => rrmemory,n,Macro(callerid,IN,EXT,${CUT(MEMBER,/,2)})exten => rrmemory,n,Macro(callerid,OUT,FWD)exten => rrmemory,n,GotoIf($["${HASH(MEMBER|sip_enabled)}"]?check_local:done_calling)exten => rrmemory,n(check_local),Verbose(1|OK... Calling ${MEMBER})exten => rrmemory,n,ChanIsAvail(${MEMBER})exten => rrmemory,n,GotoIf($["${AVAILSTATUS}" != "0"]?try_remote:call)exten => rrmemory,n(try_remote),Set(MEMBER=${DUNDILOOKUP(${CUT(MEMBER,/,2)}|clients|b)})exten => rrmemory,n,GotoIf($["${MEMBER}" != ""]?call:done_calling)exten => rrmemory,n(call),Dial(${MEMBER},${HASH(MEMBER|ring_cycle)})exten => rrmemory,n,Goto(done_calling)exten => rrmemory,n(iax),Verbose(1|Calling IAX member...); OK, lets get the information of who we're really callingexten => rrmemory,n,Set(HASH(MEMBER)=${ROUTE_MEMBER(${HASH(HUNT_${POS}|member_id)})})exten => rrmemory,n,Goto(done_calling)exten => rrmemory,n(peer),Verbose(1|Calling PEER member...); OK, lets get the information of who we're really callingexten => rrmemory,n,Set(HASH(MEMBER)=${ROUTE_MEMBER(${HASH(HUNT_${POS}|member_id)})})exten => rrmemory,n,Goto(done_calling)exten => rrmemory,n(grp),Verbose(1|Calling GRP member(s)...); When calling a group of phones, we need to get the group first... checking to see; who is available locally, and also remotely. Once we determine that, we'll build; up our string that will call the members of the group in one fell swoop!exten => rrmemory,n,Set(GROUP_COUNT=${HUNT_GROUP_MEMBERS_COUNT(${HASH(HUNT_${POS}|member_id)})})exten => rrmemory,n,GotoIf($["${GROUP_COUNT}" = "0"]?done_calling)exten => rrmemory,n,Set(GROUP_X=1)exten => rrmemory,n,While($[${GROUP_X} <= ${GROUP_COUNT}])exten => rrmemory,n,Set(GROUP_OFFSET=$[${GROUP_X} - 1]); OK, time to get the member ID that we're going to look upexten => rrmemory,n,Set(HASH(GROUP_MEMBER)=${HUNT_GROUP_MEMBERS(${HASH(HUNT_${POS}|member_id)},${GROUP_OFFSET})}); Now lets get the actual member informationexten => rrmemory,n,Set(HASH(MEMBER)=${ROUTE_MEMBER(${HASH(GROUP_MEMBER|member_id)})})exten => rrmemory,n,GotoIf($["${HASH(MEMBER|user_name)}" = ""]?increment)exten => rrmemory,n,Set(HOLDER=${HASH(GROUP_MEMBER|member_tech)}/${HASH(MEMBER|user_name)}#${HASH(MEMBER|pbx)})exten => rrmemory,n,ChanIsAvail(${HOLDER})exten => rrmemory,n,Verbose(1|AVAILSTATUS: ${AVAILSTATUS})exten => rrmemory,n,GotoIf($["${AVAILSTATUS}" != "0"]?lookup_remote:set_local)exten => rrmemory,n(lookup_remote),Set(HOLDER=${DUNDILOOKUP(${CUT(HOLDER,/,2)}|clients|b)})exten => rrmemory,n,GotoIf($["${HOLDER}" = ""]?increment)exten => rrmemory,n(set_local),Set(DIALING_MEMBER=${IF($["${DIALING_MEMBER}" = ""]?${HOLDER}:${DIALING_MEMBER}&${HOLDER})})exten => rrmemory,n(increment),Set(GROUP_X=$[${GROUP_X} + 1])exten => rrmemory,n,EndWhile()exten => rrmemory,n,GotoIf($["${DIALING_MEMBER}" = ""]?done_calling)exten => rrmemory,n,Dial(${DIALING_MEMBER},${GROUP_RING_CYCLE(${HASH(HUNT_${POS}|member_id)})})exten => rrmemory,n,Goto(done_calling)exten => rrmemory,n(done_calling),GotoIf($[${POS} = ${RRM_END}]?h,1)	; If we're on our last position, set the next start position back to the start of the listexten => rrmemory,n,Set(POS=${IF($[${POS} = ${COUNT}]?1:$[${POS} + 1])})exten => rrmemory,n,Goto(start)exten => h,1,Verbose(1|Cleanup!)exten => h,n,Set(HUNT_RRM_CLEAR(${Q_ID})="")	; set fields NULLexten => h,n,Set(HUNT_MEMBERS(${Q_ID})=${IF($[${EXISTS(${POS})} & ${POS} > 1 & ${POS} != ${COUNT}]?$[${POS} - 1]:0)})	; set member for memoryexten => h,n(end),Verbose(1|All done -- goodbye)exten => h,n,Hangup()