Pagine importanti

martedì 25 novembre 2008

Interfaccia per sms via web

Stamattina da un cliente abbiamo combattuto per via di uno strano problema: ha un programma gestionale che su determinate condizioni e' in grado di inviare un sms al dipendente per girare una chiamata. Stamattina il programma (che usa un gateway via internet per mandare il messaggio) non ne voleva sapere di andare, continuando a fornire come risposta un bel KO.
Dato che sono dovuto andare ad aprire l'ufficio, ed il cliente si e' allontanato per andare a Catania, abbiamo rimandato il tutto a "appena abbiamo maggiori notizie", e io nel frattempo mi sono impegnato a effettuare qualche test ulteriore dal mio ufficio.
Ora, il punto e' che il servizio per l'invio di SMS (il portale www.smscenter.it tanto per fargli cinque minuti di pubblicita') mi dice sulla FAQ:
Per l'accesso ai gateway di invio tramite http POST e' necessario fare una richiesta all’URL: http://postgateway.smscenter.it
L'autenticazione viene effettuata in base a un secret value condiviso (MAC basato su hash MD5)

I parametri da passare al gateway sono:
  • user: nome utente
  • token: hash generato applicando la funzione MD5 (output esadecimale lowercase) alla stringa risultante dalla concatenazione dei parametri user, password (condivisa e non inviata al gateway), from, text, to in questo ordine
  • from: mittente del messaggio (max 11 caratteri)
  • to: destinatario del messaggio nella forma +CCPPPNNNNNNN
  • text: testo del messaggio (max 160 caratteri)
Per cui mi ingegno al volo per tentare di fare qualche test dall'ufficio. La prima idea che ho, ovviamente, e' che trattandosi di una richiesta in post, posso organizzare sul mio server web una pagina php al volo con un form che effettui il calcolo del token e lo invii al sistema. Ma poi mi rendo conto che il problema e' che la risposta del gateway non avviene in formato HTML (si limita a ripondere +OK oppure +KO MOTIVO), per cui devo pensare a qualcosa di piu' specifico.
Ed ecco la luce: non sono una cima, ma me la cavo un po' nella programmazione in perl, e per queste piccole bojate uno script che mandi quattro variabili in post e mi dica il risultato non ci vuole nemmeno una lunga quantita' di righe di codice... perche' non provare?
Ecco a voi il risultato, reso a disposizione anche come esempio se doveste realizzare un programma simile per una similare interfaccia gateway sms (ci ho infilato la colorazione sintassi in stile gedit, per renderlo un po' piu' leggibile).
#!/usr/bin/perl -w

# Interfaccia di prova per l'invio di un messaggio con smscenter.it
# Testato sotto Linux (UbuntuServer 8.04.1 LTS il 25 novembre 2008)
# Copyright (C) 2008-2009 by Grizzly http://www.g-sr.eu/

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .

# This programme is CardWare: if you like it, please send me a pictured postcard
# This programme is TeddyWare: if you *enjoyed* it, please send me a stuffed teddy bear (-:
# Sell your items to:
# Grizzly aka Mirko Tuccitto c/o Undefined Illusion BBS
# 12A, via Salvatore Monteforte - 96100 Siracusa ITALY

use strict;
use LWP::UserAgent;
use Digest::MD5 qw(md5_hex);

#### Variabili di sistema - ATTENZIONE CAMBIATELE CON LE VOSTRE
# Nome utente per il servizio
my $utente = 'username';

# Password di accesso al servizio
my $utente_pw = 'password123';

# Mittente dei messaggi, max 11 caratteri/cifre!
my $mittente = 'MITTENTE';

# Destinatario del messaggio, numero completo di +39 iniziale
my $destinatario = '+393301234567';

# Testo del messaggio
my $testo = 'Questo è il testo di un messaggio SMS';
#### Nessuna modifica richiesta dopo questo punto ####
######################################################

# Crea il token md5 di autenticazione per smscenter
# Niente spazi fra i campi
my $p_token = $utente.$utente_pw.$mittente.$testo.$destinatario;
my $m_token = md5_hex($p_token);

# DEBUG: fammi vedere che hai creato...
#print "User = " . $utente . "\n";
#print "Pwd = " . $utente_pw . "\n";
#print "From = " . $mittente . "\n";
#print "To = " . $destinatario . "\n";
#print "Text = " . $testo . "\n";
#print "Token= " . $p_token . "\n";
#print " " . $m_token . "\n";

# Costruisce un browser virtuale
my $browser = LWP::UserAgent->new;

# E invia la richiesta via POST al gateway
my $response = $browser->post (
'http://postgateway.smscenter.it',
[
'user' => $utente,
'token' => $m_token,
'from' => $mittente,
'to' => $destinatario,
'text' => $testo
],
);

# Adesso semplicemente fornisce la risposta, se e' tutto a posto sarà
# semplicemente "+OK", altrimenti "+KO QUALCOSA"
print $response->content . "\n";
exit;
PS: Se avete trovato questo programma utile, come tutti i miei script, vi invito a seguire le sacre regole CardWare e/o TeddyWare (-:

Nessun commento:

Posta un commento

Come detto sull'intestazione del Blog, sarete ospiti ben graditi, e per questo vi ringrazio anche per i vostri commenti, anche se messi per criticarmi. (-:
Visto lo spam ricevuto in questo periodo, i commenti sono moderati, pertanto vi prego di utilizzare questo spazio per costruire qualcosa assieme a me e agli altri lettori, astenendovi invece dal limitarvi ad approfittare di questo spazio aperto per fare pubblicità ai vostri prodotti o servizi. In caso di dubbi, in home page trovate il mio indirizzo e-mail e il mio numero di telefono (attivo dal lunedì al venerdì dalle 9 alle 13 e dalle 15 alle 19), per contattarmi.
Infine, vi prego di non utilizzare parolacce, bestemmie o termini che possano urtare la sensibilità mia o dei lettori.
Grazie mille! Grizzly