Inhaltsverzeichnis

Wählplanerweiterungen für die ISDN-Anbindungen

Asterisk Logo

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. LOL

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>
1)
Integrated Services Digital Network oder auch unter der Abkürzung Ist Sowas Denn Nötig
2)
Multiple Subscriber Number