[HowTo] Click to Call mit PHP und Asterisk

derjanni

Neuer User
Mitglied seit
22 Sep 2009
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
Hallo liebes Forum,

ich habe hier länger gewühlt und leider keine Lösung für mein Problem gefunden, wie man mit PHP auf Apache unter Linux zwei Telefonate zusammenschaltet. Auch online hab ich nur wenig gefunden und mich mühsam im IRC und in der Doku durchgewühlt. Als ehrlicher Open Source Nutzer bin ich nun natürlich dazu verpflichtet mein errungenes Wissen und meinen geschriebenen Code Preis zu geben. Meinen kompletten Artikel (mein Asterisk läuft übrigens auf Raspberry Pi) findet Ihr auf meinem Blog: Click to Call mit PHP.

Der PHP Quellcode für Click to Call ist im Prinzip ein Einzeiler, wenn man das ganze Drumherum weg denkt.

PHP:
/* JSON API for calling */
$passwd = "Mein Passwort";
 
// default standard result
$result = array("status" => "no-request", "num1" => "", "num2" => "");
 
if(array_key_exists("num1",$_GET) == true
        && array_key_exists("num2",$_GET) == true
        && array_key_exists("key",$_GET) == true){
 
        // secret key is a hash of the number and the passwd
        $secretKey = md5($_GET["num1"].$_GET["num2"].$passwd);
 
        if($_GET["key"]==$secretKey){
                $num1 = $_GET["num1"];
                $num2 = $_GET["num2"];
 
                /* check if both numbers start with a +*/
                if(substr($num1,0,1)=="+" && substr($num2,0,1)=="+"){
                        $num1 = substr($num1,1);
                        $num2 = substr($num2,1);
                        if(is_numeric($num1)==true && is_numeric($num2)){
                                shell_exec("sudo asterisk -rx "originate Local/000"
                                        .$num1."@outgoing "."extension 000".$num2."@outgoing"");
 
                                $result = array("status" => "call-initiated",
                                                "num1" => $num1, "num2" => $num2);
                        }else{
                                $result["status"] = "number-invalid";
                        }
                }else{
                        $result["status"] = "number-invalid";
                }
        }else{
                $result["status"] = "auth-failure";
        }
}
 
// output the result
header("Content-type: application/json");
echo(json_encode($result));

Dazu habe ich mir auch eine kleine jQuery Mobile Web-App geschrieben, die selbstverständlich auch unter Apache Lizenz veröffentlicht ist:
https://code.google.com/p/click-to-call-webapp/

click-to-call-webapp_250.png


Viele Grüße, Jan
 
Der sieht bei mir wie folgt aus:
Code:
[outgoing]
exten => _0.,1,SIPAddHeader(P-Preferred-Identity: <sip:[email protected]>)
exten => _0.,2,Set(CALLERID(number)=4922419559860)
exten => _0.,3,Dial(SIP/${EXTEN:1}@localphone,30,tr)

Ich habe versucht möglichst viel Sicherheit in meine Anwendung zu legen und so gibt es dort ja auch einen Google-Login sowie Prüfung der eingegebenen Daten und keinen direkten Zugriff auf den Raspberry Pi mit dem Asterisk. Den Outoging-Kontext kann man mit Sicherheit noch besser absichern.
 
Zuletzt bearbeitet von einem Moderator:
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.