Wählplanerweiterungen für die ISDN-Anbindungen
Im vorgenannten Kapitel haben wir unseren Asterisk-Server um das Thema ISDN1) ergänzt.
Im einzelnen wollen wir nun die unterschiedlichen Richtungen betrachten und dabei auf verschiedene Komfortstufen eingehen.
abgehende Verbindungen
erste abgehende Wahl
Im ersten Schritt erweitern wir nun unseren Dialplan um eine Option zum abgehenden Telefonieren.
Als erstes tragen definieren wir in der Konfigurationsdatei /etc/asterisk/misdn.conf unseren ISDN-Anschluss ein.
# vim /etc/asterisk/misdn.conf
; Django - 29.11.2010 erste Konfiguration für die M-net Aussenanbindung
[Mnet]
ports=1
context=Extern_ISDN
msns=883176
In der GesamtKonfiguration ergibt sich damit folgendes Konfigurationsfiel für mISDN:
# egrep -v '(^\s+;|^;|^$)' /etc/asterisk/misdn.conf
[general] misdn_init=/etc/misdn-init.conf debug=0 ntdebugflags=0 ntdebugfile=/var/log/misdn-nt.log ntkeepcalls=no bridging=no stop_tone_after_first_digit=yes append_digits2exten=yes dynamic_crypt=no crypt_prefix=** crypt_keys=test,muh [default] context=misdn language=de musicclass=default senddtmf=yes far_alerting=no allowed_bearers=all internationalprefix=00 nationalprefix=0 rxgain=0 txgain=0 te_choose_channel=no l1watcher_timeout=0 pmp_l1_check=no reject_cause=16 need_more_infos=no nttimeout=no method=standard overlapdial=yes dialplan=0 localdialplan=0 cpndialplan=0 early_bconnect=yes incoming_early_audio=no nodialtone=no presentation=-1 screen=-1 outgoing_colp=0 display_connected=0 display_setup=0 jitterbuffer=4000 jitterbuffer_upper_threshold=0 hdlc=no max_incoming=-1 max_outgoing=-1 cc_request_retention=yes [Mnet] ports=1 context=Extern_ISDN msns=883176
Wie haben also einen ISDN-Anschluss, den wir im Kontext [Mnet] definieren. Bei der weiteren Konfiguration gehen wir davon aus, dass Rufnummern mit 4 oder mehr Stellen sich auf Teilnehmer außerhalb unserer Telefonanlage bezeihen. Wir tragen also in den Diaplan nach:
# vim /etc/asterisk/extensions.conf
[abgehend_(mISDN)] ;erste Version ohne setzen einer MSN exten => _XXXX.,1,Dial(mISDN/g:Mnet/${EXTEN},120,TtrWw) exten => _XXXX.,n,Hangup [default] include => abgehend_(mISDN)
Unser wählplan enthält nunmehr zusammen mit den bereits beschriebenen Beispielsanwendungen folgende Zeilen:
[general] static=yes writeprotect=no [intern] ; interne Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen exten => _XX,1,Dial(SIP/${EXTEN},55,TtrWw) [abgehend_(mISDN)] ;erste Version ohne setzen einer MSN exten => _XXXX.,1,Dial(mISDN/g:Mnet/${EXTEN},120,TtrWw) exten => _XXXX.,n,Hangup [ansagen-demo] exten => 601,1,Answer() exten => 601,n,Playback(tt-monkeysintro) exten => 601,n,Playback(tt-monkeys) [echotest] exten => 602,1,answer exten => 602,n,Wait(1) exten => 602,n,playback(demo-echotest) exten => 602,n,echo exten => 602,n,playback(demo-echodone) exten => 602,n,hangup [asterisk-demo] exten => 603,1,answer exten => 603,n,wait(1) exten => 603,n,playback(demo-abouttotry) exten => 603,n,dial(IAX2/guest@misery.digium.com/s@default) exten => 603,n,playback(demo-nogo) exten => 603,n,goto(s,6) [default] include => intern include => ansagen-demo include => echotest include => asterisk-demo include => abgehend_(mISDN)
Anschließend laden wir unseren neuen Dialplan - wir verbinden uns hierzu mit der Asterisk-Konsole.
# asterisk -r
[root@office ~]# asterisk -r Verbosity is at least 3 asterisk*CLI> dialplan reload
Die Anwahl einer externen Rufnummer von unserem SIP-Endgerät wird uns in der Konsole entsprechend dokumentiert. Im Nachfolgendem Beispiel hat der Teilnehmer mit der internen Rufnummer 14 die Rufnummer 08936046666 angerufen:
asterisk*CLI> == Using SIP RTP CoS mark 5 [Dec 1 13:22:25] ERROR[19516]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session. -- Executing [08936046666@default:1] Dial("SIP/14-00000002", "mISDN/g:Mnet/08936046666") in new stack -- Called g:Mnet/08936046666 -- mISDN/1-u5 is proceeding passing it to SIP/14-00000002 -- mISDN/1-u5 is making progress passing it to SIP/14-00000002 -- mISDN/1-u5 is ringing -- mISDN/1-u5 answered SIP/14-00000002 == Spawn extension (default, 08936046666, 1) exited non-zero on 'SIP/14-00000002' asterisk*CLI>
individuelle MSN bei der abgehenden Wahl setzen
Bei unserem Mehrgeräteanschluß hat uns unser Netzbetreiber nicht nur eine Rufnummer zugeteilt, sondern mehrere. Diese MSN2) haben wir einzelnen Teilnehmern zugeordnet. Rufen wir nun von einer Nebenstelle unseres Asterisk-Servers einen externen Teilnehmer an, möchten wir natürlich auch die jeweils zugeordnete Rufnummer übertragen. Das was sich bei dem ein oder anderen höchstprofesssionellen Systemintegrator als unlösbare Herausforderunge bei einer VoIP-Anlage mit 3.000 Nebenstellen darstellt, gestaltet sich bei unserem Asterisk-Server als triviale Herausforderung.
Für die Zuordnung der internen Rufnummern zu den jeweilgen MSNs bedienen wir uns der Asterisk-eigenen Datenbank. Diese Datenbank erreichen wir über die Funktion database. Wir können damit z.B. unsere Registrierten Geräte abfragen.
# asterisk -r
asterisk*CLI> database show /SIP/Registry/13 : 192.168.10.71:3072:3600:13:sip:13@192.168.10.71:3072;line=ndoi6dtx /SIP/Registry/14 : 192.168.10.61:5060:3600:14:sip:14@192.168.10.61:5060;line=v8ep4agw
Wir legen uns nun eine kleine Tabelle an, in der wir jedem internen Teilnehmer eine unserer MSN zuweisen. In unserem Demofall wäre dies exemplarisch:
interne Rufnummer | MSN |
---|---|
13 | 883176 |
14 | 883179 |
Diese Tabelle legen wir nun einmalig über die Asterisk-Konsole an.
# asterisk -r
asterisk*CLI> database put 13 MSN 08121883176 Updated database successfully asterisk*CLI> database put 14 MSN 08121883179 Updated database successfully asterisk*CLI> database show /13/MSN : 08121883176 /14/MSN : 08121883179 /SIP/Registry/13 : 192.168.10.71:3072:3600:13:sip:13@192.168.10.71:3072;line=ndoi6dtx /SIP/Registry/14 : 192.168.10.61:5060:3600:14:sip:14@192.168.10.61:5060;line=v8ep4agw
Unseren Dialplan modifizieren wir nun wie folgt.
# vim /etc/asterisk/extensions.conf
[abgehend_(mISDN)]
; M-net-MSN für den rufenden Teilnehmer aus der Datenbank holen
; abgehende Rufnummer setzen und dann gewählte Rufnummer weiter
; in Richtung ISDN schicken
exten => _XXXX.,1,Set(msn=${DB(${CALLERID(num)}/MSN)})
exten => _XXXX.,n,Set(CALLERID(num)=${msn})
exten => _XXXX.,n,Dial(mISDN/g:Mnet/${EXTEN},120,TtrWw)
exten => _XXXX.,n,Hangup
Anschließend laden wir den Dialplan neu.
# asterisk -r
asterisk*CLI> dialplan reload
Rufen wir nun einen externen Partner an, wird im Gegensatz zur einfachen Variante bei der Wahl, abhängig von der internen Rufnummer, die externe Rufnummer gesetzt.
asterisk*CLI> == Using SIP RTP CoS mark 5 [Dec 1 13:31:03] ERROR[19516]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session. -- Executing [089216750916@default:1] Set("SIP/14-00000003", "msn=08121883179") in new stack -- Executing [089216750916@default:2] Set("SIP/14-00000003", "CALLERID(num)=08121883179") in new stack -- Executing [089216750916@default:3] Dial("SIP/14-00000003", "mISDN/g:Mnet/089216750916,120,TtrWw") in new stack -- Called g:Mnet/089216750916 -- mISDN/1-u7 answered SIP/14-00000003 asterisk*CLI>
ankommende Verbindungen
Im nächsten Schritt richten wir nun den ankommenden ISDN-Amtsverkehr ein. Wir routen in unserem Beispiel die Anrufe auf die MSN 883176 auf die intene Nst. 14.
In der Konfigurationsdatei zu mISDN /etc/asterisk/misdn legen wir nun fest, auf welche MSN unser Asterisk reagieren soll.
# vim /etc/asterisk/misdn.conf
; Django - 12.04.2010 erste Konfiguration für die M-net Aussenanbindung
[Mnet]
ports=1
context=ankommend_(mISDN)
msns=883176
In unserem Dialplan definieren wir nun an welcher internen Nebenstelle die Anrufe für die MSN 883176 signalisiert werden soll. Hierzu erweitern wir unseren Dialplan um/auf folgende Zeilen.
# vim /etc/asterisk/extensions.conf
[ankommend_(mISDN)] ; ankommende erste ISDN-Anrufe der MSN 883176 auf der internen Nst. 14 exten => 883176,1,Dial(SIP/14,60) exten => 883176,n,Hangup [default] include => echotest include => asterisk-demo include => local include => abgehend_(mISDN) include => ankommend_(mISDN)
In Summe ergibt sich folgender vorläufigerDialplan:
[general]
static=yes
writeprotect=no
[intern]
; interne Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen
exten => _XX,1,Dial(SIP/${EXTEN},55,TtrWw)
[abgehend_(mISDN)]
; M-net-MSN für den rufenden Teilnehmer aus der Datenbank holen
; abgehende Rufnummer setzen und dann gewählte Rufnummer weiter
; in Richtung ISDN schicken
exten => _XXXX.,1,Set(msn=${DB(${CALLERID(num)}/MSN)})
exten => _XXXX.,n,Set(CALLERID(num)=${msn})
exten => _XXXX.,n,Dial(mISDN/g:Mnet/${EXTEN},120,TtrWw)
exten => _XXXX.,n,Hangup
[ankommend_(mISDN)]
; ankommende erste ISDN-Anrufe der MSN 883176 auf der internen Nst. 14
exten => 883176,1,Dial(SIP/14,60)
exten => 883176,n,Hangup
[ansagen-demo]
exten => 601,1,Answer()
exten => 601,n,Playback(tt-monkeysintro)
exten => 601,n,Playback(tt-monkeys)
[echotest]
exten => 602,1,answer
exten => 602,n,Wait(1)
exten => 602,n,playback(demo-echotest)
exten => 602,n,echo
exten => 602,n,playback(demo-echodone)
exten => 602,n,hangup
[asterisk-demo]
exten => 603,1,answer
exten => 603,n,wait(1)
exten => 603,n,playback(demo-abouttotry)
exten => 603,n,dial(IAX2/guest@misery.digium.com/s@default)
exten => 603,n,playback(demo-nogo)
exten => 603,n,goto(s,6)
[default]
include => intern
include => ansagen-demo
include => echotest
include => asterisk-demo
include => abgehend_(mISDN)
include => ankommend_(mISDN)
Anschließend verbinden wir uns mit unserer Asterisk-Konsole und laden unseren modifizierten Dialplan.
# asterisk -r
Verbosity is at least 3 asterisk*CLI> dialplan reload
Rufen wir nun die Zielrufnummer 883176 an, wird der Anruf auf der definierten Zielnebenstelle 14 signalisiert und kann dort angenommen werden.
asterisk*CLI> -- Executing [883176@ankommend_(mISDN):1] Dial("mISDN/1-u1", "SIP/14,60") in new stack == Using SIP RTP CoS mark 5 -- Called 14 -- SIP/14-00000001 is ringing -- SIP/14-00000001 is ringing -- SIP/14-00000001 is ringing -- SIP/14-00000001 is ringing == Spawn extension (ankommend_(mISDN), 883176, 1) exited non-zero on 'mISDN/1-u1' asterisk*CLI>