[HOWTO] Freiminuten abtelefonieren, dann Provider wechseln

TinTin

Aktives Mitglied
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

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
 

Anhänge

  • sounds_181.zip
    2.7 KB · Aufrufe: 114
Dann kann ich ja auch endlich mal die Freiminuten aus der Nutella Aktion abtelefonieren ;) Das geht leider immer nur bis max. 60 aufzuladen.

Auf jeden Fall mal ein Wichtig! von mir :idea:
 
Hallo,

bei mir gibts es unter /etc/ keine crontab-Datei. Kann mir da jemand helfen, der Asterisk läuft auf einem EIS.
Ich würde den Code gern in meine Config einbauen, verstehe aber nicht wie die Minuten runtergezählt werden, kann mir das vieleicht jemand in 2 Worten erklären.

schonmal Danke
talli
 
bei mir gibts es unter /etc/ keine crontab-Datei.

Auf der Systemconsole als root "crontab -e" eingeben

verstehe aber nicht wie die Minuten runtergezählt werden, kann mir das vieleicht jemand in 2 Worten erklären.

Die verbleibenden Freiminuten werden in der Asterisk-Datenbank gespeichert. Nach jedem Telefonat wird die auf volle Minuten gerundete Gesprächsdauer von diesem Bestand abgezogen und der neue Bestand an Freiminuten in die Datenbank zurückgeschrieben.
 
Hallo,

Auf der Systemconsole als root "crontab -e" eingeben
Danke, das wars. :)

Ich meinte welche Code-Zeilen das machen, denke mal das es der 2.Abschnitt ist (exten => h,1 ....) . Verstehe nur nicht wo im 1.Teil der Befehl steht, dass er den 2.Teil ausführen soll. :gruebel:

talli
 
im ersten Teil wird Schalter auf 1 gesetzt, wenn noch Freiminuten vorhanden sind:

exten => _0[2-9].,3,SetVar(SCHALTER=1)

Wenn nicht, ist Schalter=0

im zweiten Teil wird Schalter abgeprüft:
exten => h,1,GotoIf($[${SCHALTER} = 1]?2:8)
...
...

Der "zweite" Teil wird nach jedem Gespräch automatisch ausgeführt, in "h" springt jedes Gespräch nachdem aufgelegt wurde, das ist so in Asterisk.

Du solltest also für weitere extensions in diesem Abschnitt Deines Dialplans immer ein Schalter=0 einbauen, geht zwar auch ohne, dann kommt nur immer eine kleine Fehlermeldung auf der CLI, weil Asterisk dann die Variable Schalter ja nicht kennt.
 
mmh, aber wieso wird der 2.Teil überhaupt ausgeführt. Da müsste doch im 1.Teil sowas wie Goto h stehen oder wie ???

Mit SayNumber(${FREEMINUTES}) lasse ich mir die noch vorhanden Freiminuten ansagen. Ich wollte noch das Asterisk "Minuten" dahinter sagt. Habe es mit SayAlpha(Minuten) versucht, aber * sagt die Buchstaben einzeln, was mach ich falsch ?

thx talli
 
talli, lies mein vorheriges posting nochmal, habe es ergänzt.

Bei mir sieht das jetzt mittlerweile so aus:

.... PlayBack(noch)
.... SayNumber(${FREEMINUTES})
.... PlayBack(Minuten)


noch.gsm und minuten.gsm hängen hier an in sounds.zip, dieses in /var/lib/asterisk/sounds bzw. /var/lib/asterisk/sounds/de extrahieren.

Nicht vergessen die Sprungadresse zu ändern, wenn Du zusätzliche Zeilen einbaust.

Gruß,
Tin
 

Anhänge

  • sounds.zip
    2.7 KB · Aufrufe: 17
Habe jetzt das erste posting in diesem Thread mit den gewonnen Erkenntnissen und Neuerungen ergänzt ( danke auch betateilchen :) ), sowie eine Syntaxkonforme Version für Asterisk ab v1.20 hinzugefügt.

Gruß,
Tin
 
Ok, jetzt hab ich es verstanden, Danke an alle.

talli
 
Verwende ich den Code so wie im ersten Posting beschrieben für meinen asterisk V.21 so kommt beim Einhängen folgende Fehlermeldung:

Jan 8 19:10:08 WARNING[30006]: ast_expr2.fl:176 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected TOK_EQ, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input:
= 1
^
Jan 8 19:10:08 WARNING[30006]: ast_expr2.fl:180 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source.

Da kann ja an der Syntax etwas nicht ganz stimmen. Habe den unteren Teil für V>=1.20 verwendet.

Grüße
FP
 
revki,

ich nehme an Du hast die Fehlermeldung bekommen, als Du über eine andere extension, also nicht _0[2-9]. raustelefoniert hast. Bei weiteren, anderen exten => ..... mußt Du jeweils ein :

