Zero-Out of Voicemail in custom dial plan

I have a FreePBX installation integrated with a legacy Toshiba PBX. The PBX’s are integrated via PRI crossover and the voicemail is connected using a Digium analog card to the analog voicemail ports on the Toshiba.

When an outside call comes in via DID or dials the extension during the IVR, then goes to voicemail (meaning that the call has never left Asterisk), zero-out works as expected. My issue is when the Toshiba PBX sends the caller to voicemail over the analog ports – that is when dialing 0 does nothing. Unless I am just missing somethign in my dial-plan, what I think I need it to do is Flash(), then SendDTMF(4800), then hangup, but I don’t know how to get the dial-plan to listen for the digit.

I based my integration off of this example here: … hibaStrata but have made some tweaks for my specific environment. Here is what it actually looks like:

[vm-from-toshiba] exten => s,1,NoCDR() exten => s,n,wait(.5) exten => s,n,answer exten => s,n,SET(TIMEOUT(absolute)=1800) exten => s,n,SET(TIMEOUT(digit)=1.5) exten => s,n,SET(TIMEOUT(response)=7) exten => s,n,waitexten(3) exten => s,n,VoicemailMain() ;exten => s,n,hangup ;; Attempt to catch errors and send them to the Front Desk exten => s,n,Wait(1) exten => s,n(begin),Noop(Playing Error_X4899 then transferring to front desk) exten => s,n,Playback(en/we-apologize&en/an-error-has-occurred&en/one-moment-please,noanswer) exten => s,n,Flash() exten => s,n,SendDTMF(4800) exten => s,n,hangup exten => _X.,1,noop(Dialed extension is ${EXTEN}) exten => _X.,n,Gotoif($["${EXTEN:-1}" = "D"]?terminated) ;;Checkout Toshiba seems to be sending a terminator 'D' There may have been a hangup before the whol$ exten => _X.,n,wait(2.5) exten => _48XX,1,VoicemailMain(${EXTEN}@default) ;use 4899 to check voicemail exten => _48XX,n,Hangup() exten => _X.,n(hu),hangup exten => _X.,n(terminated),NoCDR() exten => _X.,n,hangup exten => _9148XX,1,SET(TIMEOUT(absolute)=300) ;;; max msg 5 min - adjust as needed exten => _9148XX,n,Voicemail(${EXTEN:2},su) exten => _91XXXX,1,System(touch /tmp/vm/old_ext/${EXTEN:2}) ;;;; This is for debuging too exten => _91XXXX,n,Hangup() exten => _9248XX,1,VoicemailMain(${EXTEN:2}@default) exten => _9248XX,n,Hangup() exten => _92XXXX,1,System(touch /tmp/vm/92/${EXTEN}) exten => _92XXXX,n,Hangup() exten => T,1,Hangup()

Is it possible to do accomplish what I need?


If someone could point me in the right direction, I think I have come up with a possible resolution to my situation.

I’m considering using an If statement that looks at the channel number the call came in on. If it is between 49-56, then it should transfer using a flash() when 0 is pressed, if it came in on any other channel, it should transfer normally.

Now, I just need to know how to apply that.