Zuerst sind bestimmte Einstellungen im Abschnitt
[general]
der sip.conf
erforderlich:
[general] allowsubscribe = yes notifyringing = yes notifyhold = yes limitonpeers = yes
Auch in den Abschnitten der einzelnen SIP-Benutzer sind
Einstellungen hinzuzufügen, nämlich subscribecontext
und
call-limit
. subscribecontext
besagt, in
welchem Context Asterisk suchen soll, wenn dieser Benutzer den Status
anderer Benutzer "abonnieren" will. In der Regel ist das der Context, in
dem sich auch die internen Benutzer befinden. call-limit
hat eigentlich eine andere Aufgabe, nämlich die Anzahl der
gleichzeitigen Gespräche dieses Benutzers zu beschränken (wenn es auf
einen Wert > 0 gesetzt wird). Es dient hier aber auch dazu, dass
Asterisk überhaupt die Anzahl der gleichzeitigen Gespräche dieses
Benutzers mitzählt, was für den Status (frei/besetzt) wichtig ist. Es
muss also auf einen beliebigen Wert > 0 gesetzt werden, am besten
mindestens auf 2, sonst hat man Probleme bei Transfers.
Zudem sind (für das spätere Heranholen von Gesprächen) noch die
zwei Parameter callgroup
[119] und pickupgroup
[120] von Bedeutung. Zum Beispiel darf ein Benutzer mit
pickupgroup=2
Gespräche von anderen Benutzern mit
callgroup=2
heranholen. Dies dient also der
Rechteverwaltung. Da es allerdings nur 64 mögliche Gruppen gibt (0 bis
63), ist diese Methode nur für kleine bis mittelgroße Installationen
brauchbar. Bei großen Installationen setzt man für alle User die gleiche
Gruppe und muss sich dann um die Rechteverwaltung selber kümmern (dazu
später noch ein Hinweis).
[21] type = friend context = interne-benutzer secret = 9847825134 host = dynamic mailbox = 2000 subscribecontext = interne-benutzer call-limit = 10 callgroup = 2 pickupgroup = 2
Als Nächstes muss man Asterisk die Zuordnung zwischen Extensions
und Benutzern (oder Geräten) mitteilen. Dies macht man im Dialplan mit
sogenannten „Hints“. Wenn man in
Dialplan-Prioritäten denkt, dann ist ein hint
eine
spezielle Priorität, die noch vor der Priorität 1
steht.
Wichtig ist, dass sich die Hints in dem Context befinden, den man in der
sip.conf
(s. o.) mit subscribecontext
angegeben hat, ansonsten werden die Status-Informationen nicht
weitergeleitet. Das ist durchaus Absicht, damit man nicht per se von
allen Telefonen aus alle weiteren überwachen kann. Durch
unterschiedliche Contexte lässt sich also auch eine Art
Berechtigungssystem bauen.[121] Wir beschreiben hier anhand von Beispielen, wie ein Hint
definiert wird. Je nachdem, ob Ihr Dialplan im
extensions.conf
-Format oder in AEL geschrieben ist,
verwenden Sie die eine oder die andere Variante.
Tabelle 23.1. Hints – Einfaches Beispiel
extensions.conf | extensions.ael |
---|---|
[interne-benutzer] exten => 21,hint,SIP/21 exten => 21,1,Dial(SIP/${EXTEN},40) exten => 21,n,VoiceMail(${EXTEN},u) exten => 22,hint,SIP/22 exten => 22,1,Dial(SIP/${EXTEN},40) exten => 22,n,VoiceMail(${EXTEN},u) | context interne-benutzer { hint(SIP/21) 21 => { Dial(SIP/${EXTEN},40); VoiceMail(${EXTEN},u); } hint(SIP/22) 22 => { Dial(SIP/${EXTEN},40); VoiceMail(${EXTEN},u); } } |
Tabelle 23.2. Hints – Beispiel mit Pattern (Asterisk 1.4)
extensions.conf | extensions.ael |
---|---|
[interne-benutzer] exten => 21,hint,SIP/21 exten => 22,hint,SIP/22 exten => _2X,1,Dial(SIP/${EXTEN},40) exten => _2X,n,VoiceMail(${EXTEN},u) | context interne-benutzer { hint(SIP/21) 21 => {} hint(SIP/22) 22 => {} _2X => { Dial(SIP/${EXTEN},40); VoiceMail(${EXTEN},u); } } |
Wichtig | |
---|---|
Beachten Sie hierbei, dass ein exten => _2X,hint,SIP/${EXTEN} bzw. hint(SIP/${EXTEN}) _2X => { wäre also unzulässig. Ab Asterisk 1.6 ist diese Schreibweise möglich, auch wenn es
anfänglich noch zu Problemen kam. Bitte beachten Sie aber, dass
während der Interpretation eines Hints noch kein Channel besteht, was
bedeutet, dass auch keine Channel-Variablen in der Hint-Definition zur
Verfügung stehen – mit Ausnahme von
|
Tabelle 23.3. Hints – Beispiel mit Pattern (Asterisk 1.6)
extensions.conf | extensions.ael |
---|---|
[interne-benutzer]
exten => _2X,hint,SIP/${EXTEN}
exten => _2X,1,Dial(SIP/${EXTEN},40)
exten => _2X,n,VoiceMail(${EXTEN},u) | context interne-benutzer {
hint(SIP/${EXTEN}) _2X => {
Dial(SIP/${EXTEN},40);
VoiceMail(${EXTEN},u);
}
} |
Tabelle 23.4. Hints – Beispiel mit mehreren Benutzern in einem
hint
extensions.conf | extensions.ael |
---|---|
[interne-benutzer]
exten => 20,hint,SIP/21&SIP/22
exten => 20,1,Dial(SIP/21&SIP/22,40) | context interne-benutzer {
hint(SIP/21&SIP/22) 20 => {}
20 => {
Dial(SIP/21&SIP/22,40);
}
} |
Tipp | |
---|---|
Der Übersichtlichkeit halber kann man alle Hints auch in einen
eigenen Context legen und diesen überall dort mit |
Danach müssen Sie Asterisk neu starten (/etc/init.d/asterisk
reload
oder asterisk -rx 'module
reload'
).
[119] siehe „callgroup
“
[120] siehe „pickupgroup
“
[121] Diese Methode eignet sich allerdings nicht so gut für datenbankgestützte „Realtime“-Installationen.
AMOOCON 2010
Noch kein Ticket? Dann wird es Zeit. Nur noch wenige Tage.
- Infos unter www.amoocon.de.
- twitter.com/AMOOCON