exten => _01[5-7].,1,Set(SCHALTER=0)
exten => _01[5-7].,2,......

einbauen in dem context, hier als Beispiel für Mobiltelefonnummern. Asterisk kennt sonst unter "h" die Variable "SCHALTER" nicht (was aber grundsätzlich auch kein Beinbruch ist).

Gruß,
Tin
 
OK. Danke, werde das entsprechend einbauen. Den entsprechenden Hinweis hatte ich zwar gelesen aber nicht ganz verstanden. Jetzt ist es klar. Um nochmal sicher zu gehen: Wenn ich alles so lasse, kommt zwar die Fehlermeldung, aber die Minuten werden trotzdem korrekt runtergezählt. Oder nur bei den extensions die ich mit Set(SCHALTER=0) erweitert habe.

Grüße
FP.
 
Wenn Du alles so läßt, werden bei Anrufen zu Festnetznummern in Deutschland ( _0[2-9]. ) die Minuten runtergezählt.

Das kannst Du jederzeit mit dem command "database show" auf der CLI auch überprüfen, ganz unten steht dort dann tonline/minutes und die verbleibenden Minuten.

Wenn Du eine andere extension wählst (also nicht zu einer deutschen Festnetznummer) wird auch nichts runtergezählt (wieso auch, die Freiminuten gelten ja nur für deutsche Festnetznummern), nur in einem solchen Fall kommt dann halt die Fehlermeldung, Auswirkungen auf die Minuten hat sie nicht. Um die Fehlermeldung wegzubekommen das machen was ich vorher schrieb (SCHALTER=0 einfügen bei weiteren extensions, sonst nichts).

Gruß,
Tin
 
Zuletzt bearbeitet:
was ich prinzipiell nicht verstehe - wieso um alles in der Welt nutzt noch jemand das Minutenpaket von T-Online mit den 120 Minuten ? Das rechnet sich doch hinten und vorne nicht. Für 120 Minuten zahlt man 5 Euro - das entspricht einem Minutenpreis von über 4 Cent :!:
 
@beta

Lies nochmal das erste posting hier im Thread. Es handelt sich um Freiminuten für die man =nichts= bezahlt.

Gruß,
Tin
 
@TinTin das ist doch eine Milchmädchenrechnung :!:

Natürlich waren in der dsl flat für DSL2000 120 Minuten VoIP enthalten, für die ich nix bezahlen muß. Aber dafür kostet dieser Flatrate-Tarif eben auch 14,90 (oder 14,95 - haut mich nicht).

Tatsache ist doch, daß die gleiche Flatrate inzwischen für 9,90 (bzw. 9.95?) zu haben ist und mich deshalb die 120 "Frei"-Minuten 5 Euro kosten - nämlich den Differenzbetrag zwischen den beiden Flatrate-Varianten, die sich ansonsten durch nichts voneinander unterscheiden.

Das war auch der Grund, warum ich im November von der Flatrate mit den 120 Minuten zur Flatrate ohne die 120 Minuten gewechselt habe - ich fand den rechnerischen Minutenpreis einfach zu teuer.

Als ich im Oktober die Flatrate beantragt hatte, war DSL nicht ohne das Minutenpaket zu bekommen - aber man hatte (und hat auch heute noch) wenigstens die Möglichkeit, das kurzfristig zu ändern.
 
beta,

als Wächter über on- und offtopic hättest Du besser einen neuen Thread zu diesem Thema erstellen sollen. Es geht hier um das abtelefonieren von Freiminuten mit T-Online als Beispiel. Die Tarife sind hier nicht wirklich Diskussionsthema.

betateilchen schrieb:
@TinTin das ist doch eine Milchmädchenrechnung :!:

Für Dich ja, für mich (und andere) nicht - Ich habe auf die dsl flat classic für DSL 2000 im Sommer 2005 umgestellt, als eine Aktion lief, für EUR 9,95 =inkl.= der 120 Freiminuten! Die Freiminuten stehen mir (und allen anderen die das Angebot damals angenommen haben) auch weiterhin zur Verfügung. Als "Zuspätkommer" hat Dich das Leben bestraft ;)

Gruß,
Tin
 
TinTin schrieb:
beta,
als Wächter über on- und offtopic

:?: :crazy: :!:

xZur Sache selbst:

Dein Beitrag - der hier nicht in Frage steht, denn er kann auch für andere Provider mit anderen Minutenpaketen verwendet werden - ist zu einem Zeitpunkt (Mitte Oktober) entstanden, zu dem es die Flatrate inkl. 120 Minuten für 9.95 schon nicht mehr (für Neukunden) gab. Insofern ist dieser Zusammenhang hier im Thread nicht erkennbar und war mir bis heute auch nicht bekannt.

Wenn es also Leute gibt, die das Glück noch hatte, diesen Tarif zu bekommen, dann ist die Nutzung der 120 Freiminuten natürlich außer Frage gestellt.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.