Per Buttonklick Gespräch aufbauen

bigfootblue

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

bin neu im Forum und der Arbeit mit Asterisk, hab wie ich dachte ein simples Problem:

auf einer Website soll ein Button angezeigt werden, der eine feste Nummer
meines Asterisk-Systems anruft und es ermöglicht dem "Klicker" mit dem
"Angerufenem" der festen Nummer zu kommunizieren


nun hab ich schon insgesamt 8 Tage lang getestet und Foren durchstöbert,
aber keins der Angegebenen Skripte funktionierte bzw. ich hab wohl zu viele Falsche Angaben in meinem Asterisk.

Was ich hinbekommen habe ist eine alte Version von SIP-Communicator per
Knopfdruck in JWS einzubinden, also ohne installieren.

Jedoch soll mein Klicker eben keine Möglichkeit erhalten, die Nummer selber einzugeben, oder sonstige Änderungen zu machen.
Also müsste man hier die Nummer automatisch eintragen, wählen und das Fenster verbergen.
Dies erschien mir zu umfangreich für einen simplen "Click2Call" <-richtig?

Bei den hier gefundenen Lösungen, sollte ich ja jeweils über die Manager.conf eine Verbindung bekommen, leider sehe ich auf meinem Asterisk in keiner Form auch nur den Versuch sich zu connecten.

Wäre für Eure Hilfe sehr dankbar

mfg
bigfootblue
 
Hallo bigfootblue, willkommen im Forum,

da Du was von der manager.conf schreibst, gehe ich davon aus, dass Du schon etwas mit AMI rumprobiert hast. Dein Beitrag liest sich ein wenig so, als wäre die Website bei irgendeinem Hoster und der Asterisk bei Dir daheim. Hast Du dafür gesorgt, dass der AMI Port von außen erreichbar ist?

Grundsätzlich ist das der richtige Weg, per CGI/PHP/... eine AMI Verbindung aufzubauen und ein originate abzusetzen. Sollte der Aufruf wirklich aus dem Internet kommen, würde ich lieber den Umweg über einen lokalen HTTP-Server gehen, damit die AMI Befehle nicht übers Internet gesendet werden müssen.

Rentier
 
Hallo rentier-s,

erstmal danke für deine schnelle Antwort.
Und nein der Webserver soll später bei mir lokal laufen, derzeit teste ich noch mit Apache und wäre froh wenn es darüber laufen würde. :spocht:

das hab ich in der Manager.conf bereits eingestellt:
Code:
[general]
enabled=yes
port=5038
bindaddr= 0.0.0.0
displayconnects=yes
webenabled=yes

[admin]
secret=meinpassworthier
permit=127.0.0.1 ;Wen genehmigt er hier??
permit=111.2.3.4/255.255.255.0 ;Hatte hier meine IP des Webservers testweise
read=all,system,call,log,verbose,command,agent,user,config
write=all,system,call,log,verbose,command,agent,user,config

die Versuche über php/html das alles zu erledigen sehen alle ungefähr ähnlich aus, aber ich sehe nicht einmal ein Versuch zur Einwahl in der CLI

Ich hab mir zuletzt hier diese Version angeschaut.
Eventuell hab ich auch einen Denkfehler drin, ich überlege schon die ganze Zeit ob es überhaupt geht, ohne Softphone sich am Asterisk anzumelden.

Wie gesagt zunächst soll das alles ganz unspektakulär sein, ohne Log, ohne Voicebox, ohne Datenbank ohne Schnickschnack.

Nur übers Web muss es laufen und ohne lokal installierten Client der sich einloggt.

[Edit:] der Webserver läuft auf einem anderen Rechner als der Asterisk aber im Netz erreichbar
bigfootblue
 
Zuletzt bearbeitet:
Hallo bigfootblue,

bei permit muss auf jeden Fall die Adresse rein, von der aus die AMI Verbindung aufgebaut werden soll. Also Dein Webserver.
So lange die AMI Verbindung nicht übers Internet läuft, ist das schon mal gut (=sicherer). Trotzdem sulltest Du dem Benutzer nur Rechte für call geben.

Wenn Du PHP nehmen willst, da kann man eine TCP Verbindung aufbauen und dann die AMI Kommandos schicken. Schau Dir dazu mal den Befehl originate an, der funktioniert ähnlich wie ein call-File ("Asterisk Auto-Dial"). Da gibst Du den Channel an, den Asterisk als erstes aufbauen soll. Sobald jemand abnimmt, wird er in den angegebenen Context gelegt. Ob das ein lokaler SIP Benutzer oder eine externe Nummer ist, ist egal.

