- Mitglied seit
- 12 Mai 2008
- Beiträge
- 92
- Punkte für Reaktionen
- 0
- Punkte
- 0
Hallo,
Ich bin hier echt am Verzweifeln.
Habe eine kleine Wallboardapplikation in PHP geschrieben welche anzeigt, welche Anrufer gerade in der Warteschleife sind und wie der Status der Kollegen gerade ist. Das funktioniert auch soweit.
Als nächsten Schritt habe ich gestern auf Basis dieses Scriptes (oben):
http://www.voip-info.org/wiki/view/Asterisk+manager+Example:+PHP
eine Kleine Klasse geschrieben, welche zunächst nur die Funktionen Login, Logout und Redirect_Call enthält. Hier der Code:
Benutzt habe ich diese Klasse dann wie folgt:
Das Ziel hierbei ist, dass der eingeloggte Agent seinen eigenen Anruf mit einem Klick auf einen anderen Agenten weiterleiten kann.
Das hatte gestern dann auch zunächst geklappt . Leider habe ich aber die falschen Kanäle verbunden und dann war feierabend. Darum wollte ich mich dann heute kümmern. Da das Grundschema ja klappte war ich auch guter Dinge, dass ich dafür nicht lange brauchen würde. Nun ermittel ich zwar den korrekten Kanal und gebe ihn an das PHP-Script weiter, aber es tut sich leider gar nix mehr.
Nach Stundenlangem Herumprobieren (Klasse auskomentiert und alles Sequentiell eingegeben, Variablen auf eventuelle Leerzeichen geprüft, Variablen komplett durch festen Text ausgetauscht, Gegenprüfung auf der telnet-konsole mit exakt denselben Eingaben, Mein Synchronisationsprogramm zum Testen abgestellt, timeout bei fsockopen weggelassen oder großzügig gesetzt usw. usw. -> ) hab ich den Fehler zumindest eingekreist. Das Problem ist, dass sofort nach dem Login der Logoff erfolgt (zu sehen im CLI), obwohl ich das Logoff Kommando bewusst auskommentiert hatte (!). Demnach erfolgt einfach keine Abarbeitung des Redirect-Kommandos.
Logge ich mich mit exakt denselben Werten über die Telnet-Konsole ein funktioniert dagegen alles wie gewünscht, der Kanal wird umgeleitet.
Ich bin echt am Ende mit meinem Latein und Frage mich, wieso ich mit dem PHP-Script immer sofort wieder ausgeloggt werde
Der Vollständigkeit halber hier noch die manager.conf:
Laufen tut das ganze auf Ubuntu Server 8.04.1 mit Asterisk 1.4.17.
Bitte hol mich jemand aus meinem Loch heraus!
Danke
André
Ich bin hier echt am Verzweifeln.
Habe eine kleine Wallboardapplikation in PHP geschrieben welche anzeigt, welche Anrufer gerade in der Warteschleife sind und wie der Status der Kollegen gerade ist. Das funktioniert auch soweit.
Als nächsten Schritt habe ich gestern auf Basis dieses Scriptes (oben):
http://www.voip-info.org/wiki/view/Asterisk+manager+Example:+PHP
eine Kleine Klasse geschrieben, welche zunächst nur die Funktionen Login, Logout und Redirect_Call enthält. Hier der Code:
Code:
<?php
/************************************************************************
base_ami.php - Copyright andre
This class handles the communication to the Asterisk Manager Interface
This file was generated on Mi Aug 20 2008 at 14:44:40
The original location of this file is /home/andre/Desktop/Asterisk-Entwicklung/callbuntu-webgui/quellcode/base_ami.php
**************************************************************************/
class base_ami
{
/*** Attributes: ***/
private $username;
private $secret;
private $socket;
public function __construct() {
$this->username="admin";
$this->secret="geheim";
$this->socket = fsockopen("127.0.0.1", "5038", $errno, $errstr, $timeout);
}
public function redirect_channel( $channel, $exten, $context ) {
fputs($this->socket, "Action: Redirect\r\n");
fputs($this->socket, "Channel: $channel\r\n");
fputs($this->socket, "Exten: $exten\r\n");
fputs($this->socket, "Context: $context\r\n");
fputs($this->socket, "Priority: 1\r\n\r\n");
} // end of member function redirect_channel
public function login() {
fputs($this->socket, "Action: Login\r\n");
fputs($this->socket, "Username:{$this->username}\r\n");
fputs($this->socket, "Secret: {$this->secret}\r\n\r\n");
} // end of member function login
public function logout( ) {
fputs($this->socket, "Action: Logoff\r\n\r\n");
} // end of member function logout
} // end of base_ami
?>
Benutzt habe ich diese Klasse dann wie folgt:
Code:
if ($_GET['ami_action']=="redirect")
{
$channel=trim($_GET['channel']);
$exten=trim($_GET['exten']);
$context=trim($_GET['context']);
echo "Channel:-".$channel."-<br>";
echo "Exten:-".$exten."-<br>";
echo "context:-".$context."-<br>";
$ami->login();
$ami->redirect_channel( $channel, $exten, $context );
$ami->logout();
}
Das Ziel hierbei ist, dass der eingeloggte Agent seinen eigenen Anruf mit einem Klick auf einen anderen Agenten weiterleiten kann.
Das hatte gestern dann auch zunächst geklappt . Leider habe ich aber die falschen Kanäle verbunden und dann war feierabend. Darum wollte ich mich dann heute kümmern. Da das Grundschema ja klappte war ich auch guter Dinge, dass ich dafür nicht lange brauchen würde. Nun ermittel ich zwar den korrekten Kanal und gebe ihn an das PHP-Script weiter, aber es tut sich leider gar nix mehr.
Nach Stundenlangem Herumprobieren (Klasse auskomentiert und alles Sequentiell eingegeben, Variablen auf eventuelle Leerzeichen geprüft, Variablen komplett durch festen Text ausgetauscht, Gegenprüfung auf der telnet-konsole mit exakt denselben Eingaben, Mein Synchronisationsprogramm zum Testen abgestellt, timeout bei fsockopen weggelassen oder großzügig gesetzt usw. usw. -> ) hab ich den Fehler zumindest eingekreist. Das Problem ist, dass sofort nach dem Login der Logoff erfolgt (zu sehen im CLI), obwohl ich das Logoff Kommando bewusst auskommentiert hatte (!). Demnach erfolgt einfach keine Abarbeitung des Redirect-Kommandos.
Code:
== manager 'admin' logged on from 127.0.0.1
== manager 'admin' logged off from 127.0.0.1
Logge ich mich mit exakt denselben Werten über die Telnet-Konsole ein funktioniert dagegen alles wie gewünscht, der Kanal wird umgeleitet.
Ich bin echt am Ende mit meinem Latein und Frage mich, wieso ich mit dem PHP-Script immer sofort wieder ausgeloggt werde
Der Vollständigkeit halber hier noch die manager.conf:
Code:
[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1
[admin]
secret=geheim
read = all,system,call,log,verbose,command,agent,user,config
write = all,system,call,log,verbose,command,agent,user,config
Laufen tut das ganze auf Ubuntu Server 8.04.1 mit Asterisk 1.4.17.
Bitte hol mich jemand aus meinem Loch heraus!
Danke
André