Inhaltsverzeichnis

TK-Leistungsmerkmal - Black-/Whitelisting - Sperrlisten

Asterisk Logo

Ab und an kommt es vor, dass man von einem oder mehreren Anschlüsse telefonisch nicht belästigt werden möchte. An Hand der übermittelten der Rufnummer/Rufnummernanzeige (CLIP) können wir die weitere Abarbeitung unseres Dialplans abhängig machen.

einzelne Nummer

Im ersten Beispiel gehen wir davon aus, dass nur ein einzelner Anschluss gesondert behandelt werden soll. In einschlägigen Beiträgen wird hierbei oftmals von der Ex-Girlfriend-Function gesprochen. Ob hierbei Erfahrungen der Progammierer bei Digium eine Rolle gespielt haben, kann nicht weiter überprüft werden. :-P

In diesen Beispiel gehen wir davon aus, dass der intenre Teilnehmer mit der Rufnummer 14, der über die MSN 883176 erreichbar ist, von der Händierufnummer 0190/7422960 nicht mehr direkt erreichbar ist, sondern direkt zu einer Voicemailbox geleitet werden soll. Wir passen also unseren Wählplan unseres Asterisk-Servers beim Kontext [ankommend_(mISDN)] an.

# vim /etc/asterisk/extensions.conf
; ankommende ISDN-Anrufe der MSN 883176 auf int. Nst. 13 leiten, aber _n_u_r_ wenn diese
; _n_i_c_h_t_ von der externen Rufnummer 01907422960 kommen. Diese Nummer ist geblacklistet!
exten => 883176,1,GotoIf($[${CALLERID(num)} = 01907422960]?10:20)
exten => 883176,10,NoOp(Externanrufer ${CALLERID(num)} ist geblacklistet und wird daher auf die Voicemail geleitet!)
exten => 883176,n,VoiceMail(113,u)
exten => 883176,n,Hangup
exten => 883176,20,NoOp(Externanrufer ${CALLERID(num)} hat keinen Sperreintrag und wird an Nst. 13 signalisiert!)
exten => 883176,n,Dial(SIP/13)
exten => 883176,n,Hangup

Um die GotoIf-Funktion prüfen wir nun ab, ob die übertragene RUFNUMMER DEM GEWÜNSCHTEN Muster entspricht. Bei positivem Ergebnis, wird an die Priorität 10 verwiesen, bei der auf der Asterisk-Konsole, sofern mind. Loglevel 3 eingestellt wurde, ein entsprechender Hinweis ausgegeben wird. Anschließend kommen wir zu einer gesonderten Voicemailbox mit der Nummer 113.

userdummyLeftdummyRightdummyUpdummyDown

Nachdem der Änderung des Dialplan verbinden wir uns mit dem CLI1) von Asterisk und laden den geänderten Dialplan.

# asterisk -r
Verbosity is at least 3
asterisk*CLI> dialplan reload

Anschließend rufen wir von einem internem Teilnehmer die Amtsrufnummer 883176.

asterisk*CLI> 
    -- Accepting AUTHENTICATED call from 192.168.10.51:
       > requested format = gsm,
       > requested prefs = (),
       > actual format = gsm,
       > host prefs = (),
       > priority = mine
    -- Executing [883176@default:1] Set("IAX2/33-5878", "msn=") in new stack
    -- Executing [883176@default:2] Set("IAX2/33-5878", "CALLERID(num)=") in new stack
    -- Executing [883176@default:3] Dial("IAX2/33-5878", "mISDN/g:Mnet/883176,120,TtrWw") in new stack
    -- Called g:Mnet/883176
    -- Executing [883176@ankommend_(mISDN):1] GotoIf("mISDN/2-u32", "0?10:20") in new stack
    -- Goto (ankommend_(mISDN),883176,20)
    -- Executing [883176@ankommend_(mISDN):20] NoOp("mISDN/2-u32", "Externanrufer 08121883170 hat keinen Sperreintrag und wird an Nst. 13 signalisiert!") in new stack
    -- Executing [883176@ankommend_(mISDN):21] Dial("mISDN/2-u32", "SIP/13") in new stack
  == Using SIP RTP CoS mark 5
    -- Called 13
    -- SIP/13-00000011 is ringing
    -- mISDN/1-u31 is proceeding passing it to IAX2/33-5878
    -- mISDN/1-u31 is ringing
    -- SIP/13-00000011 is ringing
    -- SIP/13-00000011 is ringing
    -- SIP/13-00000011 is ringing
  == Spawn extension (default, 883176, 3) exited non-zero on 'IAX2/33-5878'
    -- Hungup 'IAX2/33-5878'
  == Spawn extension (ankommend_(mISDN), 883176, 21) exited non-zero on 'mISDN/2-u32'
asterisk*CLI>

Überträgt der externe Anrufer keine Nummer, so kommt er auch direkt zur Nebenstelle 13 durch:

asterisk*CLI> 
    -- Executing [883176@ankommend_(mISDN):1] GotoIf("mISDN/1-u33", "?10:20") in new stack
    -- Goto (ankommend_(mISDN),883176,20)
    -- Executing [883176@ankommend_(mISDN):20] NoOp("mISDN/1-u33", "Externanrufer  hat keinen Sperreintrag und wird an Nst. 13 signalisiert!") in new stack
    -- Executing [883176@ankommend_(mISDN):21] Dial("mISDN/1-u33", "SIP/13") in new stack
  == Using SIP RTP CoS mark 5
    -- Called 13
    -- SIP/13-00000012 is ringing
    -- SIP/13-00000012 is ringing
    -- SIP/13-00000012 is ringing
    -- SIP/13-00000012 is ringing
    -- SIP/13-00000012 is ringing
  == Spawn extension (ankommend_(mISDN), 883176, 21) exited non-zero on 'mISDN/1-u33'
