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.
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.
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.
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.
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
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
032xxxxx mit der eigenen Nummer ersetzt werden, sowie AlternativProvider mit dem eigenen alternativen VoIP Provider, der benutzt werden soll, wenn die Freiminuten verbraucht sind./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.crontab nicht vorhanden sein, als user root auf der Linux Shell einmal crontab -e eingebenSetVar(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