Wie man über Hints Extensions mit dem Status von SIP-Benutzern verknüpfen kann, haben Sie schon gelernt. Zur Erinnerung:
Tabelle 23.6. Hints für SIP-Benutzer
extensions.conf | extensions.ael |
---|---|
exten => 21,hint,SIP/21 | hint(SIP/21) 21 => {} |
Seit Asterisk 1.6 kann man über Hints aber Extensions auch mit dem
Status von MeetMe
-Konferenzräumen verbinden:
Der Hint im Beispiel oben schafft die Verknüpfung zwischen der
Extension 881
mit dem Status des
MeetMe
-Konferenzraums 885
. Die Nummern
sind hier mit Absicht unterschiedlich gewählt; in Wirklichkeit werden sie
häufig gleich sein. Man könnte jetzt am Telefon eine Taste mit der
Nebenstelle 881
belegen. Dann würde die LED den Status des
Konferenzraums anzeigen.
Das aber nur als kleiner Exkurs, da es gerade thematisch passt. Noch interessanter ist, dass man ab Asterisk 1.6 über Hints Extensions auch mit eigenen, „virtuellen Geräten“ assoziieren kann. Die Schreibweise ist fast genauso:
Tabelle 23.8. Hints für virtuelle Geräte
extensions.conf | extensions.ael |
---|---|
exten => 99,hint,Custom:mein-status | hint(Custom:mein-status) 99 => {} |
Den Status dieser „Custom
Devices“ kann man ganz frei mit der Funktion
DEVICE_STATE()
[136] von einer beliebigen anderen Stelle im Dialplan aus
festlegen.
Set(DEVICE_STATE(Custom:mein-status)=INUSE);
An ein Telefon, das den Status der Extension abonniert hat, wird dann die jeweilige Benachrichtigung geschickt. Die möglichen Werte und die übliche Anzeige am Telefon sind:
Tabelle 23.9. Device States
Wert | Bedeutung | LED[a] |
---|---|---|
UNKNOWN | unbekannt, nicht angemeldet | aus |
UNAVAILABLE | nicht erreichbar | aus |
NOT_INUSE | frei | aus |
INUSE | im Gespräch | leuchtet dauerhaft |
BUSY | im Gespräch bzw. besetzt | leuchtet dauerhaft |
RINGING | klingelt | blinkt |
RINGINUSE | im Gespräch und klingelt (anklopfen) | blinkt |
ONHOLD | auf „halten“ | blinkt langsam |
INVALID | ungültig | aus |
[a] Die Anzeige hängt vom jeweiligen Endgerät ab. |
Nach einem Restart von Asterisk, wenn der Status eines
Custom
-Devices noch
nicht gesetzt wurde, hat das Device initial den
Status UNKNOWN
.
Nachdem ein Telefon über die obige beispielhafte Extension
99
den Status von Custom:mein-status
abonniert
hat, kann man, um die Funktionsweise zu testen, den Wählplan z. B. um
folgenden Code erweitern:
hint(Custom:mein-status) 99 => {} *91 => { Set(DEVICE_STATE(Custom:mein-status)=RINGING); } *92 => { Set(DEVICE_STATE(Custom:mein-status)=INUSE); } *93 => { Set(DEVICE_STATE(Custom:mein-status)=NOT_INUSE); } *94 => { if ("${DEVICE_STATE(Custom:mein-status)}" = "INUSE") { Set(DEVICE_STATE(Custom:mein-status)=NOT_INUSE); } else { Set(DEVICE_STATE(Custom:mein-status)=INUSE); } }
Nun können die verschiedenen Device-States getestet werden, z. B.
kann man die LED mit *91
blinken oder mit *92
dauerhaft leuchten lassen sowie mit *93
wieder deaktivieren
oder mit *94
abwechselnd an- und ausschalten. Ist die
Funktionsweise einmal sichergestellt, sind der sinnvollen (oder
unsinnigen) Anwendung dieses Features keine Grenzen mehr gesetzt; man
könnte damit z. B. anzeigen, ob man gerade als Mitglied in eine Queue
eingeloggt ist oder ob der Rasensprenger gerade läuft.
Natürlich taucht der Hint auch in der Ausgabe von
core show hints
zusammen mit den
anderen Hints auf:
*CLI> core show hints
-= Registered Asterisk Dial Plan Hints =-
99@test : Custom:mein-status State:InUse Watchers 0
21@interne-benutzer : SIP/21 State:Unavailable Watchers 0
22@interne-benutzer : SIP/22 State:Unavailable Watchers 0
----------------
- 1 hints registered
Hilfreich ist auch der CLI-Befehl devstate
list
, mit dem man den Status aller gesetzten
Custom
-Hints ausgeben kann:
*CLI> devstate list
---------------------------------------------------------------------
--- Custom Device States --------------------------------------------
---------------------------------------------------------------------
---
--- Name: 'Custom:mein-status' State: 'INUSE'
---
---------------------------------------------------------------------
---------------------------------------------------------------------
Mit devstate change
device
state
lässt sich der Status vom CLI
aus setzen:
*CLI> devstate change Custom:mein-status RINGING Changing mein-status to RINGING *CLI> devstate list --------------------------------------------------------------------- --- Custom Device States ------------------------------------------- --------------------------------------------------------------------- --- --- Name: 'Custom:mein-status' State: 'RINGING' --- --------------------------------------------------------------------- ---------------------------------------------------------------------
[136] Die Funktion hieß zeitweilig DEVSTATE()
. Damit ist
ebenfalls DEVICE_STATE()
gemeint. Sie darf allerdings
nicht verwechselt werden mit der Applikation DevState()
oder anderen Funktionen oder Applikationen ähnlichen Namens, die in
den diversen Internet-Foren usw. herumgeistern, auch wenn sie ungefähr
das Gleiche bewirken.
AMOOCON 2010
Noch kein Ticket? Dann wird es Zeit. Nur noch wenige Tage.
- Infos unter www.amoocon.de.
- twitter.com/AMOOCON