Wer kennt das nicht. Man sitzt zu Hause und ist in Gedanken vertieft, guckt einen Film oder macht sonst was. Plötzlich klingelt das Telefon. Natürlich unterbricht man seine Freizeitbeschäftigung und wandert zum Telefon. Und was darf man dann hören: "Spreche ich mit Herrn X? Hier ist Y von der Firma Z..." und so weiter. Ein Callcenter Agent (CCA), der einem gerne ein supertolles Angebot machen möchte, das so toll ist, dass man es auch mal am Sonntag telefonisch bewerben muss.
Wer eine Asterisk-Telefonanlage betreibt, kann sich nun mit recht geringem Aufwand helfen und eine Vorselektion für seine Anrufer implementieren, die CCAs ausfiltert und normale Anrufer unbehelligt durchlässt.
Dazu machen wir uns eine der lästigsten Eigenschaften der Callcenter zu Nutze: Sie senden nie ihre Telefonnummer mit! Aber wie will man dann filtern ohne z.B. Omas altes Analog-Telefon auch auszusperren? Ganz einfach: CCAs werden normalerweise von einem Digital-Telefon (ISDN, SIP, Handy, ...) aus anrufen. Ruft ein solches Telefon bei uns an, wird dessen Bearer-Typ an uns übermittelt: SPEECH für digitale Anrufer, AUDIO 3.1k für analoge.
Im Prinzip ist das schon die ganze Information, die wir benötigen: Oma ruft ohne Rufnummer und mit AUDIO 3.1k an, normale Bekannte und sonstige Anrufer mit Rufnummer und SPEECH und nur CCAs sollten SPEECH ohne Rufnummer haben.
Weil es immer mal vorkommen kann, dass uns jemand anruft, der seine Rufnummer doch nicht mitsendet, aber kein CCA ist, weisen wir solche Anrufer aber nicht sofort ab, sondern spielen ihnen folgende Nachricht vor:
Guten Tag. Hier ist der Anschluss von X. Leider unterdrücken Sie die Übermittlung Ihrer Rufnummer, daher muss ich davon ausgehen dass dieser Anruf aus einem Callcenter stammt und von mir nicht gewünscht ist. Wenn dies nicht zutrifft, können Sie die 5 drücken und werden sofort durchgestellt. Dieser Anruf wird automatisch aufgezeichnet.
Wenn ein CCA dann doch mal die 5 drückt, um uns besonders dreist doch von seinem Produkt überzeugen zu wollen, können wir die erzeugte Aufnahme später verwenden, um ihn abzumahnen oder ähnliches, da er uns ja definitiv gegen unseren Willen gestört hat. Das Aufzeichnen des Gesprächs ist in diesem Fall auch legal, da wir ja im Voraus darauf hingewiesen haben. Ein gewünschter Anrufer sollte sich davon auch nicht abschrecken lassen, da wir ja auch zuvor erklärt haben, was es damit auf sich hat.
Also ans Eingemachte:
Zuerst brauchen wir ein AGI-Skript, das sich um die Unterscheidung der Anrufertypen kümmert. (Ok, ein AGI-Skript ist hierfür etwas Overkill. Aber das Skript wird demnächst noch erweitert, so dass es durchaus Sinn macht, es auf diese Weise zu lösen.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/usr/bin/perl
use strict;
my $callerName = "unbekannter Teilnehmer";
my $callerDetail = "keine Details";
my ($callType, $callNum) = split(/ /, $ARGV[0]);
my $numberDescription = '';
if ($callNum eq ""){
if ($callType eq "SPEECH"){
$callerName = 'Rufnummer unterdrueckt';
} else {
$callerName = 'analoger Anrufer';
}
} else {
# das folgt erst spaeter
}
print "SET CALLERID \"$callerName \<$callNum\>\"\n";
exit 0;
|
Dieses Skript legen wir als rev_lookup.agi unter /var/lib/asterisk/agi-bin ab (zumindest unter Debian liegen die Asterisk AGI-Skripte dort).
Nun erweitern wir die Datei /etc/asterisk/extensions.conf noch um ein paar Zeilen:
[incoming-context]
; exten für ankommende Anrufe
exten => 9516672, 1, AGI,rev_lookup.agi|${CALLTYPE} ${CALLERID(NUM)}
exten => 9516672, 2, GosubIf($["${CALLERID(name)}"="Rufnummer unterdrueckt"]?ivr-cca,cca,1)
; weitere Behandlung des Anrufes...
; spaß fuer CallCenter Agents
[ivr-cca]
; nehme Anruf an, warte 2 Sekunden (war notwendig, um auf Gesprächsaufbau zu warten :( )
; spiele Infotext ab (siehe oben), warte erneut 5 Sekunden und spiele Text erneut ab
; Background sorgt dafür, dass Tastendrücke zu den entsprechenden Extensions springen
exten => cca, 1, Answer()
exten => cca, 2, Wait(2)
exten => cca, 3, Background(cca-info)
exten => cca, 4, Wait(5)
exten => cca, 5, Goto(3)
; zeichne das Gespräch auf und fahre wie mit normalem Gespräch fort
exten => 5, 1, MixMonitor(cca${STRFTIME(,,%G%m%d%H%M%S)}.wav|W(2))
exten => 5, 2, Return()
; verabschiede CCA und lege auf
exten => i, 1, PlayBack(vm-goodbye)
exten => i, 2, Wait(1)
exten => i, 3, Hangup()
Zuerst rufen wir also das externe AGI-Skript auf und übergeben ihm den Calltype (SPEECH, AUDIO 3.1k) und die Rufnummer (${CALLTYPE} funktioniert auch mit mISDN, was ziemlich lange dauerte um es mit Google, etc. herauszufinden, darum erwähne ich es noch mal explizit). Das Skript setzt CALLERID(name) ensprechend, so dass wir im nächsten Schritt prüfen können, ob wir es mit einem CCA zu tun haben. Falls ja, schicken wir diesen zu unserer Nachricht und lassen ihn entscheiden, ob er das Gespräch aufgezeichnet fortsetzen möchte oder lieber auflegt.
Die aufgezeichneten Gespräche liegen später unter /var/spool/asterisk/monitor und heißen ccaYYYYMMDDHHmmSS.wav (YYYY ist das vierstellige Jahr, MM der zweistellige Monat, DD das zweistellige Datum, HHmmSS die je zweistellige Stunde, Minute und Sekunde).
Nicht vergessen: Die Nachricht für den CCA aufnehmen und z.B. als 8kHz WAV-Datei unter /var/lib/asterisk/sounds/de/cca-info.wav ablegen. Evtl. natürlich auch noch in anderen Sprachen, aber für einen einfachen Privathaushalt dürfte eine Sprache ausreichen ;)
Nach einem Neustart von Asterisk bzw. einem neueinlesen des Dialplans steht uns das neue Feature zur Verfügung. Viel Spaß in der neu gewonnenen Freizeit :)
Dieser Artikel basiert zum Teil auf diesen Forendiskussionen: [1] [2]