Ich hab zuhause ein Beispiel, wie das grundsätzlich mit PHP geht. Kann ich Dir gerne heute Abend noch schicken. Vielleicht findest Du unter "PHP AMI" auch was bei Google.

Rentier
 
hi rentier-s,
ich werde heute noch ein wenig versuchen das hinzubekommen,
aber es wäre trotzdem nett, wenn du mir ein unterstützendes File senden oder hier coden könntest.
Im übrigen habe ich mir das mit dem "permit" schon gedacht und hab vorsichtshalber sowohl die 127.0.0.1 und die reale IP eingetragen, geholfen hats bis jetzt nix.
Reicht es denn die Rechte auf Call zu legen? Ich hatte es bisher immer so verstanden, dass man sich da als Manager einloggt und dementsprechend für die "simulierte" Konsole mehr Rechte benötigt?

Grüße,
bigfootblue
 
Hallo bigfootblue,

hab grad auf http://www.voip-info.org/wiki/view/Asterisk+manager+API gesehen, dass es ab 1.6 eine neue Berechtigung namens originate gibt. Wenn Du die, oder bis 1.4 eben call vergibst, dann reicht das zum Erzeugen eines Anrufs vollkommen.

Das hier ist der Teil meines PHP. Die Variablen sind nicht sonderlich gesichert, weil das in einem kennwortgeschützten Bereich liegt.
PHP:
function ami($command) {
    global $socket;
    fwrite ($socket, $command);
    $response = stream_get_contents($socket);
    if ($response == false) return "Fehlen beim lesen der Serverantwort.";
      else return $response;
  }

$server = "127.0.0.1";
$amiuser = "phporiginate";
$amipass = "geheim";

$nebenstelle = "SIP/" . preg_replace("/[^0-9]/","",$_POST['nebenstelle']);
$zielnummer = preg_replace("/[^0-9]/","",$_POST['zielnummer']);

if ($socket = fsockopen($server, 5038)) {
    stream_set_timeout($socket, 0, 200000);
    ami("Action: Login\r\nUserName: $amiuser\r\nSecret: $amipass\r\n\r\n");
    ami("Action: Originate\r\nChannel: $nebenstelle\r\nContext: abgehend\r\nPriority: 1\r\nExten: $zielnummer\r\n\r\n");
    ami("Action: Logoff\r\n\r\n");
    fclose($socket);
  }

Genaueres zum originate findest Du noch unter http://www.voip-info.org/wiki/view/Asterisk+Manager+API+Action+Originate

Svenja
 
hallo Svenja,

man bekomt ja immer rasend schnell eine Antwort von dir :D
Ersteinmal, endlich konnte ich dank deines Skripts überhaupt eine Verbindung mit der AMI herstellen, schonmal vielen lieben Dank dafür.
Ich hatte das bisher immer versucht auf diesen oder ähnlichem Weg zu lösen:
Code:
$oSocket = fsockopen ("localhost", 5038, $errno, $errstr, 20);
 if (!$oSocket) {
  echo "$errstr ($errno)<br>\n";
} else {
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Events: off\r\n");
fputs($oSocket, "Username: $strUser\r\n");
fputs($oSocket, "Secret: $strSecret\r\n\r\n");
fputs($oSocket, "Action: originate\r\n");
fputs($oSocket, "Channel: SIP/$strChannel\r\n");
fputs($oSocket, "WaitTime: $strWaitTime\r\n");
fputs($oSocket, "CallerId: $strCallerId\r\n");
fputs($oSocket, "Exten: $number\r\n");
fputs($oSocket, "Context: $strContext\r\n");
fputs($oSocket, "Priority: $strPriority\r\n\r\n");
fputs($oSocket, "Action: Logoff\r\n\r\n");
sleep(2);
fclose($oSocket);
 }

Wie gesagt geklappt hat das nicht einmal annähernd.

Aktueller Stand:
-er loggt sich korrekt ein
-er ruft die Nummer an die du hier "Nebenstelle" nennst, aber nur wenn ich sie so schreib:
Code:
$nebenstelle = "SIP/2000" . preg_replace("/[^0-9]/","",$_POST['2000']);
-sobald ich an diesem Softphone abnehme, disconnected mich Asterisk
-der eingehende Anruf wird als "asterisk" geloggt

