Verbindung zwischen zwei Teilnehmern herstellen

inschenjoer

Neuer User
Mitglied seit
9 Jan 2006
Beiträge
61
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich hab nun eine funktionierende Callback-Konfiguration wie folgt:

MSN=123456
TelNR=987654321

Also wenn TELNR die MSN anruft und wieder auflegt wird ein Callback initiiert. Das funktioniert auch.

Code:
[tr-capi]

; eine Regel pro Nummer
exten => 123456/987654321,1,Goto(101)

; callback initiieren
exten => 123456,101,Wait,1
exten => 123456,102,AGI,callback.agi
exten => 123456,103,Hangup

; den Anruf ganz normal entgegennehmen
exten => _x.,1,Dial(Sip/301&Sip/302)
exten => _x.,2,Congestion
exten => _x.,3,Hangup

[tr-sip]
exten => _x.,1,SetCallerID,123456
exten => _x.,2,Dial(CAPI/contr1/${EXTEN})
exten => _x.,3,Busy
exten => _x.,4,Hangup

[tr-zap]

[tr-capiout]
exten => s,1,Dial,CAPI/@123456:b
exten => s,2,Hangup

include => tr-capi

Nun will ich aber die Verbindung mit dem callback zu einem internen Gerät verbinden. Also die Verbindung, die durch
Code:
[tr-capiout]
exten => s,1,Dial,CAPI/@123456:b
aufgebaut wird, soll an Sip/301 geleitet werden.

Also der Anrufer ruft an und legt wieder auf. Asterisk ruft den Anrufer zurück und lässt es gleichzeitig intern klingeln. Wenn beide abnehmen, soll die Verbindung stehen.

Wie geht das nun genau? Es ist ja im Prinzip kein callback. Also der zurückgerufene Anrufer soll die Zielnummer ja nicht selber eingeben!

mfg
inschenjoer
 
Du legst in deinem call-file den contest + exten + priority fest
Wenn du dein callback.agi postest, kann man es bessr klären
 
OK, danke erstmal. Hier mein callback.agi

Code:
goofy_:/etc/asterisk$ cat /var/lib/asterisk/agi-bin/callback.agi
#!/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://stdout", "w");

echo("VERBOSE 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;
    }
}

$destnr = $agi["callerid"];

$cf     = fopen("/var/spool/asterisk/outgoing/cb".$agi["callerid"], "w+");

fputs($cf, "Channel: CAPI/contr1/".$destnr."\n");
fputs($cf, "Context: tr-capicallback\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);

?>

mfg
inschenjoer
 
dann ersetze

fputs($cf, "Context: tr-capicallback\n");
fputs($cf, "Extension: s\n");

durch

fputs($cf, "Context: tr-capik\n");
fputs($cf, "Extension: 301\n");


so wird der callback auf deine

exten => _x.,1,Dial(Sip/301&Sip/302)

geleitet. Ist das ok?
 
Ne, ich glaube das ist nicht korrekt.Das würde ja folgendes bedeuten:

TelNR ruft an und legt auf
Asterisk ruft SIP/301 und SIP/302 an

Ich will aber
TelNR ruft an und legt auf
Asterisk ruft TelNR zurück
Asterisk ruft SIP/301 und SIP/302 an
Asterisk verbindet die beiden zustandekommenden Verbindungen

Oder seh ich das falsch?

mfg
inschenjoer
 
nein;
Asterisk baut eine verbindung mit CAPI/contr1/$destnr auf und verbindet diese mit SIP/301 und SIP/302
 
Ahja, jetzt hab ich es verstanden. Es funktioniert tatsächlich.

Noch eine kleine Frage:

Wenn sip/301 angerufen wird, zeigt er die Nummer nicht an. Ist das noch irgendwie möglich?

mfg
inschenjoer
 
wird diese vielleicht unterdrückt?
Du kannst ja mal

exten => _x.,1,Set(CALLERID(number)=10)
exten => _x.,2,Dial(Sip/301&Sip/302)
exten => _x.,3,Congestion
exten => _x.,4,Hangup

dann müsste erst mal die 10 angezeigt werden; wenn nicht, dann liegt es vielleicht am Telefon
 
Er zeigt "Asterisk" an. Wo kommt das her? Ich benutze zum testen X-Lite. Ansonsten hat er mir die TelNR immer angezeigt, als ich noch keinen callback hatte.

mfg
inschenjoer
 
das steht in der sip.conf
das bedeutet das keine Rufnummer übermittelt wurde bzw der anruf vom asterisk ausgelösst wurde

füge mal noch

fputs($cf, "Set: CALLERID(number)=".$destnr."\n");

ein (wenn du Asterisk > 1.2 verwendest)
 
Kann man das irgendwie ändern? Also die Rufnummer noch übermitteln?

mfg
inschenjoer
 
für * < 1.2

fputs($cf, "Callerid: <".$destnr.">\n");

diese Zeilen nach
fputs($cf, "Channel: CAPI/contr1/".$destnr."\n");
 
Kostenlos!

Statistik des Forums

Themen
248,095
Beiträge
2,281,221
Mitglieder
377,296
Neuestes Mitglied
beetlesch