Simular extension mobility con asterisk

asterisk linux Varios

Esta entrada es otro apunte.
Hace poco, uno de los clientes donde tengo un asterisk, tienen varios empleados que hacen teletrabajo y, querí­an llevarse la extensión a casa….. sabemos de sobras que asterisk no soporta parallel forking y, habí­a que buscar la manera de hacerlo mediante dialPlan.
El tema consiste en:
1º) El usuario tiene un softphone configurado en su pc y se conecta por VPN
2º) El Usuario, tiene su extensón, por ejemplo 240 y en casa quiere tener la misma.
3º) El usuario, cuando está en casa querrá que el cliente vea que está en la oficina 😉
De esta manera, la operadora de la centralita, tan sólo tiene que preocuparse de pasarle la llamada a su extensión habitual, al igual que sus compañeros.
Sabiendo de antemano que no podemos tener 2 extensiones iguales registradas, vamos a hacer «el apaño» con el dialPlan; en este caso, a las extensiones remotas les añadiremos un 3 delante.
Show me the code 😉
En el sip.conf, definimos las extensiones:

[240](extension)
username=240
callerid="INFORMATICA" <240>
secret=xxxxxx
mailbox=200
[3240](extension)
username=3240
callerid="INFORMATICA" <240>
secret=xxxxxx
mailbox=200

Tenemos la 240 que es la del teléfono y la 3240 que es la remota.
Ahora, una función para habilitar el extension Mobility falso ;-). Editamos el extensions.conf y con la 342 habilitamos y con el 343 deshabilitamos:

exten => 342,1,NoOP(...: desvio extensiones remotas activado :...)
exten => 342,n,Playback(call-fwd-unconditional&enabled)
exten => 342,n,Set(DB(${CALLERID(num)}/remoto)=1)
exten => 342,n,Hangup
exten => 343,1,NoOP(...: desvio extensiones remotas desactivado :...)
exten => 343,n,Playback(call-fwd-unconditional&disabled)
exten => 343,n,Set(DB(${CALLERID(num)}/remoto)=0)
exten => 343,n,Hangup

Guardamos en la ASTDB una clave / valor tal que: 240 / 1 o 240/0 (1 habilitado y 0 deshabilitado)
Y ahora la magia del dialplan, en el extensions.conf:

exten => _2XX,1,NoOp(Llamada entre extensiones)
exten => _2XX,n,NoOP(comprobamos que tiene el desvio a extension de casa)
exten => _2XX,n,Set(remoto_activo=0) // inicializamos variable y la ponemos a 0
exten => _2XX,n,Set(remoto_activo=${DB(${EXTEN}/remoto)}) // preguntamos y seteamos variable
exten => _2XX,n,NoOP(${remoto_activo}) // lo printamos en pantalla para debug
exten => _2XX,n,GotoIf($["${remoto_activo}" = "1"]?desvio) // si activo, pasamos a (desvio)
exten => _2XX,n,NoOP(llamando de la ${CALLERID(num)} a la:${EXTEN})
exten => _2XX,n,Dial(SIP/${EXTEN},60,tTwWm) // llamamos normal
exten => _2XX,n(desvio),Dial(SIP/3${EXTEN},60,tTwWm) // añadimos el 3 delante
exten => _2XX,n,Hangup()

Guardamos, hacemos un reload y listo.
Sé que no es una manera elegante, pero vemos que con un poquito de BBDD y programación de dialPlan, la posibilidades son casi infinitas.
Enjoy your mobility 😉

5 comentarios en «Simular extension mobility con asterisk»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *