Rechteverwaltung mit Contexten
Bis jetzt durften alle Telefone immer alle Extensions in der
extensions.conf aufrufen. Für eine kleine interne Anlage ist das
ausreichend — sobald aber mehrere Gruppen von Telefonen unterschiedliche
Rechte haben sollen (z. B. "nur intern", "auch Festnetz", "nur Notruf"),
brauchen wir eine Rechteverwaltung. Asterisk realisiert das über
Contexte.
Das Prinzip: Jedem Endpoint wird in pjsip.conf ein Context zugewiesen.
Anrufe, die von diesem Endpoint kommen, landen im gleichnamigen Block
der extensions.conf. Nur die dort definierten Extensions (plus die
per include ⇒ eingebundenen) stehen ihm zur Verfügung.
Quelle: Jedes Telefon ist in einem Context
Bis jetzt haben wir für unsere Endpoints keinen Context definiert — wir
haben einfach context=default gesetzt. Soll ein Telefon in einem
anderen Context landen, wird das im Endpoint-Block angepasst.
Beispiel mit einem Context
In der Firma abc gibt es die SIP-Telefone 10 und 11. Beide sollen im
Context [intern] arbeiten. Die pjsip.conf sieht dann (auszugsweise,
nur die Endpoints) so aus:
[10]
type=endpoint
context=intern ; <-- Context
disallow=all
allow=ulaw
allow=alaw
auth=10
aors=10
[11]
type=endpoint
context=intern ; <-- Context
disallow=all
allow=ulaw
allow=alaw
auth=11
aors=11
Die zugehörigen auth- und aor-Blöcke bleiben gleich.
|
Wer mehrere Endpoints mit identischen Einstellungen pflegen möchte (gleicher Context, gleiche Codec-Liste, gleiche Optionen), benutzt PJSIP-Templates. Siehe Konfigurations-Templates. |
Beispiel mit mehreren Telefonen
In der Firma abc gibt es die Telefone 10, 11, 12 und 20. Die
Nebenstellen 10 bis 12 sind Mitarbeitertelefone im Context [abc],
Nebenstelle 20 ein Gästetelefon im Context [gast]:
[10]
type=endpoint
context=abc
; ...
[11]
type=endpoint
context=abc
; ...
[12]
type=endpoint
context=abc
; ...
[20]
type=endpoint
context=gast
; ...
Ziel: Contexte in der extensions.conf
Die extensions.conf wird in verschiedene Abschnitte (Contexte)
aufgeteilt. Jeder Context wird durch den Context-Namen in eckigen
Klammern eingeleitet.
Ein Beispiel mit den drei Contexten default, abc und gast:
[default]
exten => 1001,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
[abc]
exten => 2000,1,Dial(PJSIP/2000,20)
same => n,VoiceMail(2000@default,u)
exten => 2001,1,Dial(PJSIP/2001,20)
same => n,VoiceMail(2001@default,u)
exten => 2999,1,VoiceMailMain(${CALLERID(num)}@default,s)
[gast]
; Das Gästetelefon darf nur zur Rezeption und zum Hello-World
exten => 0,1,Dial(PJSIP/2000,20)
exten => 1001,1,Goto(default,1001,1)
Fehlt bei einem Endpoint in pjsip.conf der Context-Eintrag, nimmt
PJSIP den Default-Context default. Auf diesen Default sollte man sich
nicht verlassen — setzen Sie context= immer explizit, das erspart
Überraschungen.