.titleBar { margin-bottom: 5px!important; }

[HOWTO] Freiminuten abtelefonieren, dann Provider wechseln

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von TinTin, 11 Okt. 2005.

  1. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    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:

  2. rollo

    rollo IPPF-Promi

    Registriert seit:
    5 Juli 2004
    Beiträge:
    8,281
    Zustimmungen:
    1
    Punkte für Erfolge:
    38
    Ort:
    JO30SK
    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:
     
  3. tallman0815

    tallman0815 Neuer User

    Registriert seit:
    17 Aug. 2004
    Beiträge:
    77
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    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
     
  4. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Auf der Systemconsole als root "crontab -e" eingeben

    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.
     
  5. tallman0815

    tallman0815 Neuer User

    Registriert seit:
    17 Aug. 2004
    Beiträge:
    77
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Hallo,

    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
     
  6. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  7. tallman0815

    tallman0815 Neuer User

    Registriert seit:
    17 Aug. 2004
    Beiträge:
    77
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    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
     
  8. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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:

  9. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
     
  10. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  11. tallman0815

    tallman0815 Neuer User

    Registriert seit:
    17 Aug. 2004
    Beiträge:
    77
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Ok, jetzt hab ich es verstanden, Danke an alle.

    talli
     
  12. revki

    revki Neuer User

    Registriert seit:
    12 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  13. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  14. revki

    revki Neuer User

    Registriert seit:
    12 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  15. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #15 TinTin, 9 Jan. 2006
    Zuletzt bearbeitet: 9 Jan. 2006
    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
     
  16. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    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 :!:
     
  17. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @beta

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

    Gruß,
    Tin
     
  18. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    @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.
     
  19. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.

    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
     
  20. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    #20 betateilchen, 9 Jan. 2006
    Zuletzt bearbeitet: 9 Jan. 2006
    :?: :crazy: :!:
    [hr]x[/hr]
    Zur 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.