Come utilizzare la SMS Machine/HTTP con Visual BasicData di pubblicazione: 17-10-2003 | Versione Italiana | (No English Version) Parole chiave: - How-To - SMS Machine - |
La SMS Machine/HTTP consente di ricevere e trasmettere SMS semplicemente effettuando transazioni HTTP.
Ad esempio, supponendo che la nostra SMS Machine/HTTP risponda all'indirizzo IP 192.168.0.101, per inviare un SMS non dovremo fare altro che richiedere il seguente indirizzo http://192.168.0.101/smssend.cgi, passando in modalità POST il numero ed il testo dell'SMS che intendiamo inviare.
Analogamente per ricevere gli SMS sarà sufficente configurare la SMS Machine/HTTP perchè richiami il nostro indirizzo IP passandoci i parametri dell'SMS ricevuto.
Quello che vogliamo realizzare qui di seguito è un programma di esempio, scritto in Visual Basic 6.0, che ci consenta di trasmettere e di ricevere SMS attraverso la SMS Machine/HTTP.
Di cosa abbiamo bisogno
Per realizzare tutto questo ci servono:
- una SMS Machine/HTTP
- un PC con Visual Basic installato
Invio di messaggi SMS
L'applicazione di invio dei messaggi è contenuta nel file Invio.zip, scaricabile dai link in fondo a questa pagina; una volta lanciata ci consente di specificare l'indirizzo IP della SMS Machine/HTTP, e di inviare messaggi compilando le apposite caselle di testo.
Il funzionamento dell'applicazione è molto semplice: per l'invio tramite la SMS Machine/HTTP abbiamo la necessità di richiamare una pagina che si trova sul server Web interno alla SMS Machine/HTTP stessa, inviandole in POST i parametri dell'SMS da spedire.
Quindi per stabilire la connessione HTTP con la macchina faremo uso del componente Winsock, che è un OCX standard, fornito con Visual Basic. Per includerlo nel nostro progetto occorre semplicemente selezionarlo dal menu Progetto->Componenti.
Per quanto riguarda invece l'invio dei dati dovremo utilizzare un paio di funzioni scritte da noi: la prima (chiamata SendSms nel sorgente) ci consente di costruire una richiesta POST in formato HTTP standard, come farebbe il nostro browser Web:
' Nome host e pagina richiesta
Host = txtIndirizzo.Text 'Indirizzo IP della SMS Machine/HTTP
URI = "/smssend.cgi" 'Pagina da richiedere per l'invio
'Coodifica in formato Url le stringhe da inviare
ReqBody = ""
ReqBody = "num=" + UrlEncode(numero) + "&text=" +
UrlEncode(testo) + "&Pwd=SMS1234&mode=" + Str$(modo)
ContentLength = Len(ReqBody)
'Costruisce l'header della richiesta POST
DataToSend = "POST " + URI + " HTTP/1.1" + vbLf
DataToSend = DataToSend + "Host: " + Host + vbLf
DataToSend = DataToSend + "User-Agent: SMS Machine (http://www.smsmachine.it)" + vbLf
DataToSend = DataToSend + "Content-Type: application/x-www-form-urlencoded" + vbLf
DataToSend = DataToSend + "Content-Length: " + Str$(ContentLength) + vbLf + vbLf
DataToSend = DataToSend + ReqBody + vbLf
Questa funzione, al suo interno, fa uso della seconda funzione che dovremo creare, chiamata UrlEncode; questa funzione non fa altro che "codificare" i caratteri non alfanumerici della stringa passata in un formato standard HTTP (un segno di '%' seguito da un numero esadecimale che rappresenta il codice ASCII del carattere da codificare): ad es il carattere "spazio" verrà tradotto con il suo equivalente "%20".
Ottenute queste due funzioni l'applicazione non necessita di altro: quando si preme il pulsante 'Invia il Messaggio' vengono controllati i dati inseriti (Numero di telefono e lunghezza del messaggio SMS) e quindi viene attivata la sequenza di invio:
- viene chiamata la funzione che genera la richiesta POST
- viene aperto il socket verso la SMS Machine/HTTP
- vengono scritti i dati del POST all'interno del socket
- si attende la risposta della SMS Machine/HTTP
- la connessione viene chiusa
E' possibile seguire tutta la sequenza dei messaggi che vengono scambiati dal PC con la SMS Machine/HTTP nella finestra di Log, presente sulla parte destra del Form dell'applicazione.
A questo punto se tutto è andato bene dovremo vedere nella finestra di Log il messaggio di accettazione del messaggio da perte della SMS Machine/HTTP: "errno=0&desc=SMS queued&SmsIndex=1" ed il destinatario del messaggio lo vedrà arrivare sul suo telefonino.
Ricezione di un SMS
Per ricevere un SMS dobbiamo fare in modo che il nostro PC agisca come un server Web; infatti la SMS Machine/HTTP, al momento della ricezione di un SMS, esegue una richiesta HTTP verso il server da noi specificato in fase di configurazione. Questo è esattamente il comportamento del secondo programmino di esempio, che ultilizza lo stesso controllo Winsock per porsi in attesa di connessioni sulla porta 80, proprio come farebbe un server Web.
Per poter far funzionare l'esempio occore, per prima cosa, avere configurato la nostra SMS Machine/HTTP per fare in modo che, alla ricezione di un SMS, richiami il nostro indirizzo IP. Nel seguito supporremo che tale indirizzo sia 192.168.0.203.
Apriamo quindi il configuratore della SMS Machine/HTTP e scriviamo nell'apposito campo il percorso verso il nostro PC: http://192.168.0.203/index.html. Scegliamo anche la modalità con cui vogliamo che ci vengano trasmessi i parametri: nel nostro caso POST.
A questo punto possiamo lanciare il programma Ricevi.exe. Nella finestra di tale programma sono visibili: il nome del nostro PC, il suo indirizzo IP, i dati dell'ultimo SMS ricevuto ed una finestra di Log in cui possiamo vedere il traffico di rete.
Se la nostra SMS Machine/HTTP è già configurata ed è connessa alla rete dovremo vedere che, ogni 2 secondi circa, una connessione proveniente dal suo indirizzo IP viene aperta è chiusa. Questa connessione è la richiesta di PING che la SMS Machine/HTTP esegue per verificare l'effettiva presenza del server Web; infatti se noi usciamo dalla nostra applicazione Ricevi.exe, il led L2 sulla SMS Machine/HTTP comincia a lampeggiare a brevi intervalli.
Ora tutto è pronto per la ricezione: inviamo un messaggio al numero GSM della SMS Machine/HTTP è vediamo che dopo qualche secondo, nella finestra di Log, appare una connessione diversa dalle altre, contenente i dati in POST del nostro SMS.
Gli stessi dati verranno anche riportati negli appositi campi nella parte sinistra del Form.
Il funzionamento dell'applicazione è semplice: quando il controllo Winsock che ascolta sulla porta 80 riceve dei dati, richiama l'evento Rete_DataArrival. Se la connessione non contiene il POST i dati vengono scartati e si torna in ascolto. Se invece i dati contengono il POST viene eseguita la funzione ParseMessage, riportata qui sotto:
' Ricava la lunghezza del POST
Pos = InStr(sData, "Content-length:")
Fine = InStr(Pos, sData, vbLf)
Pos = Pos + 15
Lungh = Val(Mid$(sData, Pos + 1, Fine - Pos))
'Ricava la stringa di POST
Post = Mid$(sData, Fine + 2, Len(sData) - Fine + 2)
'Ricava il numero di Telefono
Pos = InStr(Post, "=") + 1
Fine = InStr(Pos, Post, "&")
Numero = Mid$(Post, Pos, Fine - Pos)
If Numero <> "" Then
lblNumero.Caption = Numero
Else
lblNumero.Caption = "(Nessun Numero)"
End If
'Ricava la Data del messaggio
Pos = InStr(Fine, Post, "=") + 1
Fine = InStr(Pos, Post, "&")
Data = DecodeData(Mid$(Post, Pos, Fine - Pos))
lblData.Caption = Data
'Ricava il messaggio
Pos = InStr(Fine, Post, "=") + 1
Fine = InStr(Pos, Post, "&")
Messaggio = DecodeData(Mid$(Post, Pos, Fine - Pos))
lblMessaggio.Caption = Messaggio
Questa funzione non fa altro che esaminare la stringa ricevuta, per ricavare il valore delle variabili che la SMS Machine/HTTP ci ha passato.
Unica nota è che ogni valore viene è codificato dalla SMS Machine/HTTP secondo lo schema HTTP che abbiamo utilizzando anche noi per trasmettere, in cui ogni carattere speciale è identificato con il segno di '%' seguito dal valore esadecimale del codice ASCII del carattere stesso. Per questo motivo viene chiamata la funzione DecodeData che riconverte la stringa nel formato classico.
Da questo punto in poi i dati dell'SMS ricevuto sono disponibili nelle variabili Data, Numero e Messaggio e l'applicazione si potrebbe sviluppare in moltissimi modi, secondo le nostre esigenze. Ad esempio potremmo analizzare il messaggio alla ricerca di particolari stringhe di comandi, oppure memorizzarlo in un database di messaggi ricevuti.
Sviluppi e potenzialità del sistema
Con il metodo appena visto è possibile integrare in maniera semplice ed immediata, la messaggistica SMS nella nostra applicazione.
I due programmini di esempio presentati possono essere fusi insieme per poter trasmettere e ricevere contemporaneamente, aprendo la strada a moltissime idee di utilizzo.
Ad esempio si potrebbe creare un database che contenga informazioni rilevanti per i nostri utenti (ad esempio una rubrica telefonica) e permettere loro di interrogarlo via SMS. Per fare questo sarebbe sufficiente analizzare il messaggio in arrivo alla ricerca di comandi di interrogazione da noi definiti, effettuare le query sul database e ritornare i dati ottenuti all'utente attraverso l'SMS di risposta.
Altra applicazione interessante è la realizzazione di una stazione di allarme via SMS, che potrebbe essere interrogata anche direttamente dal nostro telefonino.
Inoltre il sistema ha notevoli doti di scalabilità: è sufficiente aggiungere sulla rete nuove SMS Machine/HTTP (fino ad esaurimento degli IP della rete!) per poter aggiungere nuovi numeri GSM per la ricezione, utilizzando la stessa applicazione per il trattamento degli SMS.
File relativi a questo articolo
Applicazione di Invio SMS
Applicazione per la Ricezione di SMS
Articoli correlati
- SMS Machine/HTTP - Gateway SMS - HTTP
SMS Machine/HTTP riceve e trasmette messaggi SMS e li comunica direttamente ai tuoi script web qualunque sia il linguaggio di programmazione o il sistema operativo scelto. Funziona con normali carte SIM di qualunque operatore telefonico alle normali tariffe commerciali. SMS Machine/HTTP è un prodotto professionale dedicato alle aziende che sviluppano servizi WEB e desiderano integrare le loro applicazioni con la messaggistica SMS in modo rapido, semplice ed economico!
Segnala questo articolo:
Parole chiave: - How-To - SMS Machine -
|