Freiminuten abtelefonieren dann Providerwechsel

Da z.B. T-Online 120 Freiminuten für Telefonie bei DSL 2000 mit classic flat anbietet, stellte sich mir die Frage, wie ich diese voll ausschöpfen kann ohne über das Ziel hinauszuschiessen, denn DSL Telefonie via T-Online ist ansonsten vom Preis her nicht konkurrenzfähig…

Die folgende Methode ist quick & dirty zusammengeschrieben, funktioniert aber gut bei mir. Verbesserungsvorschläge sind willkommen.

Fragen zu dieser Dialplanerweiterung werden vom Autor in dessen Forum gerne beantwortet.

1. Vorbereitung der Asterisk Datenbank

Da in meiner Lösung die Asterisk interne Datenbank benutzt wird, muß zunächst einmalig ein Key erzeugt werden. Auf der Linux Shell eintippen:

asterisk -rx „database put tonline minutes 120“

Die 120 ggf. ersetzen mit den tatsächlich noch verbliebenen Freiminuten des aktuellen Abrechnungszeitraums.

2. Crontab Eintrag

Am 16. jeden Monats beginnt bei mir ein neuer Telekom/T-Online Abrechnungszeitraum (keine Ahnung ob das bei jedem so ist), ab dem ich dann wieder erneut 120 Freiminuten habe. Via Crontab (Tipp von betateilchen) läßt sich das gut realisieren, Datei crontab im Verzeichnis /etc/ editieren und folgende Zeile hinzufügen:

0 1 16 * * root asterisk -rx „database put tonline minutes 120“ > /dev/null

root ggf. ersetzen mit dem usernamen unter dem Asterisk bei Euch läuft. Die 16 ist der 1. Tag des neuen Abrechnungszeitraums bei mir.

3. ''extensions.conf'' anpassen

Im Beispiel erfolgt vor dem Gespräch eine Ansage, wieviel Freiminuten noch verfügbar sind, sollte die Gesprächsdauer die Grenze erreichen, erfolgt 30 Sek. vorher eine Warnung und dann wird das Gespräch beendet. Wer das nicht möchte, kann den Dialstring ändern (L(${FREEMS},${FREEW} rausnehmen). Es wird automatisch auf volle Minuten hochgerundet, da von T-Online keine Abrechnung im Sekunden- sondern im Minutentakt vorgenommen wird.

Version für Asterisk 1.0.x

extensions.conf

exten => _0[2-9].,1,DBGet(FREEMINUTES=tonline/minutes)
exten => _0[2-9].,2,GotoIf($[${FREEMINUTES} > 0]?3:12)
exten => _0[2-9].,3,SetVar(SCHALTER=1)
exten => _0[2-9].,4,SetCIDNumber(032xxxxxxxxx)
exten => _0[2-9].,5,SetLanguage(de)
exten => _0[2-9].,6,PlayBack(noch)
exten => _0[2-9].,7,SayNumber(${FREEMINUTES})
exten => _0[2-9].,8,PlayBack(minuten)
exten => _0[2-9].,9,SetVar(FREEMS=$[${FREEMINUTES} * 60000])
exten => _0[2-9].,10,SetVar(FREEW=$[${FREEMS} - 30000])
exten => _0[2-9].,11,Dial(SIP/${EXTEN}@t-online,60,tr,L(${FREEMS}:${FREEW})) 
exten => _0[2-9].,12,SetVar(SCHALTER=0)
exten => _0[2-9].,13,Dial(SIP/0049${EXTEN:1}@AlternativProvider,60)
exten => _0[2-9].,14,Congestion
exten => _0[2-9].,102,Busy
 
exten => h,1,GotoIf($[${SCHALTER} = 1]?2:8)
exten => h,2,SetVar(CTIME1=$[${ANSWEREDTIME} + 59])
exten => h,3,SetVar(CTIME2=$[${CTIME1} / 60])
exten => h,4,DBGet(FREEMINUTES=tonline/minutes)
exten => h,5,SetVar(FREIMINUTEN=$[${FREEMINUTES} - ${CTIME2}])
exten => h,6,DBPut(tonline/minutes=${FREIMINUTEN})
exten => h,7,SetVar(SCHALTER=0)
exten => h,8,Hangup

Version für Asterisk 1.2.x (geänderte Syntax gegenüber 1.0.x)

extensions.conf

exten => _0[2-9].,1,Set(FREEMINUTES=${DB(tonline/minutes)})
exten => _0[2-9].,2,GotoIf($[${FREEMINUTES} > 0]?3:12)
exten => _0[2-9].,3,Set(SCHALTER=1)
exten => _0[2-9].,4,Set(CallerID(number)=032xxxxxxxxx)
exten => _0[2-9].,5,Set(LANGUAGE()=de)
exten => _0[2-9].,6,PlayBack(noch)
exten => _0[2-9].,7,SayNumber(${FREEMINUTES})
exten => _0[2-9].,8,PlayBack(Minuten)
exten => _0[2-9].,9,Set(FREEMS=$[${FREEMINUTES} * 60000])
exten => _0[2-9].,10,Set(FREEW=$[${FREEMS} - 30000])
exten => _0[2-9].,11,Dial(SIP/${EXTEN}@t-online,60,tr,L(${FREEMS}:${FREEW})) 
exten => _0[2-9].,12,Set(SCHALTER=0)
exten => _0[2-9].,13,Dial(SIP/0049${EXTEN:1}@AlternativProvider,60)
exten => _0[2-9].,14,Congestion
exten => _0[2-9].,102,Busy
 
exten => h,1,GotoIf($[${SCHALTER} = 1]?2:8)
exten => h,2,Set(CTIME1=$[${ANSWEREDTIME} + 59])
exten => h,3,Set(CTIME2=$[${CTIME1} / 60])
exten => h,4,Set(FREEMINUTES=${DB(tonline/minutes)})
exten => h,5,Set(FREIMINUTEN=$[${FREEMINUTES} - ${CTIME2}])
exten => h,6,Set(DB(tonline/minutes)=${FREIMINUTEN})
exten => h,7,Set(SCHALTER=0)
exten => h,8,Hangup

4. Hinweise

  • In den Codebeispielen muß 032xxxxx mit der eigenen Nummer ersetzt werden, sowie AlternativProvider mit dem eigenen alternativen VoIP Provider, der benutzt werden soll, wenn die Freiminuten verbraucht sind.
  • Es sollte ein deutsches Soundpaket in /var/lib/asterisk/sounds/de installiert sein, welches man z.B. hier bekommt. Zusätzlich die Datei sounds.zip nach /var/lib/asterisk/sounds/de extrahieren.
  • Sollte crontab nicht vorhanden sein, als user root auf der Linux Shell einmal crontab -e eingeben
  • Bei weiteren extensions im gleichen Abschnitt des Dialplans (z.B. für internationale oder Mobiltelefonnummer) ein SetVar(SCHALTER=0) (Asterisk 1.0.x) bzw. Set(SCHALTER=0) (ab Asterisk 1.2.0) einbauen.

Viel Spaß mit dieser Dialplan Erweiterung!

Auszug aus Tipps & Tricks für Asterisk

TinTin TinTin (at) voipsurfer.net

 
software/asterisk/freiminuten.txt · Zuletzt geändert: 2006/02/14 19:02 von TinTin
 
Impressum
Recent changes RSS feed Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki