En el archivo/etc/asterisk/extensions.conf agregamos las siguientes líneas
[local-sip] include => training exten => _4XXX,1,Macro(internos) exten => _40XX,2,Playback(hello-world) exten => _40XX,3,Hangup() [macro-internos] exten => s,1,Answer() exten => s,n,Wait(1) exten => s,n,Set(ID=${CALLERID(num)}) exten => s,n,Dial(SIP/${MACRO_EXTEN},30,tTwmkKxX) exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u) exten => s,n,Hangup() exten => s,n(busy),Playback(rellamada) exten => s,n,Read(callbusy,,1,,1,5) exten => s,n,GotoIf($["${callbusy}" = "6"]?callfile) exten => s,n,VoiceMail(${MACRO_EXTEN}@default,b) exten => s,n,Hangup() exten => s,n(callfile),System(echo Channel:SIP/${MACRO_EXTEN} >> /tmp/callback${MACRO_EXTEN}) exten => s,n,System(echo Callerid:CallBack "<VozToVoice>" >> /tmp/callback${MACRO_EXTEN}) exten => s,n,System(echo WaitTime:30 >> /tmp/callback${MACRO_EXTEN}) exten => s,n,System(echo Maxretries:10 >> /tmp/callback${MACRO_EXTEN}) exten => s,n,System(echo RetryTime:30 >> /tmp/callback${MACRO_EXTEN}) exten => s,n,System(echo Account: ${ID}>> /tmp/callback${MACRO_EXTEN}) exten => s,n,System(echo Application:Dial >> /tmp/callback${MACRO_EXTEN}) exten => s,n,System(echo Data: SIP/${ID} >> /tmp/callback${MACRO_EXTEN}) exten => s,n,Wait(1) exten => s,n,System(mv /tmp/callback${MACRO_EXTEN} /var/spool/asterisk/outgoing) exten => s,n,Hangup() exten => h,1,Hangup
NOTA: Debemos grabar el archive wav rellamada.wav y colocarlos en el directorio /var/lib/asterisk/sounds/es.
Definimos nuestro dialplan en [local-sip], cuando llamamos a un interno la línea exten => _4XXX,1,Macro(internos) salta a [macro-internos], esta macro si el interno esta ocupado nos da la opción de activar la rellamada si marcamos el numero 6.
Explicación de la macro [macro-internos]
exten => s,1,Answer() ; asterisk contesta el canal
exten => s,n,Wait(1) ; espera un segundo
exten => s,n,Set(ID=${CALLERID(num)}); asigna a la variable ID el número de la extensión del llamante
exten => s,n,Dial(SIP/${MACRO_EXTEN},30,tTwmkKxX) ; llama la extensión
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) ; si la extensión está ocupada va a la prioridad con etiqueta busy, si no está disponible a la prioridad con la etiqueta unavail
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u) ; envía la llamada al contestador automático anunciando que la extensión no se encuentra disponible
exten => s,n,Hangup() ; cuelga la llamada
exten => s,n(busy),Playback(rellamada) ; en el caso que la extensión llamada esté ocupada anunciaremos que presionando la tecla 6 del teléfono podremos ser rellamados cuando la extensión se encuentre libre. Podemos hacer esto con Cepstral, Festival o creando un archivo audio que luego copiamos en la carpeta /var/lib/asterisk/sounds/es. En este ejemplo se está usando el archivo grabado
exten => s,n,Read(callbusy,,1,,1,5) ; la variable Read espera que el llamante presione una tecla
exten => s,n,GotoIf($["${callbusy}" = "6"]?callfile) ; si la tecla presionada es el 6 se seguirá procesando la llamada en la prioridad con etiqueta callfile. De lo contrario se seguirá enviando la llamada al contestador automático anunciando que la extensión se encuentra ocupada.
exten => s,n,VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
exten => s,n(callfile),System(echo Channel:SIP/${MACRO_EXTEN} >> /tmp/callback${MACRO_EXTEN}) ; Aquí empieza la creación del call file. Asterisk llamará la extension ocupada
exten => s,n,System(echo Callerid:CallBack "<VozToVoice>" >> /tmp/callback${MACRO_EXTEN}) ; definimos el identificativo de la llamada
exten => s,n,System(echo WaitTime:30 >> /tmp/callback${MACRO_EXTEN}) ; Espera 30 segundos para que conteste
exten => s,n,System(echo Maxretries:10 >> /tmp/callback${MACRO_EXTEN}) ; número máximo de intentos (10)
exten => s,n,System(echo RetryTime:30 >> /tmp/callback${MACRO_EXTEN}) ; tiempo (en segundos) entre un intento y otro
exten => s,n,System(echo Account: ${ID}>> /tmp/callback${MACRO_EXTEN}) ; número de cuenta para el registro de las llamadas
exten => s,n,System(echo Application:Dial >> /tmp/callback${MACRO_EXTEN}) ; aplicación que se usará (dial)
exten => s,n,System(echo Data: SIP/${ID} >> /tmp/callback${MACRO_EXTEN}) ; número del llamante que asterisk conectará con la extensión ocupada una vez que esté libre.
exten => s,n,Wait(1) ; espera un segundo
exten => s,n,System(mv /tmp/callback${MACRO_EXTEN} /var/spool/asterisk/outgoing) ; mueve el archivo creado en la carpeta usada por asterisk para procesar los Call Files
exten => s,n,Hangup() ; cuelga la llamada
exten => h,1,Hangup ; cuelga la llamada si el llamante cuelga estando en cualquier línea de la macro
Diagrama de funcionamiento de rellamada
Cómo funciona el desvío de llamada.
1- En este ejemplo vemos una llamada ya establecida entre el interno 2001 y el interno 2002, cuando el interno 2003 intenta llamar al 2002 le da ocupado y un mensaje anuncia que se puede dejar la rellamada presionando la tecla 6. Una vez que finaliza la comunicación entre el interno 2001 y 2002, si se activo la rellamada suena el interno 2002 indicando que hay una rellamada del 2003, si es acepada entonces suena el 2003 y se establece la comunicación.
Hola, A alguien le funciono esta opcion?. Ya que logro hacer que me reproduzca el archivo del anuncio, oprimo el Nro. 6 y cuelgo y cuando la extension a la que quiero llamar se desocupa no realiza la rellamada. Desde ya muchas gracias.
ResponderEliminar