Introducción

PHP


Click2Call desde página web
  • Ejemplo de web con botón de "llámame"
<html>

<body>
    <div>
        <input id="number" placeholder="número"/>
        <button type="button" onclick="callme()">llamame</button>
    </div>
    <div id="result"></div>

    <script>
        function callme() {
            var XHR = new XMLHttpRequest();
            XHR.addEventListener('readystatechange', function() {
                if (XHR.readyState == 4 && XHR.status == 200) {
                    document.getElementById("result").innerHTML = XHR.responseText;
                } else {
                    document.getElementById("result").innerHTML = "ha ocurrido un error: " + XHR.responseText
                }
            });

            var FD  = new FormData();
            FD.append('number', document.getElementById("number").value);
            XHR.open('POST', 'doC2c.php');
            document.getElementById("result").innerHTML = "enviando peticion..."
            XHR.send(FD);
        }
    </script>
</body>
</html>
  • Código PHP que gestiona la petición y genera el click2call
<?php

$apikey = ""; //PON AQUI TU API KEY
$origin = ""; //PON AQUI LA EXTENSION DONDE QUIERES QUE SUENE

if ($apikey == "") {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    echo "Falta especificar el apikey, edita el fichero PHP y complete la variable apikey con el apikey correspondiente.";
    die();
} else if ($origin == "") {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    echo "Falta especificar la extension de origen, edita el fichero PHP y complete la variable apikey con el apikey correspondiente.";
    die();
} else {
    $opts = array(
       'http' => array(
           'method' => "GET",
           'header' => "Content-type: application/json\n"
                       ."X-Api-Key: ".$apikey,
       )
    );

    $context = stream_context_create($opts);
    $response = file_get_contents("https://vpbx.me/api/originatecall/".$origin."/".$_POST['number'], false, $context);

    //echo $response;
    echo "llamando...";
}
?>
Recuperar llamadas realizadas
<html>
<head></head>
<body>
<h2>POST - /cdr</h2>
<?php

$apikey = "";   //RELLENAR LA VARIABLE CON EL APIKEY FACILITADO

if ($apikey == "") {
    echo "Falta especificar el apikey, edita el fichero PHP y complete la variable apikey con el apikey correspondiente.";
} else {

$from = 1445292000000; // 20-10-2015 00:00:00
$to   = 1445378399000; // 20-10-2015 23:59:59

$data = json_encode(array(
    'from' => $from,
    'to' => $to
));

echo "<h4>POST JSON</h4>";
echo $data."</br>";

$opts = array(
   'http' => array(
       'method' => "POST",
       'header' => "Content-type: application/json\n"
                   ."X-Api-Key: ".$apikey,
       'content' => $data
   )
);

$context = stream_context_create($opts);

$html = file_get_contents("https://vpbx.me/api/cdr", false, $context);

echo "<h4>Response</h4>";
echo $html;

//para usar la respuesta programaticamente:
//$json = json_decode($html);
//foreach ($json as $call) {
//    echo $call->callId."<br>";
//}
}
?>
</body>
</html>
Consulta y descarga de llamadas grabadas
<?php

$apikey = "";   //RELLENAR LA VARIABLE CON EL APIKEY FACILITADO

if ($apikey == "") {
    die("Falta especificar el apikey, edita el fichero PHP y complete la variable apikey con el apikey correspondiente.\n");
}

///////////////////////////////////////////////
// Datos del filtro para hacer la petición
///////////////////////////////////////////////

// fecha de inicio
$from = "01-02-2017 10:00:00";
// fecha de fin
$to = "01-02-2017 16:00:00";
// destino de la llamada
$dst = "966261122";

//////////////////////////////////////////////////
// Pasamos las fechas a timestamp en milisegundos
//////////////////////////////////////////////////

// desde
$fromMilis = strtotime($from) * 1000;
// hasta fecha
$toMilis = strtotime($to) * 1000;


//////////////////////////////////////////////////
// Componemmos el fitro en json
//////////////////////////////////////////////////
$data = json_encode(array(
    'from' => $fromMilis,
    'to' => $toMilis,
    'dst' => $dst
));

//////////////////////////////////////////////////
// Opciones para la petición web (autenticación)
//////////////////////////////////////////////////
$optsGetCdr = array(
   'http' => array(
       'method' => "POST",
       'header' => "Content-type: application/json\n"
                   ."X-Api-Key: ".$apikey,
       'content' => $data
   )
);

//////////////////////////////////////////////////
// Lanzamos la petición
//////////////////////////////////////////////////

$contextGetCdr = stream_context_create($optsGetCdr);

$rawResponse = file_get_contents("https://vpbx.me/api/cdr", false, $contextGetCdr);

// parseamos la respuesta
$json = json_decode($rawResponse);


////////////////////////////////////////////////////////////////
// Procesamos la respuesta iterando por los registros obtenimos
////////////////////////////////////////////////////////////////

// opciones http para obtener la grabación
$optsRecording = array(
   'http' => array(
       'method' => "GET",
       'header' => "X-Api-Key: ".$apikey,
   )
);

$contextRecording = stream_context_create($optsRecording);

foreach($json as $call) {
    // si hay grabación
    if ($call->recording == 1) {
        // obtenemos el id de la llamada
        $callId = $call->callId;
        // nombre que tendrá el fichero: "src_dst_callId.mp3"
        $fileToSave = "/tmp/" . $call->src . "_" . $call->dst . "-" . $callId . ".mp3";
        // obtenemos el fichero
        file_put_contents($fileToSave, file_get_contents("https://vpbx.me/api/recording/" . $callId, false, $contextRecording));
        echo "Grabación " . $fileToSave . " guardada.\n";
    }
}

?>