tinsms

Lo script descritto in questa pagina è stato recentemente incluso - come modulo gateway- nella libreria PERL WWW-SMS (CPAN WWW::SMS).

 

Indice

 

Premessa


Chiunque abbia sottoscritto un abbonamento con Telecom ADSL di tipo ALICE-TIN)ha a disposizione 10 SMS al giorno gratuiti da poter inviare attraverso l'interfaccia web messa a disposizione del provider. Tale interfaccia spesso risulta lenta e di non pratico accesso all'utente che ha la necessità di dover rapidamente inviare un SMS trovandosi alla console del proprio PC. Da questa esigenza nasce il programma tinsms: uno script PERL che - da linea di comando terminale - è in grado di raggiungere la pagina web del provider, autenticarsi ed inviare un messaggio SMS in completa trasparenza per l'utente.

 

Notifica da server remoto

Un utilizzo che ho trovato molto interessante per questo programma, è quello di associarlo a determinati eventi che si verificano in un server remoto cosicchè da ricevere un SMS di notifica sul mio cellulare quando ciò dovesse accadere. A titolo di esempio, il programma potrà essere facilmente associato ai seguenti eventi:

Installazione

Il programmi è stato testato su Ubuntu, ma essendo scritto in Perl garantisce l'esecuzione su qualsiasi distribuzione. L'unica cosa da verificare è che la prima linea del programma punti esattamente alla directory dell'interprete Perl:

#!/usr/bin/perl

Un volta copiato il programma in una directory nella path (es: /usr/bin), con un editor di testi modificate le due variabili $user e $password con i vostri dati di autenticazione al sito Communicator Virgilio. A questo punto sarà sufficiente rendere lo script eseguibile, digitando da terminale:

chmod a+x tinsms

 

Requisiti

Le funzionalità del programma vengono assicurate dalle seguenti librerie Perl:

 

Uso

Digitando solo il nome da un terminale (tinsms) il programma produce in output la versione e l'uso del programma stesso. In uscita invece, visualizza il numero di messaggi inviati nella giornata.

Questa la sintassi di tinsms:

tinsms numero_completo "testo da inviare"


Con numero_completo si intende indicare il numero di cellulare completo di prefisso internazionale. Ad esempio:

 tinsms +393481122334 "Buongiorno Joe. Sto arrivando. Tra 10 min. sono li!"

Il prefisso internazionale può anche essere omesso. In tal caso il programma considera per default +39 (Italia).

Oltre a questo uso classico da command line, il programma tinsms può essere anche usato con il piping da STDIN, secondo questa sintassi (grazie a Sergio Giuffrida per la collaborazione):

 

cat <file> | tinsms -i

 

oppure

 

tinsms -i < <file>

 

laddove <file> contiene il path ad un file il cui contenuto è del tipo:

+393481122334 Buongiorno Joe. Sto arrivando. Tra 10 min. sono li!

In questo caso si possono omettere gli apici. Tutto ciò che segue il numero viene considerato come testo per il messaggio.

Il numero a cui spedire l'SMS può anche essere incluso nella linea di comando (uso misto); in tal caso il file conterrà solo il testo del messaggio:

 

tinsms -i 3481122334 < <file>

 

La sintassi di uso di tinsms attraverso il piping di STDIN consente un'interessante impiego dello script come descritto nell'esempio applicativo "Uso con ProcMail".

 

Uso con rubrica (modifica a cura di snake111 e mattions del forum gentoo)

Oltre alle modalità sopra descritte, il programma può far uso di rubriche registrate in semplici file di testo e salvati in qualunque directory. Sarà suffciente creare un file di rubrica secondo questo semplice formato:

 

mario 3356655434
giovanni 3481234567
carla 3331122343

 

All'interno dello script, occorrerà poi indicare con precisione il path verso il file di rubrica alla variabile $rubrica.

Per usare il programma nella modalità "rubrica", sarà poi sufficiente digitare:

tinsms fabio "Sto arrivando"
Il programma cercherà nella rubrica il nome e chiederà conferma dell'utente prima di inviare il messaggio.

 

 

Un esempio applicativo: notifica da Web-Server

Personalmente ho usato tinsms per ricevere notifiche da un web server nel caso di tentativi non autorizzati di login. All'interno di un programma PHP, qualora la verifica di userid e password non corrispondano con un utente registrato nel database utenti, lo script genera un errore ed attiva la trasmissione di un SMS al mio cellulare, comprensivo dell'indirizzo IP da cui l'errore è stato generato.

Questo è l'esempio di codice:

function check_user($user, $pwd) {
include ("../config.inc.php");
$passwd = md5($pwd);
$sql = "select * from auth where userid = '$user' and pass = '$passwd'";
$result = mysql_query($sql);
if (mysql_num_rows($result) == 1) {
setcookie("user",$user);
setcookie("password",$passwd);
return 1;
} else {
echo "<h3>Sorry, you are not authorized!</h3>";
#log error database
$sql = "INSERT into errorlog (data,ora,utente,azione,nota)
VALUES (curdate(), curtime(),'".$user."', 'Unauthorized login attempt',
'IP=".$_SERVER['REMOTE_ADDR']."')";
mysql_query($sql);
exec ("/home/pippo/tinsms +39335xxxxxxx 'Login errato: ".$user.
" IP: ".$_SERVER['REMOTE_ADDR']."'");
unset($user,$pwd);
return 0;
}

 

Un esempio applicativo: uso di tinsms con ProcMail

(Per questo interessante impiego di tinsms ringrazio Fabrizio Tranchina che ha "costruito" l'idea, e Sergio Giuffrida per la collaborazione al codice.)

Usando tinsms nella sua sintassi con il piping per lo STDIN, il programma consente in pratica di poter avere a disposizione dal proprio cellulare i 10 SMS gratuiti al giorno che mette a disposizione TIN. Sarà suffiente inviare al proprio server di mail un messaggio e-mail da cellulare attraverso il numero 8214 (gratuito per gli utenti con abbonamento TIN). In pratica, inviando dal proprio cellulare un SMS al numero 8214, con questo formato:

SM miaemail@domain.com 34811223344 ci vediamo questa sera

ed implementando un filtro procmail di questo tipo:

:0 c * ^Subject: Da GSM | sed -e '1,/^$/ d' -e '$ d' | /home/user/tinsms -i

procmail la riceve e la gira a tinsms, che la trasforma in SMS per il numero 34811223344. In pratica, quindi, si possono inviare 10 SMS gratuiti al giorno da proprio cellulare!

Nel caso di uso misto di tinsms, si può prevedere l'inoltro al proprio cellulare di e-mail provenienti da particolari utenti. Ad esempio, se voglio ricevere sul mio cellulare le email che mi arrivano da thesaltydog, sarà sufficiente implementare un filtro procmail di questo tipo:

:0 c * ^From.*thesaltydog | sed -e '1,/^$/ d' -e '$ d' | tinsms -i 3381234567

oppure si puo' automatizzare l'invio di uno stesso sms a piu' numeri: se ad esempio "sms" è un file di testo contenente un messaggio e "elenco" è un file di testo contenente l'elenco dei numeri destinatari separati da uno spazio (ad esempio: 33811223344 34755667788 33955113344), posso scrivere:

for numero in `cat elenco`; do cat sms | tinsms -i $numero ; done

 

jTinSMS - Un client Java per il cellulare

L'ottimo Natale Vinto ha sviluppato un client J2ME (Java 2 Micro Edition) per tinsms cu licenza GPL2.
Potete effettuare il download dell'applicazione qui.

Download

Feedback

Se avete bisogno di ulteriori informazioni, o se volete inviarmi un vostro parere, il mio indirizzo è

Donazione

E' possibile effettuare donazioni attraverso PayPal per sostenere tinsms semplicemente facendo clic sul pulsante qui sotto: