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

sip callback.php

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von Ronny, 20 Juli 2004.

  1. Ronny

    Ronny Neuer User

    Registriert seit:
    20 Juli 2004
    Beiträge:
    10
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    hi

    habe versucht das callbackscript von http://www.junghanns.net/asterisk/page14.html zu modifzieren
    leider hab ich da wohl nen fehler leider bekomme ich keine fehlermeldung nur Executing AGI("SIP/1xxxxxx-xxxx", "callback.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/callback.agi
    -- AGI Script callback.agi completed, returning 0
    so sieht es jetzt aus

    <?php
    ob_implicit_flush(true);
    $stdlog = fopen("/var/log/asterisk/my_agi.log", "w");
    set_time_limit(0);
    $err=fopen("php://stderr","w");
    $in = fopen("php://stdin","r");
    while (!feof($in)) {
    $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: sip/1xxxxxx/".$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);
    ?>

    mfg
     
  2. otaku42

    otaku42 Admin-Team

    Registriert seit:
    26 März 2004
    Beiträge:
    1,670
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    1.) Hast Du PHP als Command Line Interface-Version installiert? Oder nur die CGI-Variante? Bei der CGI-Variante musst Du noch einen Parameter uebergeben, damit er die bei CGI ueblichen Zeilen nicht mit ausgibt (ich glaube -q, bin aber nicht sicher).

    2.) Hast Du dem Script die passenden execute-Rechte gegeben (z.B. "chmod a+x callback.agi")?

    3.) Hast Du die komplette Datei gequoted? Wenn ja, dann fehlt vor dem "<?php" noch ein "#!/usr/bin/php". Denn ansonsten versucht Deine Shell selbst das Script zu parsen und scheitert. Ggf. musst Du den Pfad anpassen an Deine lokalen Gegebenheiten. Und eventuell musst Du hier noch den in 1 erwaehnten Parameter mit anhaengen.

    4.) Wenn das alles nicht hilft: das Script loggt in /var/log/asterisk/my_agi.log mit. Kannst Du mal die Eintraege eines einzelnen Aufrufs hier posten (bitte nicht das komplette Logfile, jedenfalls wenn Du das Script haeufig aufgerufen hast)?

    Ciao, Mike
     
  3. Ronny

    Ronny Neuer User

    Registriert seit:
    20 Juli 2004
    Beiträge:
    10
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @otaku42
    danke für die schnelle antwort
    1. hab cli installiert
    2. das script ist auführbar -rwxr-xr-x 1 root root 757 Jul 21 18:11 /var/lib/asterisk/agi-bin/callback.agi
    3. hab in der ersten zeile #!/usr/local/bin/php -v gehabt nach der änderung in #!/usr/local/bin/php funzt es hab nur noch einen fehler im channel
    Attempting call on sip/1xxxxxxx:"0160777777" <0160777777> for s@capidialtone:1 (Retry 1)

    extensions.conf
    [capidialtone]
    exten => s,1,Dial,sip/@s
    exten => s,2,Hangup

    mfg
     
  4. Dakapo

    Dakapo Mitglied

    Registriert seit:
    10 Aug. 2004
    Beiträge:
    380
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Dipl. Wirtschaftsinformatiker (FH)
    Also ich würde ganz gerne auch eine Callback-Geschichte realisieren, aber leider ist das hier ja noch nicht komplett zum Ende gebracht worden.

    Ich habe bei mir in der extensions.conf folgendes eingegeben:
    Code:
    exten => 71503/071950xxxx,1,Wait,1
    exten => 71503/071950xxxx,2,AGI,callback.agi
    exten => 71503/071950xxxx,3,Hangup
    
    [capidialtone]
    exten => s,1,Dial,sip/@s
    exten => s,2,Hangup
    
    Sobald ich hinter der Nummer des Sip-Eingangs den / setze mit der Nummer von der der Anruf kommt, bekomme ich keine Verbindung mehr. Ich bekomme eine Ansage "die Rufnummer ist ungültig" (eine Unart der Telefongesellschaft)

    Wenn ich den Slash weglasse funktioniert es aber auch nicht. Er durchläuft dann immer wieder die Schleife "Wait, AGI, HangUp"

    Auch weiss ich nicht, ob die Angaben, die Ronny unter [capidialtone] gemacht hat korrekt sind um auch über einen Sip-Account wieder raustelefonieren zu können, da das Junghanns-Skript ja ursprünglich für eine Capi-Verbindung gedacht ist.

    Vielleicht gibt es ja auch etwas anderes um mein Problem zu lösen. Ich möchte nämlich noch etwas mehr, als das Standard-Callback-Skript für eine bestimmte Nummer, da ich nächste Woche in Ägypten bin und die Telefonpreise tierisch hoch sind. Deswegen wollte ich das Callback vom Hotelzimmer aus benutzen über Stanaphone.

    Die Anforderungen:
    - Der Rückruf soll von jedem beliebigen Anschluss aus funktionieren, falls die Rufnummer übermittelt wird.
    - Wird die Rufnummer nicht übermittelt, möchte ich ein Freizeichen oder eine Ansage bekommen und dann die Rufnummer von Hand angeben, gefolgt von einer PIN, die den Rückruf aktiviert => also z.B. Anruf Asterisk => Freizeichen => 01234567*PIN#
    - Sollte der Rückruf schon problemlos geklappt haben, möchte ich beim Rückruf vor dem Freizeichen die PIN eingeben können.

    Wäre super, wenn sich jemand schon so gut in der Asterisk-Programmierung auskennt, damit man so ein Skript entwickeln könnte.

    Schöne Grüße
    Dakapo
     
  5. hohony

    hohony Neuer User

    Registriert seit:
    22 Apr. 2004
    Beiträge:
    134
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Willich / Düsseldorf / N.J.
    Genau soetwas suche ich auch gerade. Falls jemand zwischenzeitlich zu einer finalen Lösung gekommen ist....möge er sich doch outen.
     
  6. allesOK

    allesOK Mitglied

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

    Lasst mich mal uebers wochenende meine Dialplaene ordentlich zusammenstricken und dann auf einen Webserver packen! Beim Callback kann man dann auch bestimmen ueber welche MSN der Rueckruf geht, welche MSN fuer den Callthrough benutzt wird, und auf welche Nummer ueberhaupt zurueckgerufen wird!

    vg Eric
     
  7. Dakapo

    Dakapo Mitglied

    Registriert seit:
    10 Aug. 2004
    Beiträge:
    380
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Dipl. Wirtschaftsinformatiker (FH)
    Hey das hört sich super an! :)
    Ich wollte demnächst auch noch sowas stricken, aber wenn Du es schon gemacht hast um so besser. Und wer weiss, ob und wann ich es überhaupt selbst gemacht hätte ;)
     
  8. hohony

    hohony Neuer User

    Registriert seit:
    22 Apr. 2004
    Beiträge:
    134
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Willich / Düsseldorf / N.J.
    <freu>

    <lechz>
     
  9. allesOK

    allesOK Mitglied

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

    Momentan ruft er nur zurueck, wenn er eine CallerID bekommt, die er kennt. Will das noch umstricken, dass er auch andere CallerID zurueckruft, dann aber ein Passwort braucht, bzw. wenn man keine CallerID mitschickt, dass man eine Nummer angeben kann, auf der er zurueckrufen sollen (ebenfalls mit Pin).
     
  10. hohony

    hohony Neuer User

    Registriert seit:
    22 Apr. 2004
    Beiträge:
    134
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Willich / Düsseldorf / N.J.
    Mehr ist in manchem Fall gar nicht verlangt (z.B. wenn man mobil unterwegs ist)

    Das wäre die Luxusvariante :)
    Die würde ich mich auf eine zweite (zusätzliche) MSN packen.

    Ich bin auf jeden Fall gespannt!

    Bitte mach es einfach (nachvollziehbar) :lol: , mein Hirnschmalz gerät schon beim logischen Nachvollziehen Deiner Einstein'schen Scriptologie
    oft an's Kochen...
    :doof:
     
  11. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ach keine Angst, ist alles in einem schoenen *-aehnlichen .conf verpackt. Du musst nur eine Datei inkludieren, und fuer die MSN angeben, dass sie fuers Callback zustaendig ist.
     
  12. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    So hab all die netten Features implementiert. Das einzige was nicht geht, ist eine zweite Nummer anzurufen, wenn die erste besetzt ist. Ansonsten alles: Callback fuer vorgebene CallerIDs. Auzsserdem kann man festlegen, ob andere CallerID zugelassen sind. Die werden dann ohne abzuheben zurueck gerufen. Und man kann festlegen, ob * dran gehen soll, wenn keine CallerID mitgeschickt wird. Dann fragt er nach einer Callbacknummer und ruft zurueck. Achso, die beiden "unsicheren" Alternativen sind Pin-geschuetzt!

    Code wird noch aufbereitet und zusammen mit vielen anderen netten Dingen meines Dialplans in Kuerze veroeffentlicht!
     
  13. hohony

    hohony Neuer User

    Registriert seit:
    22 Apr. 2004
    Beiträge:
    134
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Willich / Düsseldorf / N.J.
    Die Fangemeinde sammelt sich nach diesen einladenden Worten im Saal und blickt gespannt auf die [noch verhüllte] Bühne...
     
  14. ronin-jay

    ronin-jay Neuer User

    Registriert seit:
    7 März 2005
    Beiträge:
    2
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Gibts es schon Neuerungen??? Wann erscheint der Code für das Callback???
     
  15. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    uiii, ich verspreche soo viel .... und hab so wenig Zeit.

    In meinen beiden System laeuft alles, aber mir gefaellt es noch nicht so ganz, weil es nicht generisch genug fuer alle Anwender ist. Und halbe Loesungen will ich nicht posten ...
     
  16. jui

    jui Mitglied

    Registriert seit:
    18 Dez. 2004
    Beiträge:
    229
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi Eric!

    aber du weisst doch sicherlich; Software muss man auf den Anwender loslassen wenn die Arbeiten zu ca. 90% erledigt sind, denn für die restlichen 10% benötigt man mindestens genausoviel Zeit wie für die ersten 90% :)
    Oder war da nicht was, dass man irgendwann für jedes weitere % genausoviel Zeit benötigt :)

    Vielleicht reift es ja bei uns durch Feedback und Inputs dann noch weiter und du kannst effekiver verbessern.... sind alle schon so gespannt und in den Wartelöchern!

    Gruß,

    Jui
     
  17. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ist ein Argument - aber mehr so eines aus Redmond ... also ich fixe noch ein paar Sachen und dann lass ich es raus. Brauche eigentlich nur 1-2 Abende, aber die muss man erst mal finden.
     
  18. ronin-jay

    ronin-jay Neuer User

    Registriert seit:
    7 März 2005
    Beiträge:
    2
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hm, kann ich verstehen, geht mir letztendlich nicht anders. Ich sitze allerdings nun schon ein paar mehr Tage an diversen Callback-Lösungen und bei mir funktioniert leider keine. Wäre es vielleicht trotzdem möglich, eine Anleitung oder soetwas zu bekommen (per E-Mail?), um die Callback-Geschichte zu realisieren?
     
  19. johnnyt

    johnnyt Aktives Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    1,272
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Beruf:
    Jurist, Diplom Wirtschaftsinformatiker
    Ort:
    Switzerland
    wird deine lösung für voip gespräche oder auch für isdn funktionieren?
    wird es möglich sein bei bestimmten erkannten caller id's einen rückruf auf anderen nummer vorzugeben. mir geht es dabei darum, dass ich mit der gesendeten mobilfunk id meines genion vertrages einen callback via isdn (da telefonflat) auf meiner genion festnetznummer auszulösen. bestenfalls sollte er den initialisierungsanruf mit einem besetzt ablehnen, wenn er die caller id identifiziert hat. und dann den rückruf auslösen. dann möchte ich nach annahme des rückrufs einen zweiten call via isdn line 2 auslösen. eigentlich alles in allem so wie das www.mcdialer.de unter windows macht....

    sorry, wenn ich euch hier irgendwie ins gehege komme, bin absoluter linux/ asterisk rookie und gerade bei den ersten "gehversuchen" :wink:

    danke schon mal&gruss

    JohnnyT
     
  20. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    nee, das kann die loesung jetzt schon ... darfst dich schon mal freuen ...