Asterisk Manager API - Action Hangup

CLauinger

Neuer User
Mitglied seit
27 Jan 2005
Beiträge
94
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich bin gerade dabei meine "*" mit php zu beschiessen über die Asterisk Manager API. Einen Anruf über php anzustossen tut soweit, nur das auflegen will nicht so recht:

[php:1:a2184bccf2]
<PRE>
<?php
$socket = fsockopen("127.0.0.1","1234", $errno, $errstr, $timeout);
fputs($socket, "Action: Hangup\r\n");
fputs($socket, "Channel: mISDN/g:NTports/230\r\n\r\n");
fclose($socket);
?>
</pre>
[/php:1:a2184bccf2]

Hat jemand schon erfolgreich einen Anruf über die Manager API beendet ?

Grüße

Christian
 
@CLauinger

Ja, hab ich eben versucht.

Du mußt Dich allerdings zuerst am Port anmelden.
action: login
username: xxxx
secret: xxxx

Dann ein Gespräch aufbauen.
Aktive Channel holen mit:

Action: Command
Command: Show Channels

Dann erst das Hangup ausführen.
Ausloggen: "action: logoff"
Dann erst socket schließen.

Gruß
britzelfix
 
Hallo britzelfix,

ich gehe nicht direkt auf die Manager API los, sondern verwende das Perl-Script "simpleproxy.pl". Das meldet sich für mich beim "*" an.
Somit brauch ich mich nicht mit login anmelden. Ich denke das ich mich auch nicht abmelden muss, da das Perl-script ja permanent läuft. Oder sehe ich das falsch. Aber den Tipp mit "Show Channels" probiere ich mal aus. Danke.

Anrufe mit Originate aufbauen hab ich schon am laufen(über das Perl-Script), nur das Auflegen fehlt mir noch.

Ich teste morgen weiter und poste die Ergebnisse.
 
Ich habe gelesen das es eine Weiterentwicklung von "simpleproxy" gibt:

AstManProxy

Nun habe ich ein php-script gemacht, das mit die aktiven Channels anzeigt um den zu finden den ich beenden will.

[php:1:6389725e9f]
<PRE>
<?php
$socket = fsockopen("127.0.0.1","1234", $errno, $errstr, $timeout);
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: xxx\r\n");
fputs($socket, "Secret: xxx\r\n\r\n");
fputs($socket, "Action: Command\r\n");
fputs($socket, "Command: Show Channels\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");
while (!feof($socket)) {
$wrets .= fread($socket, 8192);
}
fclose($socket);
echo $wrets;
?>
</pre>
[/php:1:6389725e9f]

als output kommt allerdings nur

Code:
Asterisk Call Manager Proxy/1.0d

Response: Success
Message: Authentication Accepted

Goodbye: Y'all come back now, y'hear?