asterisk*CLI>

Ruft hingegen nun die unerwünschte Exfreundin/Exgirlfriend an, wir an Hand der übertragenen Rufnummer, gleich zu der gesonderten Mailbox 113 verzweigt, bei der eine gesonderte und überaus freundliche Ansage eingespielt wird/werden kann.

asterisk*CLI> 
    -- Executing [883176@ankommend_(mISDN):1] GotoIf("mISDN/1-u34", "1?10:20") in new stack
    -- Goto (ankommend_(mISDN),883176,10)
    -- Executing [883176@ankommend_(mISDN):10] NoOp("mISDN/1-u34", "Externanrufer 01907422960 ist geblacklistet und wird daher auf die Voicemail geleitet!") in new stack
    -- Executing [883176@ankommend_(mISDN):11] VoiceMail("mISDN/1-u34", "113,u") in new stack
    -- <mISDN/1-u34> Playing '/var/spool/asterisk/voicemail/default/113/unavail.slin' (language 'de')
    -- <mISDN/1-u34> Playing 'vm-intro.alaw' (language 'de')
  == Spawn extension (ankommend_(mISDN), 883176, 11) exited non-zero on 'mISDN/1-u34'
asterisk*CLI>

TK-Anlagenanschlüsse

Im vorgenannten Beispiel "Sperren einer einzelnen Nummer" haben wir uns darauf beschränkt einen einzelnen Anrufer an Hand seiner übertragenen Rufnummer zu sperren. Möchten wir aber zum Beispiel Anrufe von einem ISDN-Amtsanschluss einer Nebenstellenanlage sperren, so geht das leider nicht so einfach bei dem zuvor genannten Beispiel. Hintergrund ist, dass dort keine Musterpattern vorgegeben werden können.

Im folgenden Beispiel möchten wir, warum auch immer, keinerlei Anrufe von dem Anschlussinhaber der Rufnummer 089 2165-0 bis 089 2165-9999 erhalten. ^_^ Betrachten wir also den Nummernkreis von 08921650 bis 08921659999, so entspricht dies, im gewohnten Asterisk-Patternmatching Syntax: _0892165.

Wir bearbeiten nunmehr erneut unseren Dialplan wie folgt:

# vim /etc/asterisk/extensions.conf
; ankommende ISDN-Anrufe der MSN 883176 auf int. Nst. 14 leiten, aber _n_u_r_ wenn diese
; _n_i_c_h_t_ von der externen Rufnummer 0892165-xxxxxxx kommen. Dieser Amtsanschluss ist geblacklistet!
exten => 883176/_0892165.,1,NoOp(Externanrufer-Gruppe ${CALLERID(num)} ist geblacklistet und wird daher auf die Voicemail geleitet!)
exten => 883176/_0892165.,n,VoiceMail(14,u)
exten => 883176/_0892165.,n,Hangup
exten => 883176,1,NoOp(Externanrufer ${CALLERID(num)} hat keinen Sperreintrag und wird an Nst. 14 signalisiert!)
exten => 883176,n,Dial(SIP/14)
exten => 883176,n,Hangup

Anschließend laden wir den dialplan neu und verbinden uns mit der Asterisk-Konsole:

# asterisk -rx "dialplan reload" && asterisk -r

Ruft nun eine Nebenstelle aus diesem TK-Anlagen-Amtsanschluss an, wird dieser erfolgreich zu unserer Abwimmelvoicemailbox 114 verwiesen:

asterisk *CLI>
    -- Executing [883176@ankommend_(mISDN):1] NoOp("mISDN/1-u47", "Externanrufer-Gruppe 08921655612 ist geblacklistet und wird daher auf die Voicemail geleitet!") in new stack
    -- Executing [883176@ankommend_(mISDN):2] VoiceMail("mISDN/1-u47", "114,u") in new stack
    -- <mISDN/1-u47> Playing 'vm-theperson.alaw' (language 'de')
    -- <mISDN/1-u47> Playing 'digits/1.alaw' (language 'de')
    -- <mISDN/1-u47> Playing 'digits/4.alaw' (language 'de')
    -- <mISDN/1-u47> Playing 'vm-isunavail.alaw' (language 'de')
    -- <mISDN/1-u47> Playing 'vm-intro.alaw' (language 'de')
  == Spawn extension (ankommend_(mISDN), 883176, 2) exited non-zero on 'mISDN/1-u47'
asterisk *CLI>

Hingegen wird ein Anrufer ohne Rufnummernübertragung, bzw ein Anrufer von jedem anderen Anschluss zum Apparat durchgelassen. Im nachfolgenden Beispiel ruf ein Mobilfunkteilnehmer mit der Händierufnummer 01907422960 an und wird direkt zum internen Anschluss mit der Rufnummer 14 geleitet.

office*CLI> 
    -- Executing [883176@ankommend_(mISDN):1] NoOp("mISDN/1-u50", "Externanrufer 01907422960 hat keinen Sperreintrag und wird an Nst. 14 signalisiert!") in new stack
    -- Executing [883176@ankommend_(mISDN):2] Dial("mISDN/1-u50", "SIP/14") in new stack
  == Using SIP RTP CoS mark 5
    -- Called 14
    -- SIP/14-0000001a is ringing
    -- SIP/14-0000001a is ringing
    -- SIP/14-0000001a is ringing
  == Spawn extension (ankommend_(mISDN), 883176, 2) exited non-zero on 'mISDN/1-u50'
office*CLI>
1)
Command Line Interface