Unknown-Caller Terror

Leider ist es nach wie vor so, dass viele Callcenter versuchen mit unterdrückter Rufnummer ihren Terror-Auftrag zu erfüllen. Da das einfach nur nervt liegt nichts näher als Imperium zu spielen und "zurück-zu-nerven". Asterisk bietet hierzu die ein oder andere lustige Möglichkeit.

Was soll geschehen?
Kommt ein Anruf mit unterdrückter bzw. nicht übermittelter Rufnummer an, soll dem Anrufer nach Möglichkeit der Firmenname und der Sinn seines Anrufes entlockt und diese Informationen aufgezeichnet werden. Ist er dann diese Info losgeworden landet er im PrivacyManager von Asterisk, der ihm mitteilt dass Anrufe ohne Rufnummer nicht erwünscht sind. Gibt er wider Erwarten doch noch seine Rufnummer preis wollen wir mal nicht so sein und lassen das Telefon klingeln.

Vorbereitung
Benötigt werden fünf Soundfiles, die man am Einfachsten mit der "Record()"- Funktion von Asterisk aufzeichnet.
Der Inhalt könnte in etwa folgender Text sein:
<uct-hallo> Hallo?
<uct-hallo-wer-ist-da> Hallo? Wer ist da?
<uct-ich-verstehe-schlecht> Ich kann Sie ganz schlecht verstehen! Wer ist da?
<uct-um-was-geht-es> Und um was geht es?
<uct-ich-verbinde> Ok- kleinen Moment bitte ich verbinde Sie weiter

Die Dateien gehören wie die anderen Asterisk-Soundfiles nach /var/lib/asterisk/sounds.

Nun fehlt nur noch die Ergänzung in der extensions.conf und ein Neuladen der Asterisk-Konfiguration.

Im Auszug der extensions.conf verwende ich als Beispiel die Rufnummer "666666". In den Prioritäten 7,9,11 und 13 warten wir auf eine Sprechpause des Anrufers. Hier konkret auf eine 1200ms lange Pause. Wem das zu kurz oder zu lang ist der kann hier den Wert ändern.

Ablauf
Der Einfachheit halber missbrauche ich die Prioritäten als Zeilennummern.
Zeile 1: 10 Sekunden klingeln lassen und mit dem Abheben warten
Zeile 2: Wenn die Rufnummer übermittelt wird zum Wählvorgang springen
Zeile 3: Zusammensetzen eines Dateinamens für unsere Aufzeichnung. Dieser besteht aus der angerufenen Extension (hier 666666), sowie dem Datum und der Uhrzeit des Anrufs.
Zeile 4: Aktivieren der Aufzeichnung im Format wav
Zeile 5: Anruf annehmen
Zeile 6-14: Infos sammeln :-)
Zeile 15: Aufzeichnung beenden
Zeile 16: Dem Anrufer mitteilen dass wir keine Anrufe ohne Rufnummer wollen und ihm die Möglichkeit geben eine Rufnummer einzugeben
Zeile 17: Protokollmeldung für den PrivacyManager
Zeile 18: Ab in den Abuse-Abschnitt
Zeile 19: Das SIP-Telefon mit der Nummer 101 für 30 Sekunden klingeln lassen
Zeile 20: Wenn das SIP-Telefon nicht abgehoben wurde weiter zum Anrufbeantworter

extensions.conf  
[default]
   
