Blind transfer

Hi,
I use FreePBX 2.0.1
When I make a blind transfert, I would like my call ring again my extension after a timeout, if the called extension does not pickup, even if the called extension has an active voicemail.
Thanks very much for help
__________________



Blind transfer
off the top of my head, that would take some custom work, don't think you are going to get it with the standard dialplan. If you have a specific extension that you want to do this with, you could setup a queue with it to transfer the call to, which would loop back to you if they aren't there. But otherwise, you'll need to use something like call parking or do some custom work (I think).
p
Philippe Lindheimer - FreePBX Project Leader
FreePBX Training Opportunities - Click Here
Get Official Paid Support - Click Here
Blind transfer
At first, thanks for replie.
I solved my problem, and i think it could be an improvement of the basic extensions.conf of freepbx, as in this case, a blind transfer never cause a lost call.
So, the solution is pretty simple.
If it can be useful for someone, follows how I wrote this behaviour.
Just be indulgent, as I am an asterisk beginner, and my english is very bad!
At first, I add an macro in extensions.conf:
;make a blind transfer come back if the target is unreachable [macro-comeback-blind-transfer] exten => s,1,Cut(RETOUR=BLINDTRANSFER,/,2);On extrait dans RETOUR L'extension d̮̩barrass̮̩e de "SIP/" exten => s,2,Cut(RETOUR=RETOUR,-,1);On extrait dans RETOUR l'extension d̮̩barrass̮̩e de l'ID de channel exten => s,3,Ringing();//On fournit une sonnerie ÃÆÃ l'oreille de celui qui est en train d'attendre qu'on le ballade... exten => s,4,Wait(10);//Attente pour permettre le raccocḫ̩ de celui qui a transf̮̩r̮̩ sur les postes analogiques exten => s,5,Goto(ext-local,${RETOUR},1);//On renvoie l'appel vers celui qui a tent̮̩ le blind transfert...Second, I have changed the vm and exten-vm macros as follows
[macro-exten-vm] exten => s,1,Macro(user-callerid) exten => s,2,Set(FROMCONTEXT=exten-vm) exten => s,3,Macro(record-enable,${ARG2},IN) exten => s,4,Macro(dial,${RINGTIMER},${DIAL_OPTIONS},${ARG2}) exten => s,5,GotoIf($["${CHANNEL:0:5}" = "Local"]?s-${DIALSTATUS},1) ; if the channel is Local, then do not go to voicemail. This is primarily to avoid vm for call-forwarded extensions in ring groups exten => s,6,GotoIf($["${ARG1}" = "novm"]?s-${DIALSTATUS},1) ; no voicemail in use for this extension exten => s,7,NoOp(Sending to Voicemail box ${ARG2}) exten => s,8,Macro(vm,${ARG1},${DIALSTATUS}) ;BEFORE ;exten => s-BUSY,1,NoOp(Extension is reporting BUSY and has no Voicemail) ;exten => s-BUSY,2,Busy() ;exten => s-BUSY,3,Wait(60) ;exten => s-BUSY,4,NoOp() ;AFTER exten => s-BUSY,1,GotoIf($${LEN(${BLINDTRANSFER})} > 0?100) ;//Si on ̮̩tait issu d'un blind transfer, on jumpe en 100 exten => s-BUSY,2,NoOp(Extension is reporting BUSY and has no Voicemail) exten => s-BUSY,3,Busy() exten => s-BUSY,4,Wait(60) exten => s-BUSY,5,NoOp() exten => _s-.,1,Congestion() exten => s-BUSY,100,Macro(comeback-blind-transfer);//On renvoie l'appel ÃÆÃ celui qui a effectu̮̩ le blind transfert ;BEFORE ;[macro-vm] ;exten => s,1,Macro(user-callerid) ;exten => s,2,Goto(s-${ARG2},1) ;exten => s-BUSY,1,Macro(get-vmcontext,${ARG1}) ;exten => s-BUSY,2,Voicemail(b${ARG1}@${VMCONTEXT}) ; Voicemail Busy message ;exten => s-BUSY,3,Hangup() ;exten => _s-.,1,Macro(get-vmcontext,${ARG1}) ;exten => _s-.,2,Voicemail(u${ARG1}@${VMCONTEXT}) ; Voicemail Unavailable message ;exten => _s-.,3,Hangup() ;exten => o,1,Background(one-moment-please) ; si appui sur 0 pendant message boite vocale on arrive ici ;exten => o,2,GotoIf($["foo${FROM_DID}" = "foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1);on renvoie l'appel sur le standard ;exten => a,1,Macro(get-vmcontext,${ARG1}) ;exten => a,2,VoiceMailMain(${ARG1}@${VMCONTEXT}) ;exten => a,3,Hangup ;AFTER [macro-vm] exten => s,1,Macro(user-callerid) exten => s,2,Goto(s-${ARG2},1) exten => s-BUSY,1,GotoIf($${LEN(${BLINDTRANSFER})} > 0?100) ;//Si on ̮̩tait issu d'un blind transfer, on jumpe en 100 exten => s-BUSY,2,Macro(get-vmcontext,${ARG1}) exten => s-BUSY,3,Voicemail(b${ARG1}@${VMCONTEXT}) ; Voicemail Busy message exten => s-BUSY,4,Hangup() exten => s-BUSY,100,Macro(comeback-blind-transfer);//On renvoie l'appel ÃÆÃ celui qui a effectu̮̩ le blind transfert exten => _s-.,1,GotoIf($${LEN(${BLINDTRANSFER})} > 0?100) ;//Si on ̮̩tait issu d'un blind transfer, on jumpe en 100 exten => _s-.,2,Macro(get-vmcontext,${ARG1}) exten => _s-.,3,Voicemail(u${ARG1}@${VMCONTEXT}) ; Voicemail Unavailable message exten => _s-.,4,Hangup() exten => _s-.,100,Macro(comeback-blind-transfer);//On renvoie l'appel ÃÆÃ celui qui a effectu̮̩ le blind transfert exten => o,1,Background(one-moment-please) ; si appui sur 0 pendant message boite vocale on arrive ici exten => o,2,GotoIf($["foo${FROM_DID}" = "foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1);on renvoie l'appel sur le standard exten => a,1,Macro(get-vmcontext,${ARG1}) exten => a,2,VoiceMailMain(${ARG1}@${VMCONTEXT}) exten => a,3,HangupThats all!.
How does it works ?
When occurs a blind transfer, if the target is unreachable (busy, no response...) the call is back-forwarded to the "transferer", no matter if the target as a voicemail or not.
A further direct tranfer to the target's voice mail always being possible...
[SOLVED] Blind transfer
After some corrections, here is the working code.
If someone as a better idea, it is welcome.
; Ring an extension, if the extension is busy or there is no answer send it ; to voicemail ; ARGS: $VMBOX, $EXT [macro-exten-vm] exten => s,1,Macro(user-callerid) exten => s,2,Set(FROMCONTEXT=exten-vm) exten => s,3,Macro(record-enable,${ARG2},IN) exten => s,4,Macro(dial,${RINGTIMER},${DIAL_OPTIONS},${ARG2});<-------------NUMEROTATION PAR MACRO DIAL CI-DESSUS exten => s,5,GotoIf($["${CHANNEL:0:5}" = "Local"]?s-${DIALSTATUS},1) ; if the channel is Local, then do not go to voicemail. This is primarily to avoid vm for call-forwarded extensions in ring groups exten => s,6,GotoIf($["${ARG1}" = "novm"]?s-${DIALSTATUS},1) ; no voicemail in use for this extension exten => s,7,NoOp(Sending to Voicemail box ${ARG2}) exten => s,8,Macro(vm,${ARG1},${DIALSTATUS}) ;BEFORE ;exten => s-BUSY,1,NoOp(Extension is reporting BUSY and has no Voicemail)****STOP OCCUPE ET PAS DE BOITE****** ;exten => s-BUSY,2,Busy() ;exten => s-BUSY,3,Wait(60) ;exten => s-BUSY,4,NoOp() ;AFTER exten => s-BUSY,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?100) ;//Si on ̮̩tait issu d'un blind transfer, on jumpe en 100 exten => s-BUSY,2,NoOp(Extension is reporting BUSY and has no Voicemail)****STOP OCCUPE ET PAS DE BOITE****** exten => s-BUSY,3,Busy() exten => s-BUSY,4,Wait(60) exten => s-BUSY,5,NoOp() exten => s-BUSY,100,Macro(comeback-blind-transfer);//On renvoie l'appel ÃÆÃ celui qui a effectu̮̩ le blind transfert exten => _s-.,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?100) exten => _s-.,2,Congestion() exten => _s-.,100,Macro(comeback-blind-transfer) ;BEFORE ;[macro-vm] ;exten => s,1,Macro(user-callerid) ;exten => s,2,Goto(s-${ARG2},1) ;exten => s-BUSY,1,Macro(get-vmcontext,${ARG1}) ;exten => s-BUSY,2,Voicemail(b${ARG1}@${VMCONTEXT}) ; Voicemail Busy message ********STOP D̮̩clenchement boite vocale car occup̮̩ ;exten => s-BUSY,3,Hangup() ;exten => _s-.,1,Macro(get-vmcontext,${ARG1}) ;exten => _s-.,2,Voicemail(u${ARG1}@${VMCONTEXT}) ; Voicemail Unavailable message ******STOP D̮̩clenchement boite vocale injoignable ;exten => _s-.,3,Hangup() ;exten => o,1,Background(one-moment-please) ; si appui sur 0 pendant message boite vocale on arrive ici ;exten => o,2,GotoIf($["foo${FROM_DID}" = "foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1);on renvoie l'appel sur le standard ;exten => a,1,Macro(get-vmcontext,${ARG1}) ;exten => a,2,VoiceMailMain(${ARG1}@${VMCONTEXT}) ;exten => a,3,Hangup ;AFTER [macro-vm] exten => s,1,NoOp(D̮̩but Macro vm : DialedPeerNb=${DIALEDPEERNUMBER}) exten => s,2,Macro(user-callerid) exten => s,3,Goto(s-${ARG2},1) exten => s-BUSY,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?100) ;//Si on ̮̩tait issu d'un blind transfer, on jumpe en 100 exten => s-BUSY,2,Macro(get-vmcontext,${ARG1}) exten => s-BUSY,3,Voicemail(b${ARG1}@${VMCONTEXT}) ; Voicemail Busy message ********STOP D̮̩clenchement boite vocale car occup̮̩ exten => s-BUSY,4,Hangup() exten => s-BUSY,100,Macro(comeback-blind-transfer);//On renvoie l'appel ÃÆÃ celui qui a effectu̮̩ le blind transfert exten => _s-.,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?100) ;//Si on ̮̩tait issu d'un blind transfer, on jumpe en 100 exten => _s-.,2,Macro(get-vmcontext,${ARG1}) exten => _s-.,3,Voicemail(u${ARG1}@${VMCONTEXT}) ; Voicemail Unavailable message ******STOP D̮̩clenchement boite vocale injoignable exten => _s-.,4,Hangup() exten => _s-.,100,Macro(comeback-blind-transfer);//On renvoie l'appel ÃÆÃ celui qui a effectu̮̩ le blind transfert exten => o,1,Background(one-moment-please) ; si appui sur 0 pendant message boite vocale on arrive ici exten => o,2,GotoIf($["foo${FROM_DID}" = "foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1);on renvoie l'appel sur le standard exten => a,1,Macro(get-vmcontext,${ARG1}) exten => a,2,VoiceMailMain(${ARG1}@${VMCONTEXT}) exten => a,3,Hangup ;make a blind transfer come back if the target is unreachable [macro-comeback-blind-transfer] exten => s,1,NoOp(Entr̮̩e call-back-blind. BlindTransfer=${BLINDTRANSFER}.Longueur=${LEN(${BLINDTRANSFER})}) exten => s,2,Cut(RETOUR=BLINDTRANSFER,/,2);On extrait dans RETOUR L'extension d̮̩barrass̮̩e de "SIP/" exten => s,3,Cut(RETOUR=RETOUR,-,1);On extrait dans RETOUR l'extension d̮̩barrass̮̩e de l'ID de channel exten => s,4,NoOp(Le num̮̩ro de callback extrait est :${RETOUR}) exten => s,5,SetVar(BLINDTRANSFER=);On r̮̩initialise BLINDTRANSFER car asterisk ne le fait pas seul exten => s,6,Ringing();//On fournit une sonnerie ÃÆÃ l'oreille de celui qui est en train d'attendre qu'on le ballade... exten => s,7,Wait(10);//Attente pour permettre le raccocḫ̩ de celui qui a transf̮̩r̮̩ sur les postes analogiques exten => s,8,Goto(ext-local,${RETOUR},1);//On renvoie l'appel vers celui qui a tent̮̩ le blind transfert...