Remontée d’alerte par SMS avec les API SFR
par guiguiabloc le 03 déc, 2009, sous architecture, geekerie, linux
Comme tout bon sysadmin qui se respecte, vous surveillez scrupuleusement vos serveurs, vos équipements ou que sais-je encore via des outils de monitoring divers et variés.
Votre infrastructure chérie est tellement scrutée que cela rendrais jalouse n’importe quelle jeune maman devant surveiller son bambin.
D’ailleurs, je me suis toujours demander pourquoi on ne passait pas les bébés sous Nagios…
Cela donnerait des résultats intéressants :
AH AH AH
Bref…
Les remontées d’alertes « critique » doivent pouvoir avertir en temps réel le sysadmin et comme vous le savez, c’est toujours quand on est loin de son écran que la panne intervient.
L’idéal étant de pouvoir ajouter aux diverses méthodes d’alertes (mails, alarme Nagios, etc…) l’envoi d’un SMS sur votre portable.
Si votre opérateur téléphonique est SFR, vous avez la première solution de vous créer une adresse mail en @sfr.fr.
En activant sur www.sfr.fr, rubrique Messagerie, l’alerte SMS, vous recevez un texto a chaque mail reçu sur cette BAL.
Il vous suffit donc de donner un Sujet de mail lié a l’alerte pour voir s’afficher succinctement sur votre téléphone l’alerte en question.
Le concept est intéressant, malheureusement, le SMS arrive assez aléatoirement, entre une dizaine de minutes à… plusieurs heures.
Forcément, côté remontée d’alerte en temps réel, on fait mieux…
La deuxième solution est beaucoup plus fun et plus efficace.
Je vous propose tout simplement d’utiliser les API de SFR et de contacter directement leur Webservice en SOAP, comme on peut le faire avec OVH.
Classe, non ?
Car chose que vous ne savez peut-être pas, mais les opérateurs téléphoniques proposent discrètement des kits des développement (SDK) permettant de communiquer avec leur infrastructure via la plupart du temps un webservice accessible depuis le nain ternet.
C’est le cas chez Orange sur http://www.orangepartner.com/site/frfr/home/p_home.jsp et également chez SFR.
Client SFR, c’est donc chez eux que je vais utiliser les API.
L’atelier de développement SFR, appelé RED, est accessible sur http://red.sfr.fr/dev-zone/index.php.
L’inscription est gratuite et vous donne accès aux téléchargements des SDK (Php, JAVA et PUB (Market Place SFR).
Egalement avec la mise a disposition des SDK, vous disposez d’un « compte » lié a une application (le red101) qui vous crédite d’un nombre de points vous permettant de tester le service et vos développements (100 SMS pour le mois par exemple)
Les API disponibles sont nombreuses et franchement intéressantes (envoi et réception de SMS, de MMS, géolocalisation de portable, gestion d’évenement, utilisation de carnet d’adresses unifié, etc…)
D’ailleurs, certaines applications développées par la communauté mérite le coup d’oeil
Sachez également que vous avez la possiblité d’acheter des packs de jetons. Exemple pour une vingtaine d’euros vous avec 350 utilisations de l’API SMS ou 267 utilisations de l’API Loc.
Le solde offert est largement suffisant pour couvrir ce que nous voulons faire, une remontée d’alerte critique par SMS sur notre portable.
N’étant pas développeur, j’ai donc choisi forcément le kit PHP, langage qui s’adaptera parfaitement à mon niveau
Les prérequis sur votre serveur sont le module soap et les librairies openssl
Sous Debian :
apt-get install php-soap openssl libssl0.9.8
Tout d’abord, téléchargement du SFR-Red_PHP_SDK_v1.1.
Avec le SDK, vous recevrez également par mail vos certificats SSL a utiliser avec l’API.
Première chose a faire, changer le mot de passe par défaut du certificat (fourni dans le mail) :
openssl rsa -des3 -in guiguiabloc.pem -out guiguiabloc.pem Enter pass phrase for Guiguiabloc.pem: writing RSA key Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
L’arborescence se présente ainsi (j’ai copié mes certificats dans le répertoire pour des raisons de facilité) :
docs/ config.php examples/ wsdl/ Guiguiabloc.crt Guiguiabloc.p12 lib/ config.php Guiguiabloc.jks Guiguiabloc.pem
On renseigne le fichier config.php
Et c’est tout
A vous maintenant d’écrire le script PHP utilisant la méthode SendSMS par exemple :
alerte-sms_bascule-IpFO.php
sendSMS(new
UserIdentifier("0612345678","PhoneNumber"),"ALERTE Bascule IPFailOver");
?>On appelle le script : php alerte-sms_bascule-IpFO.php
et hop; magique, un SMS du 6011
Si vous utilisez heartbeat pour vos bascules d’IP FailOver (suite à la lecture de cet excellent billet ), il vous suffit de rajouter l’appel a ce script dans /etc/ha.d/ressource.d/IPaddrFO.
case $2 in
start) /etc/ha.d/ns11111-failoverupdate.py
php /opt/sfr/alerte-sms_bascule-IpFO.php
ip_start $1;;
stop) ip_stop $1;;
status) ip_status $1;;
monitor) ip_monitor $1;;
*) usage
exit 1
;;
esacCôté Nagios, je suppose que vous gérez déjà les niveaux d’escalades (lire cet excellent Wifi : http://wiki.nagios-fr.org/nagios/objects-reference )
Nagios envoi un mail à la BAL d’escalade et vous executer le script a réception de mail :
dans /etc/aliases
nagiossms: "|php /opt/sfr/alerte-nagios.php"
(par exemple hein, je vous laisse à votre imagination débordante
)
Voilà donc une solution simple pour remonter vos alertes en temps réels, que ce soit vos états critiques Nagios, vos bascules d’IP failover ou la coupure EDF sur votre Onduleur
Amusez-vous bien

décembre 18th, 2009 le 16:59
Bonjour,
Pas mal le post.
Juste si tu perd l’accès internet plus de SMS ;-(
décembre 18th, 2009 le 18:13
lol, si ton serveur perd l’accès internet, en même temps, tout les services sont down…
Si perd ton accès internet, tu n’as plus de nagios non plus…
janvier 12th, 2010 le 19:32
ouais pas mal l’article.
Je suis actuellement chez orange et nagios m’envoie un mail à mon_num_de_portable@orange.fr et orange m’envoie dans des délais pour le moment acceptable un SMS avec, et c’est important, juste le sujet du mail. A moi de construire les sujets des mails pour que le SMS contienne l’info importante (pour nagios pas de probleme, c’est le nom du serveur, puis le service et l’info sur l’état).
Bref je vais résilier mon abo et j’hésite à aller voir ailleurs précisement à cause de ca (le sujet du mail est le contenu du SMS) car dans ton cas j’ai l’impression que c’est toi qui construit le SMS et tu dois donc créer un texte pour chaque alerte (dans ton exemple: « Bascule Extranet »). A partir d’un certains nombre de serveur ca devient vite fastidieux..
janvier 12th, 2010 le 20:40
je construit mes sujets sms a partir de template en expect tout con avec nagios, ca me prend, allez 2 secondes pour 1000 serveurs…
février 12th, 2010 le 11:30
Bonjour moi j’ai un problème quand je fais openssl il me renvoi une erreur :
« Error opening Privat Key »
Peut tu m’aider?
février 12th, 2010 le 19:36
la réponse est dans le message d’erreur…
vérifier les droits, le chemin, etc…
février 25th, 2010 le 14:52
Est-il possible de faire la même chose en perl?
février 25th, 2010 le 15:20
« L’inscription est gratuite et vous donne accès aux téléchargements des SDK (Php, JAVA et PUB (Market Place SFR). »
Nativement non, comme dit dans ce billet.
Après rien n’empeche d’interfacer du perl avec un des SDK (java ou php)
février 25th, 2010 le 15:40
A ton avis c’est dur ou pas ?
février 25th, 2010 le 19:48
non
mars 1st, 2010 le 13:54
Bonjour guigui, merci pour tes super tuto, dis moi, j’ai une erreur lorsque je tente de faire l’envoi du sms, as tu eu cette erreur, as tu une idée pour m’aider …, je tourne sous une lenny.
Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /opt/sfr/lib/sfr_red_sdk.v1.1.php:889
Stack trace:
#0 [internal function]: SoapClient->__doRequest(‘__call(’sendSMS’, Array)
#2 /opt/sfr/lib/sfr_red_sdk.v1.1.php(889): RedSoapClient->sendSMS(Array)
#3 /opt/sfr/alerte-sms_bascule-IpFO.php(5): SMSService->sendSMS(Object(UserIdentifier), ‘ALERTE Bascule …’)
#4 {main}
thrown in /opt/sfr/lib/sfr_red_sdk.v1.1.php on line 889
mars 1st, 2010 le 17:53
Je suis sous Lenny et je n’ai pas d’erreur de ce genre.
Ton service est activé chez RedSfr ?
mars 2nd, 2010 le 14:32
Comment dois-je l’activé ? Je le vois dans mes services, j’ai quelquechose en plus a faire ?
mars 2nd, 2010 le 14:37
J’ai bien ça dans la gestion des jetons:
Solde de mes services :
Nom : red101 – Jetons : 7500
mars 2nd, 2010 le 17:01
Donc c’est OK.
Probleme au niveau du fichier de configuration peut-etre (config.php)
mars 2nd, 2010 le 17:40
Bah je ne vois pas où je me serais gourer .. :/
As tu du toi aussi faire un dos2unix sur le fichier config par contre ?
mars 2nd, 2010 le 18:59
Je ne m’en rappelle pas mais bon, je fais toujours un sed dans Vi quand j’ai des ctrlM par défaut.
mars 2nd, 2010 le 23:24
Wai enfin ca change rien, le probleme ne vient pas de là, mes login / pass sont bon, pass de la clé égalament, le chemin de la clé aussi, je vois pas
mars 3rd, 2010 le 21:00
le certificat aussi ? J’ai jamais eu ce genre d’erreur depuis que j’utilise les api
avril 9th, 2010 le 11:09
Salut et merci beaucoup pour ton tuto, vraiment efficace.
J’ai un soucis malgré tout, lorsque je charge une page utilisant le toolkit, j’ai systématiquement une erreur :
Erreur lors de l’accès SMS.GetVersion : SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://ws.red.sfr.fr:80/red-ws/SMSService-v1?wsdl=2′ : Extra content at the end of the document
Voici mon config.php
//Proxy (optionnel)
$red_ws_proxy_host = « »;
$red_ws_proxy_port = 80;
$red_ws_proxy_login = « »;
$red_ws_proxy_password = « »;
//Emplacement de la racine du WebService
$red_ws_root_endpoint = « https://ws.red.sfr.fr/red-ws/ »;
//Localisation des wsdls (optionnel)
//$red_ws_wsdl_dir = « /ABSOLUTE_PATH//wsdl »;
//Authentification HTTPS Certificat
$red_partner_cert_filepath = « C:\…\…\…\certif\monnom.pem »;
$red_partner_cert_password = « monpassssl »;
//Authentification Basic Auth
$red_partner_name = « monnom »;
$red_service_name = « red101″;
$red_service_password = « monpass »;
Je suis sur easyphp ..?
Merci par avance.
Julien
avril 9th, 2010 le 12:59
j’ai du mal a comprendre pourquoi tu génère une erreur de type « http://ws.red.sfr.fr:80/red-ws/SMSService-v1?wsdl=2″ alors que l’url soap est httpS://ws.red.sfr.fr/red-ws
Maintenant, red101 étant un service de démo, je te conseille au plus vite créer ton propre service (chez redsfr) car j’ai eu aussi des bugs avec red101…
avril 9th, 2010 le 17:24
Merci pour ta réponse, je comprends pas moi non plus très bien le fonctionnement et je n’ai pas de retour de leur part …
Je vais à présent suivre ton conseil et créer mon propre service.
mai 10th, 2010 le 13:48
Bonjour,
je viens d’implémenter l’api SFR, et j’ai crée mon propre service sur mon compte dev. Malheureusement, ce service n’est pas activé et je ne vois pas comment l’activer !! Si vous avez une idée ???
Merci
Jerome
mai 10th, 2010 le 13:51
Il faut envoyer un email a l’équipe (support.red[chez]sfr.com) en demandant d’activer le service.
août 1st, 2010 le 17:52
Moi ce qui m’etonne c’est de passer par des API d’operateurs. Nous nous plaignons toujours du manque de concurrence en France chez les operateurs mobiles, donc ce n’est pas a la peine de renforcer ceci, surtout quand des fournisseurs de services sont tres bons et surtout beaucoup moins chers
. Nous utilisons http://www.redoxygen.fr et leur API SMS est sur http://redoxygen.fr/micro_sites/red_api/ il y a bien sur d’autres fournisseurs de services, ca ne manque pas, mais nous avons un bon service chez red oxygen. Cdt
août 1st, 2010 le 19:52
euh moins cher ?.. a gros volume sûrement, a comparaison, pour 89 euros chez SFR le sms me coute 0,068 et je peux en envoyer 1311 contre 0,070 pour 70 euros chez Redoxygen, et j’ai le droit a 1000 sms.
Au dessus oui, ca peut devenir intéressant.
Maintenant l’atelier SFR te donne tes sms gratuits tout les ans… (je n’ai pas acheter 1 seul pack depuis 3 ans avec tout les cadeaux qu’il donne :p).
Mais effectivement, cela semble une très bonne offre que je ne connaissais pas, merci pour ton lien.
septembre 13th, 2010 le 17:04
Hey,
Je viens enfin de reussir l’envoi avec l’api de sfr, mais en HTTP et non en HTTPS;
Je pense qu’il y a un probleme avec SOAP et HTTPs mais je ne trouve pas comment le corriger.
Sinon j’ai essayer redoxygen suite au commentaire de Hervé, ca marche très bien.
Reste à voir si je me décide a jeter des tunes la dedans.