TK-Leistungsmerkmal - Filtergruppen
Unter dem Punkt Sperrlisten und VIP-Behandlung wird auf die beiden unterschiedlichen Anwendungen rund um das Thema black- und whitelisting bei Asterisk 1.8 eingegangen. Selbstverständlich läßt sich auch das Ganze etwas ausdehnen, so dass man individuelle Rufnummern sperren und andere Rufnummern für einen besonders bevorzugten Service definieren kann. Das was sich bei dem ein oder anderen höchstprofesssionellen Systemhersteller und Systemintegrator als unlösbare Herausforderung bei einer VoIP-Anlage mit 3.000 Nebenstellen darstellt, gestaltet sich bei unserem Asterisk-Server als triviale Herausforderung.
Da wir verschiedene Rufnummern black- und andere whitelisten wollen, bedienen wir uns wieder der Asterisk-Haus-und-Hof-Datenbank AstDB.
# asterisk -rx "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 /dundi/secret : vlD6J13q3k+meJsTRR5rcQ==;XnX5UJ5C11aTDiAdY7WSQg== /dundi/secretexpiry : 14081967866 4 results found.
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 | externe Rufnummer | Listenmerkmal |
---|---|---|
bl = blacklisted / wl = whitelisted | ||
14 | 08921655612 | bl |
14 | 08949757369 | wl |
Diese Tabelle legen wir nun einmalig über die Asterisk-Konsole an.
# asterisk -r
asterisk*CLI> asterisk*CLI> database put 14 08949757369 wl Updated database successfully asterisk*CLI> database put 14 08921655612 bl Updated database successfully asterisk*CLI>
Somit ergibt sich für den Teilnehmer 14 folgende stattliche Tabelle:
# asterisk -rx "database show 14"
/14/08949757369 : wl /14/08921655612 : bl 2 results found.
Bei unserem differenzierenden Anrufleitweglenkung treffen wir nun folgende Definitionen:
- Anrufer die keine Nummer übertragen werden „nur“ an der int. Nst 14 signalisiert. Es erfolgt weder eine Weiterleitung zum Händie noch wird der Anrufer zur Voicemail geleitet, sollte dieser zu lange anläuten.
- Anrufer mit einem Whitelisting-Eintrag in der AstDB werden sowohl am internen Apparate 14 wie auch am Händie mit der Rufnummer 0190/7422960 signalisiert. Wird der Anrufer nicht binnen 20 Sekunden beantwortet, erhält der Anrufer die Möglichkeit zum Hinterlassen einer Nachricht auf der Voicemailbox unserer Nebenstelle 14.
- Anrufer, die einen blacklisting Eintrag haben, werden direkt zur Abwimmelansage der Nst. 14 geleitet und anschließend die Verbindung gekappt, ohne dass der Anrufer eine Nachricht hinterlassen kann.
Zur Realisierung unserer besonderen Kundenserviceschaltung bedienen wir uns der GotoIf Anweisung im Dialplan. Wir erweitern also unsere Konfigurationsdatei wie folgt.
[ankommend_(mISDN)] ; ankommende ISDN-Anrufe der MSN 883176 werden gegen die black- und whitelisting Datenbank geprüft und gesondert behandelt: ; - Anrufer die keine Nummer übertragen werden "nur" an der int. Nst 14 signalisiert, ohne Weiterleitung zum Händie und/oder Voicemail ; - Anrufer mit einem Whitelisting-Eintrag in der AstDB (Asterisk-Datenbank) werden sowohl am internen Apparate 14 wie auch am ; Händie mit der Rufnummer 0190/7422960 signalisiert. Wird der Anrufer nicht binnen 20 Sekunden beantwortet, erhält der Anrufer ; die Möglichkeit zum Hinterlassen einer Nachricht auf der Voicemailbox von der Nst. 14 ; - Anrufer, die einen blacklisting Eintrag haben, werden direkt zur Abwimmelansage der Nst. 14 geleitet und anschließend die ; Verbindung gekappt, ohne dass der Anrufer eine Nachricht hinterlassen kann. exten => 883176,1,NoOp(Anrufer übertrug die Rufnummer ${CALLERID(num)}) exten => 883176,n,Set(access=${DB(14/${CALLERID(num)})}) exten => 883176,n,GotoIf($[ "${access}" = "" ]?ohne:testing) exten => 883176,n(testing),GotoIf($[ "${access}" = "wl" ]?whitelisted:blacklisted) exten => 883176,n(whitelisted),NoOp(der Anrufer ist gewhitelisted, der Anrufer wird zur Nebenstelle 14 und zum Mobiltelefon durchgestellt) exten => 883176,n,Dial(SIP/14&mISDN/g:Mnet/01907422960,20) exten => 883176,n,VoiceMail(14,u) exten => 883176,n,Hangup exten => 883176,n(blacklisted),NoOp(der Anrufer ist geblacklisted und wird daher zur "Abwimmel"-Voicemailbox abgeworfen) exten => 883176,n,Playback(/var/spool/asterisk/voicemail/default/14/goaway) exten => 883176,n,Hangup exten => 883176,n(ohne),NoOp(der Anrufer überträgt keine Nummer, und ist weder geblack- noch gewhitelisted) exten => 883176,n,Dial(SIP/14,60) exten => 883176,n,Hangup
Zum Bearbeiten des Dialplan nutzen wir, wie immer den Editor unseres Vertrauen:
# vim /etc/asterisk/extensions.conf
Anschließend laden wir den Dialplan neu.
# asterisk -rx "dialplan reload" Dialplan reloaded.
Mit dialplan show ankommend_(mISDN) können wir uns unseren geladenen Dialplan auf der Asterisk Konsole nochmals anzeigen lassen.
Zum Testen unserer Filterschaltung führen wir nun ein paar Testgespräche. Als erstes Rufen wir unsere Zielrufnummer an und unterdrücken dabei die Übertragung der Rufnummer.
asterisk*CLI> -- Executing [883176@ankommend_(mISDN):1] NoOp("mISDN/1-u27", "Anrufer übertrug die Rufnummer ") in new stack -- Executing [883176@ankommend_(mISDN):2] Set("mISDN/1-u27", "access=") in new stack -- Executing [883176@ankommend_(mISDN):3] GotoIf("mISDN/1-u27", "1?ohne:testing") in new stack -- Goto (ankommend_(mISDN),883176,12) -- Executing [883176@ankommend_(mISDN):12] NoOp("mISDN/1-u27", "der Anrufer überträgt keine Nummer, und ist weder geblack- noch gewhitelisted") in new stack -- Executing [883176@ankommend_(mISDN):13] Dial("mISDN/1-u27", "SIP/14,60") in new stack == Using SIP RTP CoS mark 5 -- Called 14 -- SIP/14-0000000c is ringing -- SIP/14-0000000c is ringing -- SIP/14-0000000c is ringing -- SIP/14-0000000c is ringing == Spawn extension (ankommend_(mISDN), 883176, 13) exited non-zero on 'mISDN/1-u27' asterisk*CLI>
Wunschgemäß wirde der Anrufer „nur“ zur Nebenstelle 14 durchgestellt und klinkelt dort so lange an, bis entweder der Anruf angenommen wird, oder der Anrufer von selbst aufgibt.
Als nächstes rufen wir von einem geblacklisteten Anschluss 08921655612 aus unseren Zielteilnehmer mit der Nummer 883176.
asterisk*CLI> -- Executing [883176@ankommend_(mISDN):1] NoOp("mISDN/1-u28", "Anrufer übertrug die Rufnummer 08921655612") in new stack -- Executing [883176@ankommend_(mISDN):2] Set("mISDN/1-u28", "access=bl") in new stack -- Executing [883176@ankommend_(mISDN):3] GotoIf("mISDN/1-u28", "0?ohne:testing") in new stack -- Goto (ankommend_(mISDN),883176,4) -- Executing [883176@ankommend_(mISDN):4] GotoIf("mISDN/1-u28", "0?whitelisted:blacklisted") in new stack -- Goto (ankommend_(mISDN),883176,9) -- Executing [883176@ankommend_(mISDN):9] NoOp("mISDN/1-u28", "der Anrufer ist geblacklisted und wird daher zur "Abwimmel"-Voicemailbox abgeworfen") in new stack -- Executing [883176@ankommend_(mISDN):10] Playback("mISDN/1-u28", "/var/spool/asterisk/voicemail/default/14/goaway") in new stack -- <mISDN/1-u28> Playing '/var/spool/asterisk/voicemail/default/14/goaway.slin' (language 'de') -- Executing [883176@ankommend_(mISDN):11] Hangup("mISDN/1-u28", "") in new stack == Spawn extension (ankommend_(mISDN), 883176, 11) exited non-zero on 'mISDN/1-u28' asterisk*CLI>
Der Anrufer wird, wie von uns gewünscht direkt zur Abwimmelansage geleitet. Nach Beendigung diser wird die Verbindung beendet.
Zum Schluss rufen wir unseren Teilnemer von unserem VIP-Anschluss 08949757369 aus an, der in der AstDB einen whitelisting-Eintrag besitzt.
asterisk*CLI> -- Executing [883176@ankommend_(mISDN):1] NoOp("mISDN/1-u29", "Anrufer übertrug die Rufnummer 08949757369") in new stack -- Executing [883176@ankommend_(mISDN):2] Set("mISDN/1-u29", "access=wl") in new stack -- Executing [883176@ankommend_(mISDN):3] GotoIf("mISDN/1-u29", "0?ohne:testing") in new stack -- Goto (ankommend_(mISDN),883176,4) -- Executing [883176@ankommend_(mISDN):4] GotoIf("mISDN/1-u29", "1?whitelisted:blacklisted") in new stack -- Goto (ankommend_(mISDN),883176,5) -- Executing [883176@ankommend_(mISDN):5] NoOp("mISDN/1-u29", "der Anrufer ist gewhitelisted, der Anrufer wird zur Nebenstelle 14 und zum Mobiltelefon durchgestellt") in new stack -- Executing [883176@ankommend_(mISDN):6] Dial("mISDN/1-u29", "SIP/14&mISDN/g:Mnet/01907422960,20") in new stack == Using SIP RTP CoS mark 5 -- Called 14 -- Called g:Mnet/01907422960 -- SIP/14-0000000d is ringing -- SIP/14-0000000d is ringing -- SIP/14-0000000d is ringing -- mISDN/2-u31 is proceeding passing it to mISDN/1-u29 -- mISDN/2-u31 is making progress passing it to mISDN/1-u29 -- mISDN/2-u31 answered mISDN/1-u29 == Spawn extension (ankommend_(mISDN), 883176, 6) exited non-zero on 'mISDN/1-u29' asterisk*CLI>
Unser VIP wird direkt an der internen Nebenstelle 14 und am Mobiltelefon 01907422960 signalisiert. Im obigen Beispiel wurde der Anruf auf dem Händie angenommen. Alternativ würde nach 20 Sekunden der VIP-Teilnehmer auf die Voicemailbox des Teilnehmers 14 geleitet, wo er bei Bedarf eine Nachricht hinterlassen könnte.
Mit diesem gezeigten Beispiel können wir nun sehr schön und vor allem auch einfach für Ruhe vor lästigen Anrufern schaffen sowie besonders geschätzte Mitmenschen ihrem Status entsprechend bedienen.
Einen nicht zu verschweigenden Umstand hat natürlich die aufgezeigte Lösung. Eine uhrzeitgesteuerte Unterscheidung oder gar eine generelle black-/whitelisting-Möglichkiet ganzer TK-Anlagenanschlüsse ist mit dem Beispiel noch nicht gegeben. Speziell beim Punkt generelle black-/whitelisting werden wir uns in einem weiteren Beispiel einer externen MySQL-Datenbank bedienen.
Weitere TK-Leistungsmerkmale werden hier beschrieben.