martes, 23 de julio de 2013

Asterisk: Generar llamada automática de acuerdo al clima en una ciudad

Una de las posibilidades que tenemos con Asterisk es que podemos realizar llamadas automatizadas a travez de nuestros scripts en diferentes lenguajes de programación: PHP, Perl, Java, C, en fin, mediante una interfaz transparente al usuario haciendo modificaciones o consultando bases de datos, consultando estados de variables, controlar el dialplan, etc.. haciendo la llamada desde el archivo extensions_custom.conf y por medio de un archivo .call  , y todo esto gracias a Asterisk Gateway Interface (AGI) .


Manos a la obra:

-En la el archivo de extensions_custom.conf agregamos la extension 7307 en la cual mediante AGI llamaremos al script php.

extensions_custom.conf

exten => 7307,1,Answer
exten => 7307,2,AGI(/var/lib/asterisk/agi-bin/mencionar_clima.php)
exten => 7307,3,Hangup


-Ahora escribimos el script que creara el archivo .call , el cual es el que realizara la llamada automáticamente siempre y cuando la temperatura sea mayor a 31 (Este script lo podemos colocar en la ruta /var/lib/asterisk/agi-bin/ ) la temperatura ustedes la pueden ajustar a sus necesidades:

llamada_clima.php

#!/usr/bin/php -q

<?php

$asterisk_outgoing = "/var/spool/asterisk/outgoing/";

$asterisk_tmp = "/tmp/";

$asterisk_cid = "Clima<000>"; 


$temp=file_get_contents('http://www.interactivahn.com/climahonduras/sensores/lugares_turisticos.php');

        if($temp>31){

                $callfile = "/$asterisk_tmp/arduino_call.txt";

                $call = fopen($callfile, 'w') or die("can't open file");


                $call_data="Channel:SIP/7306\nExtension:7307\nCallerID:$asterisk_cid";

                fwrite($call, $call_data);

                fclose($call);
                 chmod ("/$asterisk_tmp/_call.txt", 0666);

                 chown ("/$asterisk_tmp/_call.txt", "asterisk");

                 chgrp ("/$asterisk_tmp/_call.txt", "asterisk");

                rename("/$asterisk_tmp/_call.txt","/$asterisk_outgoing/_call.call");
        }

?>

Con este código creamos el archivo en .call en la ruta de outgoing que revisa el Asterisk para realizar la llamada cuando encuentre un nuevo archivo en la carpeta.

Donde Channel:SIP/7306 es la extensión a donde va dirigida la llamada y Extension:7307 es la extencion a que ejecuta el AGI con la línea que anteriormente escribimos (exten => 7307,2,AGI(/var/lib/asterisk/agi-bin/mencionar_clima.php)
)

-Ahora nos falta el archivo mencionar_clima.php que es el que nos habla cuando contestamos la extesion 7306:


#!/usr/bin/php -q

<?php

require("phpagi.php");
$agi = new AGI();


   $return = $agi->get_data('beep', 30000, 1);
  //Nos muestra la temperatura actual de San Pedro Sula, Honduras
   $temp=file_get_contents('http://www.interactivahn.com/climahonduras/sensores/tempsps.php');
   $text="La temperatura en s p s es de ".$temp." grados centigrados";

    $agi->text2wav($text);


?>

-Lo que nos queda es programar en el crontab para que se ejecute periódicamente el archivo llamada_clima.php y si en la hora que se ejecuta la temperatura sobrepasa los 31 grados centigrados, efectuara la llamada.

Este script con algunas modificaciones podría servir para Hoteles, en donde los huéspedes puedan programar "alertas" para el clima con una llamada a la central telefónica (Asterisk), y que les llame cuando la temperatura este en el punto que ellos desean para salir o que les avise si habrá lluvia a determinada hora.

Hay tantas posibilidades, el limite es su imaginación.

2 comentarios :

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

por favor puedes hacer un video explicando paso a paso.. no entiendo algunos comandos

Publicar un comentario

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host