ich hab nun schon versucht mit CallerId und Extension rumzuspielen, aber irgendwie stellt sich nicht das gewünschte Ergebnis ein.
Nun nochmal meine konkrete Frage:
Benötige ich 2 Softphones, oder kann ich aus dem Browser heraus ein anderes Softphone anrufen?

Dann dachte ich ok, eventuell muss ich eine Extension anrufen, die den Anruf weiterleitet also in der Art:

exten -> 1111,1,Dial(SIP/0190)

aber auch das klappte nicht, hab ich da ein Denkfehler?
Meine Intension war:
Nebenstelle = Nummer die ich nutze um den anderen anzurufen
Zielnummer = Nummer des Anderen den ich anrufen will

Irgendwo häng ich in einer Endlosschleife :D

Mfg
David
 
Hallo David,

Dein Skript macht im Prinzip nichts anderes als meins, hätte also durchaus funktionieren können. Das Events: off darf aber glaube ich nicht ins Login. Das musst Du wenn dann nachher als eigenes Kommando schicken.

PHP:
$nebenstelle = "SIP/" . preg_replace("/[^0-9]/","",$_POST['nebenstelle']);
funktioniert natürlich nur, wenn Du von einem Formular per POST das Feld nebenstelle geliefert bekommst.
Code:
<form ... method="post"><input type="text" name="nebenstelle"></form>
Genau so die zielnummer.

Ich glaube, Dir ist das Prinzip von Auto-Dial noch nicht ganz klar. Zuerst wird die Verbindung aufgebaut, die als Channel angegeben wird. Da kannst Du alles verwenden, was Du in einem Dial-Befehl im Dialplan verwenden könntest. Sobald dort jemand abnimmt, wird er in Context,Priority,Exten geschoben.

In meinem Fall ist das so, dass zuerst die Nr. nebenstelle über SIP angerufen wird. Nimmt dort jemand ab, springt Asterisk in den Context abgehend und tut so, als hätte derjenige die zielnummer selbst gewählt.
Code:
[abgehend]
exten=>_X.,1,Dial(CAPI/ISDN1/${EXTEN})

Svenja
 
Vielen lieben Dank Svenja,

der Fehler lag darin, dass ich mein Asterisk nicht reloaded hatte ;)

Dieses Click2Call(Back) funktioniert nun, auch wenn ich bspw. noch nicht weiß, wie ich Asterisk beibringe die korrekten Leitungsbezeichnungen mitzusenden, damit man sieht, mit wem man verbunden ist.

Und nun mein großes ABER :D

ich würde das ganze eben am liebsten ohne installierte Softphones lösen,
so wie bei denen hier.
Dort gibt es auch diesen Callbutton und die E/A funktioniert rein über den Webbrowser.
Natürlich könnte ich jetzt deren Dienst nutzen, aber ich möchte nicht unnötig fremde Dienste in Anspruch nehmen.

Weißt du dazu eine Lösung?
Wie gesagt ich dachte, eigentlich sollte das nicht schwer sein, jedoch funktionierte bis jetzt keiner meiner eingeschlagenen Lösungswege :(

lieben Gruß,
David
 
Hallo David,

die Nummer des Anrufers kannst Du mittels CallerID: im originate mitschicken.

So weit hatte ich gar nicht gedacht, dass Du den gesamten Client in der Homepage integriert haben willst. Ich hatte mir das so vorgestellt wie diese "kostenlos telefonieren"-Buttons bei goyellow. Da gibt man seine eigene Telefonnummer ein und klickt auf anrufen. Dann klingelt das Telefon, man nimmt ab, hört ein wenig Werbung und wird verbunden. Das wäre ja das was Du jetzt hast, nur dass zuerst die externe Nummer angerufen wird.

Für Dein Vorhaben müsstest Du Dich erst mal auf die Suche nach einem Browser-basierten Softphone machen.

Svenja
 
Hallo Svenja,

ja genau das ist mein Problem :)
Es gibt nur wenige "freie" webbased Softphones und die laufen dann meist nicht oder nur unter bestimmten Bedingungen.
Ich schaue mir gerade Red5 bzw. openfire an, aber so richtig schlau werd ich nicht daraus, naja aber wie gesagt dank deiner Hilfe hab ich wieder was nützliches dazu gelernt, Danke.
Falls du oder jmd. Anderes noch eine Idee hat wie man das einfach und kostenfrei lösen könnte, ich bin für jeden Hinweis dankbar.

Schönen Gruß,
David
 
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.