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

Callback mit Asterisk über CAPI an Fritz!Box

Dieses Thema im Forum "Asterisk ISDN mit CAPI (chan_capi, chan_capi_cm)" wurde erstellt von Quetsch, 17 Juni 2005.

  1. Quetsch

    Quetsch Neuer User

    Registriert seit:
    17 Juni 2005
    Beiträge:
    11
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo!!
    Wie in Ausgabe 13/05 der ct erwähnt, möchte ich asterisk als callback server verwenden. Hiebei soll dieser eine Festnetznummer nach Lockruf von einer Handy-Nummer auf der Festnetznummer zurückrufen. Dies soll mit einer ISDN FritzCard, die via ISDN Kabel an die Fritz!Box angeschlossen ist erfolgen, da dies wegen der vorhandenen Telefonflat geschickt wäre... ;-)

    Nun habe ich mich sklavisch an die Anleitung in der ct gehalten, es kommt leider doch kein Callback zustande:
    System ist ein Suse 9.1 Kernel 2.6.5.7
    ISDN Karte ist installiert
    Asterisk als RPM installiert
    chan_capi.0.3.5 kompiliert und installiert
    Änderungen an modules.conf, extensions.conf, capi.conf und callback.agi vorgenommen.

    Hier meine callback.agi:
    Code:
    #!/usr/bin/php -q
    <?php
    ob_implicit_flush(true);
    set_time_limit(0);
    $err=fopen("php://stderr","w");
    $in = fopen("php://stdin","r");
    $out= fopen("php://stout","w");
    echo("before loop");
    while (!feof($in)) {
    echo("in loop");
    $temp = str_replace("\n","",fgets($in,4096));
    $s = split(":",$temp);
    $agi[str_replace("agi_","",$s[0])] = trim($s[1]);
    if (($temp == "") || ($temp == "\n")) {
    break;
    }
    }
    $cf = fopen("/var/spool/asterisk/outgoing/cb".$agi["callerid"],"w+");
    fputs($cf,"Channel: CAPI/@070xxxxxxx".$agi["extension"].":"$agi["callerid"]."\n");
    fputs($cf,"Context: capidialtone\n");
    fputs($cf,"Extension: s\n");
    fputs($cf,"SetVar: CALLERIDNUM=".$agi["extension"]."\n");
    fputs($cf,"MaxRetries: 2\n");
    fputs($cf,"RetryTime: 10\n");
    fclose($cf);
    fclose($in);
    fclose($err);
    ? >
    

    Asterisk reagiert eindeutig, nur auf die eingestellte eingehende MSN. Beim Lockruf vom Handy erzeugt Asterisk folgende Debug-Ausgabe:
    Asterisk Ready.
    -- creating pipe for PLCI=0x101 msn = 797302
    > sent ALERT_REQ PLCI = 0x101
    -- started pbx on channel (callgroup=0)!
    -- Executing Wait("CAPI[contr1/797302]/0", "2") in new stack
    -- Executing AGI("CAPI[contr1/797302]/0", "callback.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/callback.agi
    -- AGI Script callback.agi completed, returning 0
    -- Executing Hangup("CAPI[contr1/797302]/0", "") in new stack
    == Spawn extension (capiin, 797302, 3) exited non-zero on 'CAPI[contr1/797302]/0'
    -- CAPI Hangingup
    > sent CONNECT_RESP for PLCI = 0x101
    -- removed pipe for PLCI = 0x101

    Wer kann mir helfen?
    Bin ratlos woran es liegen könnte...
     
  2. on_the_way_with_fbf

    on_the_way_with_fbf Neuer User

    Registriert seit:
    3 Jan. 2005
    Beiträge:
    80
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi
    Interessante Thema. Ich werde das ganze nachfolgen.
     
  3. Quick

    Quick Neuer User

    Registriert seit:
    10 Juli 2005
    Beiträge:
    29
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Im Vergleich mit dem Skript aus der ct habe ich zwei Unterschiede gefunden:
    Code:
     #!/usr/bin/php -q
    <?php
    ob_implicit_flush(true);
    set_time_limit(0);
    $err=fopen("php://stderr","w");
    $in = fopen("php://stdin","r");
    $out= fopen("php://stout","w");
    echo("before loop"); /* falls DEBUG-Ausgaben gewünscht */
    while (!feof($in)) {
    echo("in loop"); /* falls DEBUG-Ausgaben gewünscht */
    $temp = str_replace("\n","",fgets($in,4096));
    $s = split(":",$temp);
    $agi[str_replace("agi_","",$s[0])] = trim($s[1]);
    if (($temp == "") || ($temp == "\n")) {
    break;
    }
    }
    $cf = fopen("/var/spool/asterisk/outgoing/cb".$agi["callerid"],"w+");
    ========>
    fputs($cf,"Channel: CAPI/".&agi["extension"].":070xxxxxxx\n");
    <========
    fputs($cf,"Context: capidialtone\n");
    fputs($cf,"Extension: s\n");
    fputs($cf,"SetVar: CALLERIDNUM=".$agi["extension"]."\n");
    fputs($cf,"MaxRetries: 2\n");
    fputs($cf,"RetryTime: 10\n");
    fclose($cf);
    fclose($in);
    =======>
    fclose($out);
    <=======
    fclose($err);
    ? >
    
    Vielleicht hängt es ja daran...
     
  4. mop-o-fon

    mop-o-fon Neuer User

    Registriert seit:
    24 Juni 2005
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    hallo,

    $out= fopen("php://stout","w");

    ist es nicht auch 'stdout' mit d ?

    davon abgesehen ist es auch eine gute idee das agi sctips mal so, also von der shell direkt laufen zu lassen, vielleicht kann es das callflie nicht schreiben.

    m.
     
  5. Andre

    Andre IPPF-Promi

    Registriert seit:
    27 Dez. 2004
    Beiträge:
    3,307
    Zustimmungen:
    4
    Punkte für Erfolge:
    38
    Beruf:
    Ingenieur
    Ort:
    Schotten
    Warum meldest Du nicht den Asterisk direkt bei 1&1 an (zur Nutzung der Phoneflat)? Mit der Fritzbox registrierst Du Dich dann auf dem Asterisk-Server im lokalen Netz - alle(!) Telefonate werden dann lokal via Intranet von der Asterisk entweder per Internet/phoneflat oder - je nach Wahlregeln - vial call-by-call. Das ganze hat den Vorteil, daß man zusätzlich einen LCR in Asterisk verwenden könnte (Handy- und Auslandstelefonate sind bei 1&1 ziemlich teuer).

    Nachteil der Lösung ist, daß die FBF S0 nicht mehr gleichzeitig der DSL-Router sein kann, sondern als ATA betrieben werden müsste. Bei der suboptimalen Qualität des eingebauten DSL-Modems empfielt sich das aber eh, aus diesem Grunde verwende ich einen anderen DSL-Router (mit VPN, Portranges und ISDN-Einwahl-Möglichkeit).

    Eigentlich sollte es aber auch gehen, Asterisk und FBF gleichzeitig direkt bei 1&1 angemeldet zu haben und die Phoneflat nutzen zu lassen. Nach außen ist es ja nur eine IP-Adresse, über die beide die Internetverbindung aufbauen.
     
  6. aha

    aha Neuer User

    Registriert seit:
    25 Aug. 2005
    Beiträge:
    52
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Dann sollte der neue Gateway jedoch auch QoS unterstützen... denn jenes würde die Fritzbox dann nicht mehr machen
     
  7. Andre

    Andre IPPF-Promi

    Registriert seit:
    27 Dez. 2004
    Beiträge:
    3,307
    Zustimmungen:
    4
    Punkte für Erfolge:
    38
    Beruf:
    Ingenieur
    Ort:
    Schotten
    Das ist richtig. Man steht halt vor der Wahl zwischen zwei Übeln...
    Bei ISDN kommt nämlich (zumindest bei meiner Lösung, McDialer an Fritz!Card hinter Fritz!Box S0) durch die blockweise Übertragung der Daten ein zusätzliches Delay hinein.
    Man muß sich mal überlegen, wo bei dieser Lösung Laufzeitverluste auftreten:
    1. Verarbeitung der SIP-Daten durch die FBF mit Wandlung SIP->ISDN
    2. Blockweise Datenübertragung im CAPI-Treiber an Asterisk
    3. Blockweise Datenübertragung im CAPI-Treiber von Asterisk
    4. Verarbeitung der SIP-Daten durch die FBF mit Wandlung ISDN-SIP
    Bleibt man hingegen durchgehend bei VoIP, fallen 2 und 3 völlig raus.
    Ich selber überlege noch, auf Asterisk umzusteigen, weil es flexibler ist (bei 10 möglichen VoIP-Anklingelnummern + ggf. weitere reine VoIP-Nummern) könnte ich mir ein System ähnlich wie bei puretel aufbauen.
     
  8. Pfingstler82

    Pfingstler82 Neuer User

    Registriert seit:
    25 Nov. 2005
    Beiträge:
    96
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Ich hab mal bei O2 zu den Tarifen was gefunden:

    http://www.o2online.de/o2/kunden/kundencenter/downloads/postpaid/postpaid-flexible-blob.pdf

    Seite 62/63 (Acrobat Reader zeigt Seite 62 (32 von 38)).

    Das ist ja dämlich. Die Rufumleitung auf eine andere Nummer von O2 ist ja kostenlos.

    Wenn ich mein HZ-Handy daheim habe wird die Umleitung auf das andere Handy (Tschibo oder so) kostenlos durchgeführt. Aber warum kostet es 19ct, die Homezone aufs eigene Handy umzuleiten. Das ist in meinen Augen total be.........

    MfG
     
  9. Andre

    Andre IPPF-Promi

    Registriert seit:
    27 Dez. 2004
    Beiträge:
    3,307
    Zustimmungen:
    4
    Punkte für Erfolge:
    38
    Beruf:
    Ingenieur
    Ort:
    Schotten
    Das ist ein - auch in diesem Forum - bereits langwierig ausgelutschtes Thema.
    Kurz: Die kostenlose Weiterleitung bei eingeschaltetem Handy in der HZ ist ein ungewollter Nebeneffekt bei der vewendeten Technik von O2, bei der bei Verbindung zum HZ-Handy die Rufnummer in die Mobilnummer übersetzt und danach der Anruf wie ein Anruf auf die Mobilnummer behandelt wird. 99% der Genion Nutzer kennen oder nuten diesen Trick nicht, o2 sah daher bisher keinen akuten Handlungbedarf, die so entstandene "Bundesweite HZ" abzuschaffen.
    Gewollt ist von o2 die kostenpflichtige Weiterleitung. Die werden ihre regulären Tarife wohl kaum auf die technische Lücke hin anpassen, sondern weiterhin hoffen, daß nur wenige das nutzen oder diese Lücke irgendwann dann doch abstellen.
     
  10. Pfingstler82

    Pfingstler82 Neuer User

    Registriert seit:
    25 Nov. 2005
    Beiträge:
    96
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Wie schaut es denn genau mit der Multicard aus..

    Ich will mir eine O2 Multicard holen. In meinem Siemens S65 mache ich eine Tchibo-Karte rein, basiert ja auch auf O2.

    Wenn ich jetzt eine Multicard in mein XDA reinmache und eine in ein altes NOKIA 3310, schalte ich ja die Rufumleitung bei dem 3310 auf die Tchibokarte.

    So klingelt, wenn mich jemand auf meinrer O2 Nummer anruft (ODER HZ-Nummer) ja immer das Tchibo handy (Kostenlos), richtig? Wenn ich rauswähle, wähle ich mit dem XDA, wo die andere Multicard drinne ist, so sende ich meine O2 Nummer.

    Meine Frage: Ist es möglich, wenn mein XDA in der HZ ist, das der klingelt? Oder gilt die Rufumleitung für alle Karten?

    Ich meine SMS und MMS kann ich ja auch immer aufs XDA schicken lassen...

    hat das schon mal einer gemacht??