versione 1.04, giugno 2026
|
|
Michele Liberi mail: mliberi@gmail.com cell: +393485211456 telegram: @MicheleLiberi |
Un gateway SMS per Android: riceve messaggi da un web server e li consegna via SMS in modo automatico e silenzioso.
| Versione | 1.0.0 |
| Autore | Michele Liberi |
| Piattaforma | Android 9+ |
| API level | 36 |
sendSMS trasforma uno smartphone Android in un gateway SMS: una volta avviata, si collega ad un web server e, non appena riceve un messaggio, lo spedisce via SMS al destinatario indicato. Subito dopo trasmette al web server l'esito dell'invio.
È pensata per essere eseguita in modo continuativo su un dispositivo dedicato, collegato alla rete e con una SIM attiva. Una volta installata, avviata e configurata lavora in autonomia.
La app comunica con un web server tramite una connessione internet (WiFi o dati mobili). Il server gestisce una coda di messaggi SMS da inviare; la app preleva un messaggio alla volta, lo invia e comunica al server l'esito dell'invio.
Il web server di riferimento è configurabile tramite il parametro BASE_URL (il valore di default è https://mliberi.top/cgi-bin).
Per un corretto funzionamento del sistema il web server deve mettere a disposizione due URL:
sms_pop è il programma che invia alla app un nuovo SMS da gestire. Riceve il parametro DEVICE_ID che identifica il device da cui proviene la richiesta.
La risposta deve essere in formato JSON e prevede tre attributi:
Esempio:
La app richiama sms_pop con un timeout di 120s, per cui qualunque risposta inviata oltre questo termina andrà perduta, quindi è opportuno che sms_pop risponda entro questo termine. Se non ci sono SMS in coda da inviare può rispondere con un json vuoto, cioè {}.
sms_ack è il programma che registra sul server l'esito dell'invio. Riceve due parametri:
Nota sulla SIM: la app utilizza sempre la SIM impostata come predefinita per gli SMS nelle impostazioni del telefono. Su dispositivi dual-SIM è possibile scegliere quale SIM usare dalle impostazioni di sistema di Android.
L'interfaccia è volutamente essenziale: mostra soltanto le informazioni necessarie per monitorare il funzionamento del gateway a colpo d'occhio:
Sotto le statistiche è presente un riquadro di log che mostra in tempo reale gli eventi più recenti: ogni messaggio ricevuto, ogni SMS inviato, eventuali errori di rete e le riconnessioni automatiche al server. Il log è visibile solo mentre la app è aperta e non viene salvato in modo permanente.
Consiglio: per un funzionamento ottimale, disabilita l'ottimizzazione della batteria per sendSMS nelle impostazioni di Android (Impostazioni/App/sendSMS/Batteria/Non ottimizzare). Questo evita che il sistema operativo sospenda la connessione al server durante i periodi di inattività.
Nota importante! Per evitare che Android chiuda la app è opportuno disabilitare l'opzione Settings -> Battery -> Background usage limits -> Put unused apps to sleep.
Sì. sendSMS continua a funzionare anche con lo schermo spento o il telefono bloccato, purché la connessione internet sia attiva e l'ottimizzazione della batteria sia disabilitata per la app.
La app rileva automaticamente l'interruzione e riprova la connessione al server dopo 90 secondi. Non è necessario alcun intervento manuale.
Se la app viene chiusa manualmente, il gateway si interrompe. Per riprendere il funzionamento è sufficiente riaprirla. I messaggi accodati sul server nel frattempo verranno elaborati non appena la connessione viene ristabilita.
No. Il Device ID è un identificativo assegnato da Android al dispositivo e rimane invariato anche dopo aggiornamenti della app. Cambia soltanto in caso di ripristino alle impostazioni di fabbrica del telefono.
Il consumo di dati è minimo: la connessione al server trasmette solo piccoli pacchetti di testo. Il consumo di batteria è anch'esso contenuto, poiché la app non esegue operazioni continue ma rimane semplicemente in ascolto.
La app utilizza la SIM impostata come predefinita per gli SMS nelle impostazioni di sistema di Android. Per cambiare SIM, vai su Impostazioni/Gestione schede SIM/SMS e seleziona la SIM desiderata.
(c) M. Liberi, last updated: 2026-06-05