LINUXMAKER, OpenSource, Tutorials

Anrufer auf der Blacklist der AstDB

Manche Callcenter oder unliebsame Anrufer möchte man erst gar nicht die Möglichkeit eines Anrufes einräumen. Dabei ist die Datenbank „blacklist“ der AST-DB sehr hilfreich. Und eine entsprechende Gestaltung des Dialplans extension.conf erledigt die Feinarbeit.

exten => 021156215202,1,GotoIf(${BLACKLIST()}?blacklisted)
same => n,GotoIf($[${DEVICE_STATE(PJSIP/15202)}=UNAVAILABLE]?unavail15202)

Als erste Abfrage wird vor alle anderen Abfragen, wie gezeigt, eine Abfrage nach der Existenz der Rufnummer in der Datenbank "blacklist" eingebaut. Bei positiven Ergebnis würde die Asterisk-PBX zu dem Label „blacklisted“ springe.

same => n(blacklisted),Playback(Access-Denied)
same => n,Hangup()

und entweder mit einem kurzen Hinweis auflegen oder wie hier

same => n(blacklisted),Hangup()

sofort die Verbindung auflegen.

Wichtig ist, dass Asterisk zuvor das Modul „func_blacklist“ geladen hat. Nachzuprüfen ist das mit

# asterisk -rx "module show like blacklist"

Rufnummern lassen sehr leicht in dem Format „+492219876543“ zur Ast-DB hinzufügen und auch wieder löschen.

# asterisk -rx "database show"
# asterisk -rx "database put blacklist Rufnummer, Bezeichnung“
# asterisk -rx "database del blacklist Rufnummer“

Umgesetzt in einem kleinen Bash-, Perl- oder PHP-Script, lassen sich sehr schnell Rufnummern sperren. Oder wie weiter unten gezeigt, auch automatisch vollziehen.

Weitere Lösungsansätze sind die mit Hilfe von RegEX:

same => n,GotoIf($[${BLACKLIST()}]?blacklisted)
same => n,GotoIf($[${REGEX("^[0-9]\{11\}$" ${CALLERID(num)})}]?blacklisted)
same => n,GotoIf($[${REGEX("^[*]\{1\,2\}[6]\{1\,1\}[1-2]\{1\,1\}[0-9]\{1\,1\}" ${CALLERID(num)})!0}]?blacklisted)

Dabei steht die erste RegEx für Alle elfstellige Nummern und die zweite RegEx für alles was mit '1x' oder '2x' mit '*' anfängt, gefolgt von einer '6', dann einer '1' oder '2' und '1x' sowie eine nachfolgende beliebige Zahl enthält.
Sofern eine automatische Datenbankeinpflege gewünscht ist, dann lässt sich das wie folgt realisieren. Dabei wird das Label „doblacklist“ angesprungen.

same => n(doblacklist),Set(DB(blacklist/${CALLERID(num)})=AUTOSPERRE)
same => n,Hangup()

Beim nächsten Anruf greift bereits

same => n,GotoIf($[${BLACKLIST()}]?blacklisted)