Asterisk mit PHP verbinden

informatiker340

Neuer User
Mitglied seit
10 Mrz 2010
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Hallo,

mein Asterisk 1.6 läuft auf einer Virtual Machine mit Debian Lenny.
Ich habe eine interne Applikation die mit Javascript und Php entwickelt wurde.

In dieser Applikationen sind Buttons.
Durch klicken dieser Buttons soll Asterisk die definierte Nummer anrufen.
Zb:
Button 1 ruft 069 111 222 usw.

So;

Wie verbinde ich die PHP-Datei mit Asterisk. Welche Befehle sind relevant?
Wie wird die ganze Kommunikation ablaufen? Wie wird die Schnittstelle aussehene?

Danke
 
Zuletzt bearbeitet:
und wie mache ich das genau mit AMI,call files oder CLI?
 
Äh, indem Du Dich mit dem AMI Port von Asterisk verbindest und ein Originate absetzt.
Oder Du schreibst ein Call-File und schiebst es in den Spooler von Asterisk.
Oder Du schickst mit exec einen Aufruf an die CLI.

Lies bitte erst mal die Links, da steckt haufenweise Information drin, und auch zahlreiche Beispiele. :doktor:

Wenn Du konkrete Fragen zur Umsetzung hast, dann reden wir weiter.

Rentier
 
Edit rollo: Vollzitat des Vorbeitrages gelöscht. Bitte Forenregeln nochmal lesen!

"Deutsches Forum für Internet-Telefonie"
aber die Links sind Englich :((

Wo unterscheiden sie sich denn bei der Verbindung?
Also AMI, Call Files, CLI

Welches ist nicht aufwändig für die Realisierung bei meinem Fall?
Bei welchem ist das Risiko klein das er Fehler zurückliefert?
Welches ist mächtiger?
 
Zuletzt bearbeitet von einem Moderator:
Aha, da liegt das Problem. Das Vollzitat hättest Du Dir aber sparen können, mein Beitrag steht direkt darüber.

Hier gibts das in ähnlicher Form auf Deutsch.

AMI
CLI, der originate Befehl ist hier leider nicht beschrieben.
Call File

AMI läuft über Netzwerk, ist genau für solche Anwendungen gedacht und damit sehr funktionell.
Call-Files laufen innerhalb des Dateisystems, sind damit einfacher und für Deinen Zweck ausreichend.
CLI würde ich eher als Notlösung sehen.

Rentier
 
Ok, das heisst ich konzentriere mich mal für AMI und versuch mein Problem mit AMI zu lösen.
 
Habe es gemacht wie es hier bei
AMI beschrieben ist.

ich habe telnet 127.0.0.1 5038 aufgerufen

und konnte keine verbindung herstellen???

EDIT: Jetzt hab ich ne Verbindung
 
Ok, wie mache ich jetzt weiter mit PHP?
Hier auf der Seite sind die nicht so viel auf PHP eingegangen.
Nur bis auf mailboxabfrage, aber das bringt mir nicht viel.

Wie und was muss jetzt in der PHP datei ablaufen?
 
Jetzt öffnest Du mit fsockopen eine Netzwerkverbindung und schickst ein Originate Kommando. So viel Englisch wird schon drin sein, dass Du die Beispiele aus meinem ersten Link zu AMI Originate verstehst, oder?

Edit: Schau mal, das hier hat die Suchfunktion bei "ami originate" ausgespuckt.

Rentier
 
Zuletzt bearbeitet von einem Moderator:
Trage ich Hostname und Portnummer von der, der XP mir liefert oder von der Debian die auf der Virtuellen Machine läuft und Asterisk.
Welcher Befehl liefert mir das?
 
Du willst Dich ja wohl zu Asterisk verbinden, also brauchst Du auch die IP-Adresse des Rechners, wo Asterisk läuft.
Und der Ziel-Port Deiner Telnet Verbindung war 5038, oder?! Also solltest Du Dich auch per PHP zu diesem Port verbinden.

Rentier
 
Edit rollo: Vollzitat des Vorbeitrages gelöscht. Bitte Forenregeln nochmal lesen!

OK, danke dir.

ich habe die ip des Rechners und die Portnummer 5038 eingegeben.
Ausgeführt und das Ergebnis auf der Asterisk Konsole ist:
Code:
Connect attempt from 'ip-adresse' unable to authenticate
Manchmal tut sich auch gar nichts. Bis auf das irgendwelche HTML zeug ausgegeben wird.

So ist der Php Code:
PHP:
$errstr = "Verbindung konnte nicht aufgebaut werden.";
$fp = fsockopen("ip-adresse", 5038, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out  = "Action: Login\n";
    $out .= "ActionID: 1\n";
    $out .= "Username: admin\n";
    $out .= "Secret: geheim\n";
    
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
 
Zuletzt bearbeitet von einem Moderator:
Aus dem Asterisk-Buch:
Zeilen werden durch CR LF beendet, das ganze Paket durch ein weiteres CR LF.

Richtig ist also:
$out = "Action: Login\r\n";
$out .= "Username: admin\r\n";
$out .= "Secret: geheim\r\n\r\n";

Ein while(!feof(...)) kann bei fsockopen hängen bleiben. Lass da eine $Variable++ mitlaufen und mach irgendwann ein break;.

Rentier
 
Ein while(!feof(...)) kann bei fsockopen hängen bleiben. Lass da eine $Variable++ mitlaufen und mach irgendwann ein break;.

Rentier

Die /r/n Habe ich gemacht, aber trotzdem konnte ich keine Verbindung herstellen.
Das mit der Variable habe ich so realisiert.

PHP:
    $zaehler = 0;
    fwrite($fp, $out);
    while (!feof($fp) && $zaehler < 200) {
        echo fgets($fp, 128);
		$zaehler++;		
    }
 
Doch die passen, weil ich mich anmelden kann wenn ich mit debian im Terminal anmelde.
 
Ich seh grad, Du wirst wahrscheinlich einen Parse-Error von PHP bekommen, weil Du zu wenig Klammern gesetzt hast.

while ( ( !feof($fp) ) && ( $zaehler < 200 ) ) {

Edit: Ralf hat mit seinem Kommentar weiter unten Recht, PHP 5 macht's auch ohne die zusätzlichen Klammern.
 
Zuletzt bearbeitet von einem Moderator:
Die Console von der Entwicklungsumgebung liefert:
Code:
Asterisk Call Manager/1.1
Response: Error
ActionID: 1
Message: Authentication failed

und bei Asterisk scheint folgendes:

Code:
(ip-adresse) failed to pass IP ACL as 'admin'
(ip-adresse) failed to authenticate as 'admin'

Aber wenn ich vom Debian-Terminal es mache bekomme ich:
Code:
Response: Success
ActionID: 1
Message: Authentication accepted

und Asterisk liefer:
Code:
Manager 'admin' logged on from 127.0.0.1
 
Überpüfe Deine deny / permit Einstellungen in der manager.conf. Die IP-Adresse, von der aus Du Dich anmelden willst, gehört nicht zum erlaubten Bereich.
 
Zuletzt bearbeitet von einem Moderator:

Statistik des Forums

Themen
246,783
Beiträge
2,257,413
Mitglieder
374,828
Neuestes Mitglied
Polluxis
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.