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.
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...