exten => 666666,1,Wait(10)
exten => 666666,2,GotoIf($["${CALLERID(num)}" != ""]?19)
exten => 666666,3,Set(CALLFILENAME=${EXTEN}-${STRFTIME(,,NaVM)})
exten => 666666,4,Monitor(wav:${CALLFILENAME},m)
exten => 666666,5,Answer()
exten => 666666,6,Playback(uct-hallo)
exten => 666666,7,WaitForSilence(1200)
exten => 666666,8,Playback(uct-hallo-wer-ist-da)
exten => 666666,9,WaitForSilence(1200)
exten => 666666,10,Playback(uct-ich-verstehe-schlecht)
exten => 666666,11,WaitForSilence(1200)
exten => 666666,12,Playback(uct-um-was-geht-es)
exten => 666666,13,WaitForSilence(1200)
exten => 666666,14,Playback(uct-ich-verbinde)
exten => 666666,15,StopMonitor
exten => 666666,16,PrivacyManager()
exten => 666666,17,NoOp(privacymgrstatus ist .:${PRIVACYMGRSTATUS}:.)
exten => 666666,18,GotoIf($["${PRIVACYMGRSTATUS}" = "FAILED"]?abuse1,1');
exten => 666666,19,Dial(SIP/101|30|n)
exten => 666666,20,Voicemail(101)
 
Im Debug-Log von Asterisk sieht das dann in etwa so aus:

 
    -- Accepting voice call from '' to '666666' on channel 0/1, span 1
   
    -- Executing Set("Zap/1-1", "CALLFILENAME=666666-Sun Oct 11 13:22:55 2009")
   
    -- Executing Monitor("Zap/1-1", "wav:666666-Sun Oct 11 13:22:55 2009,m")
   
    -- Executing Answer("Zap/1-1", "")
   
    -- Executing Playback("Zap/1-1", "uct-hallo")
   
    -- <Zap/1-1> Playing 'uct-hallo' (language 'de')
   
    -- Executing WaitForSilence("Zap/1-1", "1200")
   
    -- Waiting 1 time(s) for 1200 ms silence with 0 timeout
   
    -- Exiting with 1200ms silence >= 1200ms required
   
    -- Executing Playback("Zap/1-1", "uct-hallo-wer-ist-da")
   
    -- <Zap/1-1> Playing 'uct-hallo-wer-ist-da' (language 'de')
   
    -- Executing WaitForSilence("Zap/1-1", "1200")
   
    -- Waiting 1 time(s) for 1200 ms silence with 0 timeout
   
    -- Exiting with 1200ms silence >= 1200ms required
   
    -- Executing Playback("Zap/1-1", "uct-ich-verstehe-schlecht")
   
    -- <Zap/1-1> Playing 'uct-ich-verstehe-schlecht' (language 'de')
   
    -- Executing WaitForSilence("Zap/1-1", "1200")
   
    -- Waiting 1 time(s) for 1200 ms silence with 0 timeout
   
    -- Exiting with 1200ms silence >= 1200ms required
   
    -- Executing Playback("Zap/1-1", "uct-um-was-geht-es")
   
    -- <Zap/1-1> Playing 'uct-um-was-geht-es' (language 'de')
   
    -- Executing WaitForSilence("Zap/1-1", "1200")
   
    -- Waiting 1 time(s) for 1200 ms silence with 0 timeout
   
    -- Exiting with 1200ms silence >= 1200ms required
   
    -- Executing Playback("Zap/1-1", "uct-ich-verbinde")
   
    -- <Zap/1-1> Playing 'uct-ich-verbinde' (language 'de')
   
    -- Executing StopMonitor("Zap/1-1", "")
   
    -- Executing PrivacyManager("Zap/1-1", "")
   
    -- <Zap/1-1> Playing 'privacy-unident' (language 'de')
   
    -- <Zap/1-1> Playing 'privacy-prompt' (language 'de')
   
    -- <Zap/1-1> Playing 'privacy-thankyou' (language 'de')
   
    -- Changed Caller*ID to 01515115151, callerpres to 35
   
    -- Executing NoOp("Zap/1-1", "privacymgrstatus ist .:SUCCESS:.")
   
    -- Executing Dial("Zap/1-1", "SIP/sip101|30|n")
   
    -- Called sip101
   
    -- SIP/sip101-081e7388 is ringing
   
    -- Channel 0/1, span 1 got hangup request, cause 16
   
  == Spawn extension (default, 666666, 15) exited non-zero on 'Zap/1-1'
   
    -- Hungup 'Zap/1-1'
 

Die aufgenommenen Wave-Files liegen dann zur weiteren Verwendung unter /var/spool/asterisk/monitor.