Queue Ring Strategies

Our main inbound DID comes to an IVR that terminates at a queue. I would like this queue to ring ring group 331 for 10 seconds, then 332 for 10 seconds, then 333 for 10 seconds, then repeat. I also have the queue set to use the periodic announcement IVR breakout every two minutes.

This sounds easy, in fact, it seems like how a queue should work by default, but it isn’t. No matter what ring strategy I use, I can’t get the queue to ring these groups in that order. If I pick round robin or rrmemory, it works, but it remembers where it left off and starts at the next step for the next call, which is not what I want. From what I’ve read, there is a ring strategy called “linear” that is available in 1.6, but we are running 1.4 and will be for the foreseeable future.

My next step in trying to get this to work was to create ring group 330 that has ring groups 331, 332 and 333 as members. Doing this in FreePBX doesn’t seem to work at all, it just skips to the failover for ring group 330. Is there no way to add a ring group as a member of a ring group in FreePBX?

Finally, it was suggested that I could do this some custom dialplanning (code below). This works, except that it seems to break the periodic announcement IVR breakout, which we need. I don’t want our customers sitting on hold for 10 minutes without the opportunity to leave a message.

So, is there a better way to do this, or can someone help me add the magic to my dialplan that will allow me to use ring group 330 without breaking the periodic announcements?

[ext-group-custom]
exten => 330,1,Macro(user-callerid,)
exten => 330,n,Set(_CFIGNORE=TRUE)
exten => 330,n,Set(_FORWARD_CONTEXT=block-cf)
exten => 330,n,Set(RingGroupMethod=hunt)
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Goto(ext-group,330,1)

Thanks!

If I understand what you want to do; how about using the background command in your custom script. Something like:

[ext-group-custom]
exten => 330,1,Macro(user-callerid,)
exten => 330,n,Set(_CFIGNORE=TRUE)
exten => 330,n,Set(_FORWARD_CONTEXT=block-cf)
exten => 330,n,Set(RingGroupMethod=hunt)
exten => 330,n,Background(ivr-message) ; "Press 1000 to leave a message…"
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Background(ivr-message) ; "Press 1000 to leave a message…"
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Background(ivr-message) ; "Press 1000 to leave a message…"
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Goto(ext-group,330,1)

This way, every 10 seconds, the caller gets the opportunity to break out and leave a message. Extension 1000 is the dummy extension I picked - Use your preference…

-Pat

Ok, I have this working the way that I want now, with one exception. I created a ring group in FreePBX and used the resulting code as a template to come up with the code below. The only remaining issue seems to be call recording. We have all of the extensions in these ring groups set to always record. When I search for this call in ARI, it finds the call and the recording, but the recording is only 1KB and is blank.

Any suggestions for how I might overcome this last hurdle?

[ext-group-custom]
exten => 330,1,Macro(user-callerid,)
exten => 330,n,GotoIf($[“foo${BLKVM_OVERRIDE}” = “foo”]?skipdb)
exten => 330,n,GotoIf($["${DB(${BLKVM_OVERRIDE})}" = “TRUE”]?skipov)
exten => 330,n(skipdb),Set(__NODEST=)
exten => 330,n,Set(__BLKVM_OVERRIDE=BLKVM/${EXTEN}/${CHANNEL})
exten => 330,n,Set(__BLKVM_BASE=${EXTEN})
exten => 330,n,Set(DB(${BLKVM_OVERRIDE})=TRUE)
exten => 330,n(skipov),Set(RRNODEST=${NODEST})
exten => 330,n(skipvmblk),Set(__NODEST=${EXTEN})
exten => 330,n,Set(_CFIGNORE=TRUE)
exten => 330,n,Set(_FORWARD_CONTEXT=block-cf)
exten => 330,n,Set(RecordMethod=Group)
exten => 330,n,Macro(record-enable,330,${RecordMethod})
exten => 330,n,Set(RingGroupMethod=hunt)
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Dial(Local/[email protected],10)
exten => 330,n,Set(RingGroupMethod=)
exten => 330,n,GotoIf($[“foo${RRNODEST}” != “foo”]?nodest)
exten => 330,n,Set(_CFIGNORE=)
exten => 330,n,Set(_FORWARD_CONTEXT=from-internal)
exten => 330,n,Set(__NODEST=)
exten => 330,n,dbDel(${BLKVM_OVERRIDE})
exten => 330,n,Goto(ext-group,331,1)
exten => 330,n(nodest),Noop(SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST})