Aus Linux-Magazin 12/2008

Praxiserprobte Asterisk-Tricks zum Gebührensparen

© boing, Photocase.com

Daheim ist's am schönsten – zumindest was die Telefongebühren angeht. Quasselstrippen, die beruflich oder privat viel im Ausland unterwegs sind, kommen finanziell trotzdem nicht unter die Räder – wenn sie ihrem heimischen Asterisk-Server ein paar Tricks beibringen.

Seit dem 30. August gilt für das Auslandsroaming in der EU die zweite Stufe einer Verordnung, die die Gebühren für Anrufe aus dem Ausland in jedes Fest- und Handynetz auf maximal 54,74 Cent pro Minute begrenzt. Eingehende Telefonate dürfen höchstens 26,18 Cent kosten. Das ist zwar viel weniger als früher, für reisende Vieltelefonierer aber noch immer heftig. Ein Asterisk-Server zu Hause kann helfen die Reisekasse zu schonen.

Eine Möglichkeit ist Callback: Der Auslandsreisende wählt eine Telefonnummer an, die sein Asterisk bedient. Der Autor dieses Artikels benutzt dazu eine seiner zehn Rufnummern (MSNs), die ihm die Deutsche Telekom mit dem ISDN-Anschluss zugeteilt hatte. Bekommt Asterisk von einer privilegierten Nummer, beispielsweise dem eigenen Handy, einen Anruf, dann lehnt es ihn initial ab, um innerhalb weniger Sekunden zurückzurufen. Anrufe von nicht privilegierten Nummern lösen kein Callback aus. Da Asterisk den eingehenden Anruf zwar wahrnimmt, aber nicht beantwortet, entstehen keine Gebühren.

Zimmer mit Durchwahl

Der automatische Rückruf erfolgt entweder zum Handy zurück oder zu einem anderen Ziel, beispielsweise zum Hotelzimmer, wenn es per Durchwahl erreichbar ist. Ein solcher Festnetzanruf entwickelt einen besonderen Charme, wenn die VoIP-Flatrate zu Hause ausländische Festnetze einschließt. Dann ist ein Rückruf dorthin kostenlos und Weihnachtsgrüße aus dem Skiurlaub bleiben nicht auf die Erbtante beschränkt. Zumindest nicht aus Gebührengründen.

Erfolgt der Rückruf hingegen zum Handy, dann entstehen Kosten für den im Ausland ankommenden Anruf von etwa 26 Cent pro Minute. Hinzu kommen Gebühren für den Anruf ins Handynetz, das sind mit Call-by-Call-Provider über eine Telekom-ISDN-Leitung 9 bis 10 Cent je Minute. Die Summe von rund 35 Cent spart rund ein Drittel gegenüber einem direkten Handyanruf aus einem EU-Land, der den Autor pro Minute 54 Cent kosten würde. Für USA-Reisende lohnt sich Callback zum Handy allemal, denn die Gesamtkosten betragen rund 80 Cent pro Minute statt 1,49 Euro. Ein Hotelzimmer-Callback per Asterisk mit dem VoIP-Provider des Autors ist gar für konkurrenzlose 2,3 Cent zu haben.

Das Verfahren ist übrigens nicht nur geeignet direkt nach Hause anzurufen: Sobald nach dem automatischen Rückruf die PIN korrekt eingegeben wurde, die zur auslösenden Handynummer gehört, fragt Asterisk nach der Zielnummer und wählt anschließend wieder heraus (Dialout). Das Ziel darf eine deutsche Nummer sein oder ein Anschluss im britischen oder belgischen Festnetz, für die die VoIP-Flatrate ebenfalls gilt.

Rückruf per Callfile

Der Asterisk-Callback ist so implementiert, dass er auf der Call-in-Leitung den ankommenden Anruf registriert und ablehnt. Anschließend prüft er in seiner Ast-Datenbank, ob der Anrufer privilegiert war den Service zu benutzen. Im Positivfall startet er ein Perl-AGI-Skript, das ein Callfile wie in Listing 1 zum Auslösen des Rückrufs erzeugt.

Listing 1:
Callback-Callfile

01 # Dial parameters, including destination number and channel type
02 Channel:    SIP/004419999999@sipgate0
03 
04 # Call parameters
05 WaitTime:   60
06 RetryTime:  8
07 MaxRetries: 2
08 Account:    Eitel_VoIP
09 
10 # Where to go in the dialplan, once the connection is established
11 Context:    callback
12 Extension:  callback1
13 Priority:   1
14 
15 # variables to be set for the dialplan
16 Set:        initiator_cid=491719765432

Bei der vorgestellten Implementierung gehört zu jeder anrufenden Nummer eine eigene PIN. Darum muss der Rückruf prüfen, ob die vorgezeigte PIN zur Absendernummer des Anrufers passt, die den Callback ausgelöst hat. Doch Vorsicht: Diese Nummer ist nicht zwingend identisch mit dem Rückrufziel (siehe Abschnitt “ISDN statt VoIP zum Handy”). Die Lösung besteht darin, im Callfile mit

Set: initiator_cid=491719765432

beim Rückruf eine Variable zu setzen, die der Dialplan verarbeitet, sobald der Rückgerufene den Hörer abnimmt und seine PIN eingibt. Der Variablenname »initiator_cid« ist willkürlich, muss aber im Callfile auf den gleichen Wert gesetzt sein, den die Variable »CALLERID(num)« beim Call-in hatte.

