SMSgateway: inviare migliaia di SMS dal proprio smartphone Android

Per motivi di lavoro mi sono trovato a dover spedire circa 3000 SMS ad altrettanti destinatari nel più breve tempo possibile. In passato mi ero già avvalso di sistemi automatizzati totalmente via web, come Skebby, ma questa volta, per tutta una serie di motivi contabili, non era possibile usare il medesimo strumento.

2015-10-13 09.28.21

Mi sono così chiesto se esistevano strumenti per sfruttare la propria utenza di telefonia mobile per l’invio di bulk SMS ed ho così scoperto un servizio comodissimo che permette di inviare SMS dal proprio smartphone Android utilizzando delle API via web: SMSGateway.me. Probabilmente di servizi analoghi ne esisteranno anche altri (liberi di segnalarli, se lo ritenete opportuno) ma essendo stata una esperienza comunque positiva, trovo corretto fargli un minimo di pubblicità gratuita 🙂

Il funzionamento del sistema è piuttosto semplice: si installa sul proprio smartphone la loro app SMS Gateway, disponibile su Google Play, e si registra un account gratuito sulla loro piattaforma. A questo punto, seguendo le istruzioni per usare le API (gli esempi sono in PHP ma le chiamate funzionano con qualunque linguaggio), si predispone l’invio degli SMS.

Per funzionare, mi sembra chiaro, il proprio smartphone Android deve essere collegato alla Rete via GPRS o WiFi, così da poter ricevere i dati dal servizio.

Ad esempio, avevo un file CSV (Comma Separated Value) contenente i campi NOME, COGNOME, EMAIL, NUMERO DI CELLULARE. Con il seguente script ho comodamente inviato più di 3000 SMS, aggiungendo anche il controllo e la normalizzazione del numero telefonico sfruttando la libreria libphonenumber:

[...]
include "../smsGateway.php";
include_once "../libphonenumber/NumberFormat.php";

$smsGateway = new SmsGateway('[nome utente]', '[password]');

$deviceID = [numero dispositivo];
$smsMessage = "[messaggio da inviare]";

$options = [
  'expires_at' => strtotime('+1 hour') // Cancel the message in 1 hour if the message is not yet sent
];

if(($handle = fopen("destinatari.csv", "r")) !== FALSE) {
  while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    // Destinatario
    $destinatario = ucfirst(strtolower($data[0]))." ".ucfirst(strtolower($data[1]));
    // Invia SMS
    if(strlen($data[2]) > 5) {
      try {
        $numberProto = $phoneUtil->parse($data[2], "IT");
      } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
        continue;
      }
      if($phoneUtil->isValidNumber($numberProto)) {
        $number = $phoneUtil->format($numberProto, E164);
        echo "Sending SMS to $destinatario number $number...";
        // Splitta l'SMS in pezzi da 160 caratteri se il messaggio è troppo lungo
        $text = explode('\n',wordwrap($smsMessage, 160, '\n'));

        foreach($text as $chunk) {
          // Invia SMS
          $result = $smsGateway->sendMessageToNumber($number, $chunk, $deviceID, $options);
          // Verifica l'esito dell'invio...
          $c++;
          $esito = intval($result['response']['success']);
          if($esito > 0) {
            echo "OK\n";
          } else {
            echo "Errore !\n"
          }
        }
      } else {
        echo "Invalid number $data[2]<br>\n";
      }
    }
  }
}
echo "Just sent $c SMS !\n";

Ovviamente lo script è migliorabile ma può essere un buon punto di inizio per iniziare la propria campagna di comunicazione via SMS…

4 comments
Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.