The same => syntax is available starting in version 1.8 of Asterisk and above.
It looks like you are pretty close, but it does sometimes take a bit to get used to, so let me offer some suggestions.
In your last code posting, you have the last line of bvivr. This is after you have also has other extensions defined. This is incorrect. Also, that same line and the WaitExten(5) line have no priority. They probably are not even included in the code when Asterisk loads (or reloads) the dialplan code.
There is also another extension you should consider, the ‘h’ extension for hangup.
I like to have a single Hangup() call for an IVR context. Each extension should also always make it to a Hangup(). For instance, if the queue is empty, depending on the configuration of the queue in queues.conf, the call will likely continue on in the dial plan at the next priority In you example, there is not next priority. Asterisk usually hangs up at that point, but I consider that messy.
Let me offer some adjustments to your code.
[context]
exten => bvivr,1,Wait(2)
exten => bvivr,n,Answer()
exten => bvivr,n,Background(9techbusy)
exten => bvivr,n,Background(beep)
exten => bvivr,n,WaitExten(5)
exten => 1,1,Queue(sqlq)
exten => 1,n,Goto(noagent,1)
exten => 2,1,Queue(officeq)
exten => 2,n,Goto(noagent,1)
exten => 3,1,Voicemail(u180)
exten => 3,n,Goto(h,1)
exten => i,1,Playback(invalid)
exten => i,n,Goto(h,1)
exten => t,1,Playback(invalid)
exten => t,n,Goto(h,1)
exten => noagent,1,NoOP(No Agent Available)
exten => noagent,n,Playback(were-sorry&nbdy-avail-to-take-call)
exten => noagent,n,Goto(h,1)
exten => h,1,NoOp(Goodbye)
exten => h,n,Playback(goodbye)
exten => h,n,Hangup()
Note how if the call is unable to enter the queue, it goes to an extension (noagent) and plays a message before going to the hangup extension which hangs up the call.
The ‘i’ and ‘t’ extensions do the same thing, but they do not have to. There is a new ‘e’ extension that is a catchall for ‘i’, ‘t’ and ‘T’, but I have never used it. Old school I guess.
Note also that the WaitExten() is the last priority in the bvivr extension. I have found that having any priorities after that can cause unusual experiences. Anywho, if the user dials a correct extension, it will jump there. If they time out or enter an invalid extension, it will jump there so no priority, in the same extension, after WaitExten() is required.
I hope that helps.
Have fun.
Dale