Función para conocer el estado de las extensiones.
Se ha backporteado de la versión 1.6 de asterisk. En función de si usamos una versión u otra de asterisk debemos usar:
asterisk 1.6: DEVICE_STATE(device) asterisk 1.4: DEVSTATE(device)
Modificamos los archivos de configuración de asterisk para que muestren el estado de las extensiones:
[root@asterisk-es-rsp ~]# vim /etc/asterisk/sip.conf
notifyringing=yes notifyhold=yes limitonpeers=yes call-limit=100 ; Si se usa realtime rtcachefriends=yes rtupdate=yes
Conocer el estado de una extensión:
NoOp(SIP/mypeer has state ${DEVSTATE(SIP/mypeer)})
NoOp(Conference number 1234 has state ${DEVSTATE(MeetMe:1234)})
La función DEVSTATE ser puede utilizar para aplicar un estado personalizable a un terminal
directamente desdel dialplan. Para ello se utiliza el prefijo “Custom:” . Por ejemplo:
Set(DEVSTATE(Custom:lamp1)=BUSY) Set(DEVSTATE(Custom:lamp2)=NOT_INUSE)
Para ver el estado personalizado añadimos la extensión “hint” en nuestro dialplan:
[root@asterisk-es-rsp ~]# vim /etc/asterisk/extensions.conf exten => 1234,hint,Custom:lamp1
La función DEVSTATE puede usarse para limitar el número de llamadas a un terminal,
así evitamos el uso del call-limit que será eliminado en versiones posteriores de asterisk.
Para evitar llamar a una extensión si esta está en uso:
[root@asterisk-es-rsp ~]# vim /etc/asterisk/extensions.conf exten => 100,1,GotoIf($[${DEVSTATE(SIP/${EXTEN})} = "INUSE"]?Busy) exten => 100,n,Dial(SIP/${EXTEN}) exten => 100,n(Busy),Hangup
Los valores posibles que devuleve la función son:
UNKNOWN | NOT_INUSE | INUSE | BUSY | INVALID | UNAVAILABLE | RINGING | RINGINUSE | ONHOLD
Make sure you know what will happen after an Asterisk restart! It might be necessary to use a .call file (or the Asterisk manager API) to call the DevState application right after Asterisk has started to ensure correct LED status. Note that, before doing so, you might also have to reboot or initialize the phones in question so that they can renew their SIP subscription of the extension that is used to monitor the devicestate; for example SIP NOTIFY could be used for that purpose (see sip_notify.conf).