- Mitglied seit
- 6 Mai 2004
- Beiträge
- 1,864
- Punkte für Reaktionen
- 0
- Punkte
- 0
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.
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.09
Version für Asterisk >= 1.20 (geänderte Syntax gegenüber 1.09)
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 an dieses posting angehängt 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.09) bzw. Set(SCHALTER=0) (ab Asterisk 1.20) einbauen.
[Edit 20.11.05]
Version für Asterisk 1.20 hinzugefügt. Beispiel um Ansage "Sie haben noch" +Zahl +"Minuten" erweitert. Hinweise ergänzt. Sounds.zip mit noch.gsm und minuten.gsm angehängt.
hth,
Tin
Die folgende Methode ist "quick & dirty" zusammengeschrieben, funktioniert aber gut bei mir. Verbesserungsvorschläge sind willkommen.
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.09
Code:
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.20 (geänderte Syntax gegenüber 1.09)
Code:
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 an dieses posting angehängt 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.09) bzw. Set(SCHALTER=0) (ab Asterisk 1.20) einbauen.
[Edit 20.11.05]
Version für Asterisk 1.20 hinzugefügt. Beispiel um Ansage "Sie haben noch" +Zahl +"Minuten" erweitert. Hinweise ergänzt. Sounds.zip mit noch.gsm und minuten.gsm angehängt.
hth,
Tin