Sobald das »mv«-Kommando das Callfile, das den Rückruf auslöst, in das Spoolverzeichnis »/var/spool/asterisk/outgoing« befördert hat, wählt Asterisk innerhalb von Sekundenbruchteilen das Rückrufziel an. Das Tempo ist hier aber nicht erwünscht, denn der Rückruf kommt bereits, wenn der Anrufer noch nicht aufgelegt hat – und scheitert am Besetzt.

Eine Zeitreise bringt die Lösung: Ein »touch«-Kommando setzt vor dessen Transport in das Spoolverzeichnis die Mtime des Callfile (Zeit des letzten Schreibzugriffs) 10 bis 20 Sekunden in die Zukunft. Dies erledigt das AGI-Skript oder auch der Dialplan, wie Listing 2 zeigt. Wichtig ist die korrekte Angabe der unterschiedlichen Anführungszeichen.

Listing 2:
»extensions.conf«

01 ; Copy template
02 exten => callback_in,n,System(cd /var/lib/asterisk/agi-bin ; cp callback1.call.org callback1.call)
03 ; Put file a couple of seconds into the future
04 exten => callback_in,n,System(cd /var/lib/asterisk/agi-bin ; touch -t `date --date='+10 seconds' '+%Y%m%d%H%M.%S'` callback1.call)
05 ; Move callfile into spool directory
06 exten => callback_in,n,System(cd /var/lib/asterisk/agi-bin ; mv callback1.call /var/spool/asterisk/outgoing)

Listing 2 zeigt außerdem, wie man ohne AGI-Skript einen Rückruf auslöst, indem es ein vorbereitetes Callfile, hier »callback1.call.org«, einfach nur kopiert. Ein solches Callfile ließe sich nach dem Muster in Listing 1 erstellen.

Im Inland: Call-through

Anders als beim Callback-Verfahren nimmt Asterisk unter der Call-through-Nummer Anrufe vom Handy sofort an, authentifiziert den Anrufer per Absendernummer und zugehöriger PIN und lässt ihn dann wieder rauswählen. Da beide Router über Festnetznummern erreichbar sind, kostet den Autor der Anruf vom Handy dorthin nichts, zumindest solange er sich im Inland aufhält.

Von Asterisk in fremde Handynetze geht es dann per ISDN und Call-by-Call für 9 bis 10 Cent pro Minute weiter, in die erwähnten 14 europäischen Festnetze per VoIP-Flatrate sogar kostenlos. Damit tickt der Zähler beim Anruf vom Handy in ein fremdes Mobilfunk-Netz statt mit 25 maximal mit 10 Cent und bei ausländischen Festnetzen gar nicht. Zur Implementierung: Die Dialplan-Zeile

exten => dest_entry,n,GotoIf($[${phone_to_call}=~"^01[5-7]"]?callback_dialout_isdn,1:callback_dialout_sip,1)

erkennt Handys und benutzt einen regulären Ausdruck, der zu unterschiedlichen Zielen im Dialplan verzweigt.

ISDN statt VoIP zum Handy

Das Ziel »callback_dialout_isdn« wählt Mobilnummern kostensparend per Call-by-Call über ISDN an, das Ziel »callback_dialout_sip« dagegen alle Festnetz-Nummern per VoIP. »^01[5-7]« identifiziert nur deutsche Mobilnummern. Eine intelligentere Implementierung erfordert allerdings die Kenntnis ausländischer Rufnummernpläne.

Dass der Autor den Callback-Router im Ausland bald nicht mehr missen mochte, verwundert kaum. Ein Manko musste er aber beheben: Ein neues Rückrufziel konnte er anfangs nur per Notebook und SSH-Verbindung zum Asterisk-Server ändern, wozu er jedes Mal einen Hotspot ausfindig machen musste. Es lag nahe, die Umstellung des Rückrufziels per Telefon zu implementieren.

Dass der Callback-Router nie abnimmt, sondern stets zurückruft, macht die Call-in-Nummer für eine Fernkonfiguration ungeeignet. Um keine weitere MSN zu verbrauchen, bestand die Lösung darin, sowohl beim Callback-Verfahren als auch beim Call-through-Verfahren nach der PIN-Überprüfung eine Touchtone-Eingabe zuzulassen, bei der Asterisk den Anrufer zur Neukonfiguration der Rückrufnummer führt. Unterlässt er die Eingabe, dann geht es nach 2 Sekunden wie beschrieben weiter.

Aus Sicherheitsgründen lässt sich die Nummer des Handys, das den Callback auslöst, nicht per Telefon ändern. Denn andernfalls dürften nach einer Fehleingabe wildfremde Leute auf Kosten des Asterisk-Betreibers telefonieren. Wer sich jedoch bei der Konfiguration für das Callback-Verfahren versehentlich mit einer untauglichen Rückrufnummer ausgesperrt hat, der ruft eben nochmals unter der Call-through-Nummer an und macht einen zweiten Konfigurations-Anlauf für das Callback-Verfahren.

Cent-Fuchser, Vieltelefonierer oder echte Asterisk-Fans, die die vorgestellten Tricks umsetzen, sollten künftig bei der Auswahl eines Hotels ein weiteres Kriterium beachten: Ihr Zimmer muss per Durchwahl erreichbar sein. (jk)

Der Autor


Eitel Dignatz ist Strategieberater und Inhaber der Firma Dignatz Consulting in München: [http://www.dignatz.de/spot457]

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 2 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben