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

Least Cost Routing komplett!

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von allesOK, 10 Feb. 2005.

  1. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo!

    Lang ersehnt haben viele bestimmt schon das LCR. Mir ist es endlich gelungen zusammen mit Harald Becker vom telefon-sparbuch.de eine (Beta-)Version meines LCR-Tools fuer den * zu veroeffentlichen.

    Einige Schritte:
    1) http://www.telefon-sparbuch.de/tmpl/calc/telephone/lcr/info/asterisk.htm durchlesen (teilweise Englisch)
    2) Tool dort runter laden und die Dateien in eure entsprechenden Verzeichne kopieren
    3) Konfig hier http://www.telefon-sparbuch.de/tmpl/calc/telephone/lcr/Asterisk/calc_tk.htm?TKANLAGE_BASE=Asterisk erstellen und abspeichern.
    4) tsblcrupdate einmal laufen lassen und wie in 1) beschrieben cronjob aufsetzen! Maximal drei mal am Tag!!!! Sonst bricht der tsb-Server zusammen!!!!
    5) Macro aus extensions.tsblcr einbinden. D.h. Variablen entsprechend setzen und in eurem Outgoing-Kontext das Dial-Kommanda durch den Makro-Aufruf ersetzen!!!
    6) Viel Spass!

    [7) 'Restart' ist nur ein nettes Gimmick. Damit koennt ihr nach dem Anruf noch ne weitere Aktion durchfuehren zb sich nochmal einen Dialtone geben lassen .... am besten wartet ihr noch ein paar Tage, dann veroeffentliche ich noch mehr).]

    vg Eric

    Coming next:
    a) user.conf -> so behaltet ihr den Ueberblick ueber eure Accounts/MSN. Zum Beispiel kann man fuer jeden User eine eigene tsblcr.routing anlegen *g*.
    b) Line-Select reloaded (in memoriam meines alten Threads!)
    c) Callback'n'through: Mit callback.conf, d.h. spezielles Verhalten fuer vordefinierte CallerIDs, allow unknown callerid?, allow no callerid? Im letzeren Fall, mit der Aufforderung nach Passwort eine Callback Nummer einzugeben. Funktioniert auch mit Sip-Providern!!!
    d) noch aufgefallen: ENUM *g*

    Also seid gespannt!
     
  2. CrazyMan

    CrazyMan Neuer User

    Registriert seit:
    10 Feb. 2005
    Beiträge:
    11
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Dipl.- Ing. Maschinenbau
    Hallo,

    Also ich hab das jetzt mal probiert, aber kann es sein das da so nen denkfehler im update script ist? weil wenn ich das ja richtig verstehe, dann suchst du dir das workdirectory und setzt es mit dem eingabepath zusammen. Das ist ja dann doppeltgemoppelt und der pfad stimmt nicht mehr und somit kann er auch nicht die leserechte überprüfen.

    es reicht ja wenn man den absoluten pfad beim starten angibt.
    gruss
    Tobias
     
  3. jui

    jui Mitglied

    Registriert seit:
    18 Dez. 2004
    Beiträge:
    229
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @"Asterisk-Pro" ;-)

    Also steht der dazu passende komplette und überarbeitete Dialplan mit "Benutzerverwaltung" kurz vor dem Release? Ich kann es kaum noch warten, LCR ist für mich nur ein Add-On, aber auf diesen Dialplan bin ich echt gespannt :)

    Gruß,

    Jui
     
  4. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ja auch der Dialplan steh kurz vor der release - muss noch was mit call-placing testen. Ich denke, es dauert nicht mehr so lange ... 1-10 Tage *g*

    @crazyman: Ja das stimmt, das war auch das letzte, was ich kurz vor der Release noch machen musste. Das Problem ist, das relative Pfade auch dann stimmen muessen, wenn das Skript als cronjob ausgefuehrt wird. Wobei man dort am besten sowieso den absoluten Pfad (wie im Beispiel) eingibt. Hast du die korrekt Loesung schon eingebaut? Herschicken und ich uebernehme es. Funktioniert es denn bei dir nicht? Ich hatte keine Probleme ...

    Fragen bitte wenn es geht hier im Forum diskutieren!
     
  5. CrazyMan

    CrazyMan Neuer User

    Registriert seit:
    10 Feb. 2005
    Beiträge:
    11
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Dipl.- Ing. Maschinenbau
    Hallo allesOK,

    also ich hab halt einfach den schnick schnack weggemacht;)

    $configfile = $argv[1];
    $routingfile = $argv[2];


    gruss
    Tobias
     
  6. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Achtung, dann musst du aber immer, den absoluten Pfad angeben!
     
  7. CrazyMan

    CrazyMan Neuer User

    Registriert seit:
    10 Feb. 2005
    Beiträge:
    11
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Dipl.- Ing. Maschinenbau
    hallo,

    ja das ist klar,
    wenn man das umgehen will muss man halt ne abfrage machen ob das erste zeichen von den arg nen "/" ist ... und damit wäre es gegessen ... aber man gibt sowiso immer absolute pfade an von demher ..
    es beisst sich atm eh mit deiner beschreibung ;) weil wenn mans eben so macht wie du es erklärt hast geht es nicht ;)

    andere frage .. warum ist die ganze erklärung auf english? ist das teil auch für english sprachige interresant? man bekommt ja nur LCR für deutschland oder ?
     
  8. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Englisch: Liegt daran, dass ich eigentlich sehr viel auf Englisch mache... Aber die Schritte oben und zusammen mit den Dateien sollten eigentlich ausreichen. Wo ist es weniger intuitiv? Ich denke, es ist noch nicht die Endversion!
     
  9. elmar69

    elmar69 Neuer User

    Registriert seit:
    17 Jan. 2005
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich hab den LCR ausprobiert, in extensions.tsblcr mußte ich Zeile 120 ändern, damit bei mir per Capi rausgewählt werden kann:

    exten => pstn,10,Dial(${ARG5}:${CBC}${ARG1},,Tt${ROPT})

    (":" statt "/").

    Wie funktioniert das mit dem Fallback? Währe interessant, da der billigste Provider oft überlaufen ist, wenn dann automatisch der zweite gewählt würde, könnte man sich viel ärger sparen.
     
  10. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Du kannst das auf der Webseite einstellen, wir oft der erste Provider versucht werden soll. Ist dieser belegt, kannst du auf Fallback zurueckgreifen. Dann wird der zweite Provider eine bestimmte Anzahl oft versucht. Und dann kannst du festlegen, ob abgebrochen wird, oder ob dein preselection anbieter genutzt werden soll (keine Vorwahl).

    Der Preselection Provider wird auch immer bei Sonderrufnummern genutzt. Und wenn du XXL hast, wird auch nichts vorgewaehlt an den XXL Tagen.

    Danke fuer den CAPI-Tip. Ich werde es einbauen!
     
  11. CrazyMan

    CrazyMan Neuer User

    Registriert seit:
    10 Feb. 2005
    Beiträge:
    11
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Dipl.- Ing. Maschinenbau
    hallo,

    also ich wollte das script jetzt grad mal vom shell aus starten ... da kommen ne menge fehlermeldungen .. ist das normal ?

    Code:
    ./tsblcr.agi /etc/asterisk/lcr/tsblcr.routing 0173987xxxx
    PHP Notice:  Use of undefined constant STDIN - assumed 'STDIN' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 318
    PHP Notice:  Use of undefined constant STDOUT - assumed 'STDOUT' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 319
    PHP Notice:  Use of undefined constant STDERR - assumed 'STDERR' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 320
    PHP Warning:  fputs(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 323
    PHP Warning:  fflush(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 324
    PHP Warning:  fgets(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 328
    PHP Notice:  Use of undefined constant STDIN - assumed 'STDIN' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 318
    PHP Notice:  Use of undefined constant STDOUT - assumed 'STDOUT' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 319
    PHP Notice:  Use of undefined constant STDERR - assumed 'STDERR' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 320
    PHP Warning:  fputs(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 323
    PHP Warning:  fflush(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 324
    PHP Warning:  fgets(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 328
    PHP Notice:  Use of undefined constant STDIN - assumed 'STDIN' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 318
    PHP Notice:  Use of undefined constant STDOUT - assumed 'STDOUT' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 319
    PHP Notice:  Use of undefined constant STDERR - assumed 'STDERR' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 320
    PHP Warning:  fputs(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 323
    PHP Warning:  fflush(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 324
    PHP Warning:  fgets(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 328
    PHP Notice:  Use of undefined constant STDIN - assumed 'STDIN' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 318
    PHP Notice:  Use of undefined constant STDOUT - assumed 'STDOUT' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 319
    PHP Notice:  Use of undefined constant STDERR - assumed 'STDERR' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 320
    PHP Warning:  fputs(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 323
    PHP Warning:  fflush(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 324
    PHP Warning:  fgets(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 328
    PHP Notice:  Use of undefined constant STDIN - assumed 'STDIN' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 318
    PHP Notice:  Use of undefined constant STDOUT - assumed 'STDOUT' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 319
    PHP Notice:  Use of undefined constant STDERR - assumed 'STDERR' in /var/lib/asterisk/agi-bin/tsblcr.agi on line 320
    PHP Warning:  fputs(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 323
    PHP Warning:  fflush(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 324
    PHP Warning:  fgets(): supplied argument is not a valid stream resource in /var/lib/asterisk/agi-bin/tsblcr.agi on line 328
    Edit von Christoph: Bitte an die "Code"-Funktion denken. :)
     
  12. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hmm gute Frage. Welche PHP-Version hast du denn?

    Bei mir laeuft diese: PHP 4.3.8-12 (cli) (built: Sep 6 2004 05:46:13)
     
  13. CrazyMan

    CrazyMan Neuer User

    Registriert seit:
    10 Feb. 2005
    Beiträge:
    11
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Dipl.- Ing. Maschinenbau
    PHP 4.3.10 (cgi) (built: Dec 21 2004 10:27:48)
    Copyright (c) 1997-2004 The PHP Group
    Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
     
  14. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hast du auch das CLI von php installiert? Bei mir steht (cli) dabei, bei dir (cgi).
     
  15. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @elmar:

    schau mal ich habe in extensions.tsblcr den pstn-Teil aufgebohrt:

    Code:
    ; pstn
    exten => pstn,1,SetCIDNum(${ARG3})
    exten => pstn,2,SetCIDName(${ARG4})
    exten => pstn,3,GotoIf($["${ARG5}" = "CAPI"]?4:6)
    exten => pstn,4,SetVar(PSTNTRUNK=CAPI/${ARG3}:b)
    exten => pstn,5,Goto(7)
    exten => pstn,6,SetVar(PSTNTRUNK=${ARG5}/)
    exten => pstn,7,GotoIf($["${CBC}" = "preselection"]? 20 : 10)
    exten => pstn,10,Dial(${PSTNTRUNK}${CBC}${ARG1},,Tt${ROPT})
    exten => pstn,11,Goto(ds-${DIALSTATUS},1)
    exten => pstn,111,Goto(ds-${DIALSTATUS},1)
    exten => pstn,211,Goto(ds-${DIALSTATUS},1)
    exten => pstn,20,Dial(${PSTNTRUNK}${ARG1},,Tt${ROPT})
    exten => pstn,21,Goto(ds-${DIALSTATUS},1)
    exten => pstn,121,Goto(ds-${DIALSTATUS},1)
    exten => pstn,221,Goto(ds-${DIALSTATUS},1)
    
    Es reicht dann als TRUNK den Wert "CAPI" zu setzen. Der Rest wird dann gebaut. Hab leider selbst keine CAPI, vllt kannst du es ja mal probieren und mir Feedback geben!
     
  16. glotzi

    glotzi Neuer User

    Registriert seit:
    26 Nov. 2004
    Beiträge:
    72
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hat den Fallback mal jemand ausprobiert? Bei mir scheint es nicht zu funktionieren. Falls der CbC-Provider busy ist, gibts nur tutut. :(
     
  17. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Bei mir klappt es, aber ich werde es nochmal ueberpruefen. Ich baue mal ezu Testzwecken eine Ansage rein, die mir sagt, welchen Provider ich gerade teste.
     
  18. MarcoB

    MarcoB Neuer User

    Registriert seit:
    24 Dez. 2004
    Beiträge:
    189
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo AllesOK!

    Also was Du da auf die Beine gestellt hast ist echt ne Super Sache. Man kann ja zum rauswählen auch SIP Provider nutzen. Wie müsste ich das ganze denn konfigurieren, so dass private Anrufe (Line1) z.B. immer über "sip-privat" und geschäftliche Anrufe (Line2) immer über "sip-gesch" rausgehen? Bzw. geht das überhaupt? Hier wäre es spitze, falls das noch nicht geht, wenn man die Sip-Provider irgendwie noch den internen MSN's am S0 Bus zuweisen könnte. Ansonsten gibts Probleme mit dem Finanzamt, wenn alle Privatgespäche übers Geschäft laufen ;-)

    Gruß,

    Marco
     
  19. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ja, du kannst es trennen. Du musst halt zwei Konfigurationen bei tsb.de erstellen (wo halt einmal sip-gesch und einmal sip-privat bei z.b. sipgate steht) und dann auch zwei Routings per cronjob runterladen.

    Beim Makroaufruf selbst kannst du angeben, welche Routing-Datei verwendert werden soll. Jetzt musst du nur noch im Dialplan sicherstellen, dass zu deiner MSN (PRI_NETWORK_CID od. CALLERIDNUM) die richtige Routing-Datei genwaehlt wird. Am Wochenende werde ich wohl meine Nutzerverwaltung und einen erweiterten Dialplan veroeffentlichen. Dann bekommst du alles "frei Haus".
     
  20. MarcoB

    MarcoB Neuer User

    Registriert seit:
    24 Dez. 2004
    Beiträge:
    189
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ok! Ich denke dann werde ich einfach noch bis zum Wochenende abwarten, um nicht alles 2 mal machen zu müssen ;-)

    Marco