Im debugmodus von astmanproxy kann ich sehen das er das Command abgesetzt hat, allerdings kann ich den Output nicht mit php abgreifen :(

Was mache ich nur falsch ?

Wenn ich im obigen php script den port auf 5038 (direkt auf Manáger API) setze, dann tuts. Im WIKI steht allerdings man soll nicht mit mehreren Clients gleichzeitig auf die API zugreifen, deswegen der Proxy. Wie löse ich das ? Wer hat astmanproxy am Laufen ?

Grüße

Christian
 
@CLauinger

Das kann ich Dir nicht sagen. Simpleproxy benutze ich auch nicht
es ist möglich, daß man sich garnicht anzumelden braucht.

Ich benutze nur telnet oder das Net::Telnet Modul zusammen mit Perl.
Der Socket sollte auch im non-blocking-Modus gelesen werden.
\r\n ist der DOS-Umbruch, UNIX versteht nur \n.
Nach jeder Zeile nur \n, nach beendeten Gruppe \n\n benutzen.

Gruß
britzelfix
 
britzelfix schrieb:
Ich benutze nur telnet oder das Net::Telnet Modul zusammen mit Perl.
Der Socket sollte auch im non-blocking-Modus gelesen werden.
\r\n ist der DOS-Umbruch, UNIX versteht nur \n.
Nach jeder Zeile nur \n, nach beendeten Gruppe \n\n benutzen.

Gruß
britzelfix

Hallo britzelfix,

im non-blocking-modus den Socket lesen ? Verstehe ich jetzt nicht !? Wie meinst Du das ?

Ich hab die ganzen "\r" mal weggenommen, dann tut das Script überhaupt nicht mehr :( Browser ist im Dauer reload.

Grüße

Christian
 
@CLauinger

Das Problem ist, daß wir über 2 verschiedene
Dinge sprechen. Du willst eine Lösung für
astmanproxy. Der gute Autor des Proxy hat,
so wie ich es eben gelesen habe, (noch) keine Möglichkeit
für eine Interaktion gelassen. Ich bin mir nicht 100% sicher,
aber ich glaube man kann über den Proxy Kommandos an
das Manager Interface schicken, aber keine lesen.

Ich benutze diesen Proxy nicht!

Non-Blocking bedeutet, das was es heißt. Du liest vom
Socket mit fread. Im non-blocking-Modus kehrt der Befehl
sofort zurück, auch wenn nichts gelesen wurde. Auf diese
Weise ist eine Interaktion ohne Hänger möglich.

Versuche doch mal das simple asteriskdial, das diente für mich
auch als Grundlage für einige Experimente.

http://lists.digium.com/pipermail/asterisk-users/2005-May/106189.html

Gruß
britzelfix
 
britzelfix schrieb:
@CLauinger
Der gute Autor des Proxy hat,
so wie ich es eben gelesen habe, (noch) keine Möglichkeit
für eine Interaktion gelassen. Ich bin mir nicht 100% sicher,
aber ich glaube man kann über den Proxy Kommandos an
das Manager Interface schicken, aber keine lesen.

Hallo britzelfix,

ich kann bei dem Proxy das "Outputformat" einstellen, dann muss doch auch was rauskommen ?!

Das simple asterisk dial hab ich mir angesehen.
Bin allerdings kein Perl Profi, zum Wählen hab ich meine "*" gebracht,
allerdings den Output wenn ich ein Kommando absetze bekomme ich nicht raus (weil kein Perl-Mensch).

Grüße

Christian
 
@CLauinger

Mit dem \r\n hast Du offensichtlich recht. Ich habe es mal mit \n
probiert und es hat nicht funktioniert. Merkwürdig.

Das Beispiel das ich gesehen habe, hat statt fread() fgets()
benutzt.

Versuche es mal so und ohne der feof-Schleife:

[php:1:93cad04809]
$line = fgets($socket);
[/php:1:93cad04809]



Gruß
britzelfix
 
Hallo britzelfix,

habe dem Entwickler des proxy eine Mail geschrieben, er schaut sich die Geschicht mit dem Proxy mal an.

fgets ist auch OK zum auslesen, aber keine Besserung es tut nur auf dem AM API port :( Ohne Schleife kommt nur eine Zeile zurück !

Gruss
 
Hallo CLauinger,
ich habe das selbe Problem wie Du bei der Verwendung des Astmanproxys.

Konntest Du eine Lösung herausfinden?


Anbei mein Testscript:
Code:
PRE>
<?php

$PROXY = yes;

if ($PROXY == no) {
 echo "Verbunden mit Manager direkt<br><br>";
 $socket = fsockopen("192.168.255.250",5038, $errno, $errstr, 30);
 fputs($socket, "Action: Login\r\n");
 fputs($socket, "UserName: xxx\r\n");
 fputs($socket, "Secret: xxx\r\n\r\n");
}

if ($PROXY == yes) {
echo "Verbunden mit Astmanproxy<br><br>";
 $socket = fsockopen("192.168.255.250",1234, $errno, $errstr, 30);
}


fputs($socket, "Action: sippeers\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");


while (!feof($socket)) {
$dbentries .= fread($socket, 8192);
}

fclose($socket);
echo $dbentries;


?>
</PRE>



Danke Sven
 
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.