Callback mit Asterisk über CAPI an Fritz!Box

Quetsch

Neuer User
Mitglied seit
17 Jun 2005
Beiträge
18
Punkte für Reaktionen
0
Punkte
1
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...
 
Hi
Interessante Thema. Ich werde das ganze nachfolgen.
 
Quetsch schrieb:
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);
? >
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...
 
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.
 
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.
 
Dann sollte der neue Gateway jedoch auch QoS unterstützen... denn jenes würde die Fritzbox dann nicht mehr machen
 
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.
 
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
 
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.
 
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??
 
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.