Ansteuerung der LEDs

Damit eine BLF-Taste am Telefon den Zustand einer Nebenstelle anzeigen kann, müssen zwei Dinge zusammenkommen: Der Endpoint in pjsip.conf muss SUBSCRIBEs annehmen dürfen, und Asterisk muss wissen, welche Extension welchen Zustand anzeigt (Hint).

pjsip.conf

Am überwachenden Endpoint (dem Telefon, das die BLF-Taste hat) werden die folgenden Optionen benötigt:

[21]
type=endpoint
context=interne-benutzer
disallow=all
allow=ulaw
allow=alaw
auth=21
aors=21
mailboxes=21@default          ; MWI (nur wenn Voicemail genutzt wird)
allow_subscribe=yes           ; Telefon darf SUBSCRIBE senden
sub_min_expiry=30
notify_early_inuse_ringing=yes
device_state_busy_at=1        ; ab wie vielen Gesprächen gilt der Endpoint als "busy"
call_group=2                  ; für Pickup (siehe unten)
pickup_group=2

device_state_busy_at=1 lässt Asterisk das Telefon als busy melden, sobald es im Gespräch ist. Wer Transfers oder Zweitgespräche zulassen möchte, setzt einen höheren Wert.

call_group und pickup_group sind nur relevant, wenn Sie auch Anrufe heranholen wollen (siehe Heranholen eines Anrufs). Ein Endpoint mit pickup_group=2 darf Anrufe von Endpoints mit call_group=2 übernehmen. Asterisk kennt die Gruppen 0 bis 63.

Hints

Ein Hint ist ein spezieller Dialplan-Eintrag mit der "Priorität" hint. Er verknüpft eine Extension mit dem Gerätestatus eines konkreten Channels — zum Beispiel PJSIP/21. Wenn sich der Status dieses Channels ändert (klingelt, im Gespräch, frei), verschickt Asterisk ein SIP NOTIFY an alle Telefone, die den Hint abonniert haben.

Wichtig: Die Hints müssen in dem Context stehen, den der überwachende Endpoint in pjsip.conf als context= gesetzt hat. Sonst lehnt Asterisk die SUBSCRIBE-Anfrage ab. Das ist Absicht und lässt sich für eine einfache Berechtigungssteuerung nutzen: Wer nichts sehen soll, bekommt einen eigenen Context ohne Hints.

Hint pro Nebenstelle

[interne-benutzer]
exten => 21,hint,PJSIP/21
exten => 21,1,Dial(PJSIP/${EXTEN},40)
 same => n,VoiceMail(${EXTEN},u)

exten => 22,hint,PJSIP/22
exten => 22,1,Dial(PJSIP/${EXTEN},40)
 same => n,VoiceMail(${EXTEN},u)

Hints per Pattern

Ab Asterisk 1.6 funktionieren Hints auch mit Pattern, und das ist heute der übliche Weg:

[interne-benutzer]
exten => _2X,hint,PJSIP/${EXTEN}
exten => _2X,1,Dial(PJSIP/${EXTEN},40)
 same => n,VoiceMail(${EXTEN},u)

Während der Interpretation eines Hints besteht noch kein Channel. Bis auf ${EXTEN} stehen deshalb in der hint-Zeile keine Channel-Variablen zur Verfügung.

Gruppen-Hint

Ein Hint kann auch mehrere Geräte gemeinsam überwachen — mit & getrennt. Das ist typisch für Sammelrufe:

[interne-benutzer]
exten => 20,hint,PJSIP/21&PJSIP/22
exten => 20,1,Dial(PJSIP/21&PJSIP/22,40)
 same => n,VoiceMail(21,u)

Die LED zeigt den gemeinsamen Zustand an: klingelt, wenn irgendein beteiligtes Telefon klingelt; frei, wenn alle frei sind.

Bei vielen Contexten kann es sinnvoll sein, alle Hints in einen eigenen Context [hints] zu legen und diesen per include ⇒ hints dort einzubinden, wo man sie braucht. Das hält die Haupt-Contexte übersichtlich.

Nach Änderungen laden Sie den Dialplan neu:

# asterisk -rx "dialplan reload"