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 😉
es para sacarse el sombrero cómo lo hiciste…
Gracias !!!!! Grandes problemas, pequeñas soluciones …
es para sacarse el sombrero cómo lo hiciste…
Hola,
Otra posibilidad es utilizar FollowMe
http://www.voip-info.org/wiki/view/Asterisk+cmd+FollowMe
Saludos.
Si, cierto, pero no me parecÃa tan elegante después de haber usado el extension mobility de cisco