I cookies ci aiutano a fornire i nostri servizi.

Continuando la navigazione sul sito accetti l'utilizzo dei cookies da parte nostra. Per saperne di piu'

Approvo

Ing. Giuseppe Mazzucato

Consulenza Informatica ed Organizzativa

Logo

Configurazione di una GSMbox con Asterisk


La connessione ai sistemi di comunicazione aziendale delle cosiddette GSM box è piuttosto diffuso per risparmiare sul costo delle telefonate verso rete mobile. Vedremo qui migliorare l'usabilità di questa soluzione e aggiungere anche la funzione di SMS to eMail.

 

Le GSMbox

Si tratta di dispositivi che contengono una o più schede SIM e che hanno un'interfaccia verso il PBX, che nel caso di asterisk è preferibile sia di tipo SIP.

Il principale motivo per cui vengono installate è quello di risparmiare sulle telefonate verso rete mobile utilizzando le tariffe mobile-mobile invece delle più costose fisso-mobile.

Il mercato offre molte diversi modelli di molti produttori, riportiamo qui considerazioni per i modelli prodotti da Portech che però sono generalizzabili anche a i dispositivi di altri produttori.

Il problema delle richiamate

Il principale problema nell'uso delle GSMbox è che il numero con il quale esce la chiamata è quello della SIM e non quello del centralino o dell'interno. In caso quindi il chiamato non risponda e poi richiami il numero che ha ricevuto nella migliore delle ipotesi risponde il centralinista che però non sa quale sia l'interno che ha cercato l'interlocutore.

Fortunatamente con Asterisk si può ovviare a questo problema memorizzando nel database gli interni che chiamano i numeri di cellulare e presentando in caso di richiamata un menu vocale tipo "Benvenuti in xxx, prema 1 per parlare con il centralino e 2 per  parlare con l'ultimo interno che ha chiamato il suo numero".

La configurazione di asterisk

la GSMbox viene vista da asterisk con un qualsiasi gateway, analogamente a quelli analogici o ISDN. In rete si trovano diverse guide per la configurazione delle GSMbox, ad esempio per i modelli della portech ne è disponibile una dettaglia a questo link.

Per realizzare la funzione di gestione delle richiamate, se si utilizza freepbx, è sufficiente inserire il codice qui sotto nel file extensions_custom.conf.

[macro-dialout-trunk-predial-hook]
exten => s,1,NoOp(Trunk ${OUT_${DIAL_TRUNK}} selected)
exten => s,n,Gotoif($["${OUT_${DIAL_TRUNK}:0:12}" != "AMP:SIP/1050"]?skip) ; Controlla se il trunk in uscita è quello della GSMBOX
exten => s,n,NoOp(${REALCALLERIDNUM} is calling ${OUTNUM})
exten => s,n,Set(DB(GSM/${OUTNUM})=${REALCALLERIDNUM}) ; Memorizza in DB il numero chiamante e il chiamato
exten => s,n(skip),MacroExit()

[from-gsm]
exten => 1150,1,NoOp(gms inbound call from ${CALLERID(name)})
      same => n,GotoIf(${DB_EXISTS(GSM/${CALLERID(name):3})}?found) ;Controlla se il numero chiamante era stato memorizzato
      same => n,Goto(from-pstn,1150,1) ; se non trovato passa al centralino
      same => n(found),Set(COUNT=5)
      same => n,Answer()
      same => n,Playback(silence/1)
      same => n(menu),Set(COUNT=$[${COUNT} - 1])
      same => n,Background(custom/GSM)
      same => n,WaitExten(10)

      exten => 1,1,Goto(from-pstn,1150,1); se 1 passa al centralino

      exten => 2,1,Goto(from-internal,${DB(GSM/${CALLERID(name):3})},1) ; se 2 al numero memorizzato

exten => i,1,GotoIf($[${COUNT} > 0]?continue)
    same => n,Hangup()
    same => n(continue),Playback(conf-errormenu)
    same => n,Goto(1150,menu)

exten => t,1,GotoIf($[${COUNT} > 0]?1150,menu)
    same => n,Hangup()

 SMS to email

Le GSM box hanno anche la possibilità di inviare e ricevere SMS, questa possibilità può essere sfruttata ad esempio per trasformare gli SMS in arrivo in email che possono poi essere processate da applicativi di gestione.

Si riporta di seguito un esempio di script in php che può servire allo scopo lanciandolo periodicamente da cron.


#!/usr/bin/php -q  
   
<?php

//connecting to GSM Gateway via socket  
 $host   = 'Ip address gateway';  
 $username = 'voip';  
 $password = '1234';
 $debug = false;
 $to = 'destination email address';


 $fp = NULL;

function sendcommand($cmd) {
   global $fp,$debug;
   fputs($fp, $cmd, strlen($cmd));  
   if ($debug) echo "$cmd\n";
   sleep(2);  
   $ans = fread($fp, 4096);  
   if ($debug) echo $ans;
   return $ans;
   }
 
 
 $fp    = fsockopen("$host", 23, $errno, $errstr, 30);  //23 -- telnet port
 if (!$fp) {  
   echo "$errstr ($errno)<br />\n";  
   die;  
 }  
sleep(2);  

sendcommand("$username\r");          // Username
sendcommand("$password\r");          // Password  
sendcommand("module1\r");         // Access module 1
sendcommand("at+cmgf=1\r");          //Select SMS Message Format... (0=PDU Mode, 1=Text Mode)  
$retvalue = sendcommand("at+cmgl=\"REC UNREAD\"\r");          // List al received uread messages
$lines = explode("\n", $retvalue);
$count = 0;
$messages = array();
while ($count < (count($lines)-2)) {
 $temp= explode(",", $lines[$count]);
 $index= explode(" ",$temp[0]);
 $messages[]= array("index"=>$index[1],"stat"=>trim($temp[1],"\""),"oa"=>trim($temp[2],"\""),"time"=>trim($temp[4],"\""),"msg"=>$lines[$count+1]);  
 $count +=2;
 }


foreach ($messages as $mess) {
 $subject = "Ricevuto SMS da: ".$mess['oa']." in data: ".$mess['time'];
 $message = $mess['msg'];
 $headers = 'From: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.' . "\r\n" .
    'Reply-To: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
 $parameters = "-r Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.";

 echo $subject."\n";
 mail($to, $subject, $message, $headers,$parameters);
 sendcommand("at+cmgd=".$mess['index']."\r");          //Select SMS Message Format... (0=PDU Mode, 1=Text Mode)  
 
}

sendcommand("\x18");             // Exit module 1 typing ctrl-X       
sendcommand("logout\r");         // Logout       

fclose ($fp);


?>

I commenti possono essere inseriti solo dagli utenti registrati

Cerca nel sito

Chiamaci

Powered by WebRTC

Non è la specie più forte a sopravvivere, nè quella più intelligente ma la specie che risponde meglio al cambiamento

Charles Darwin