A la découverte de l’API SMS d’Orange

Mailing SMS

En guise d’exemple d’utilisation de l’API, nous allons mettre en place un système de mailing SMS. Prenons un contexte simple (et inspiré de faits réels): vous organisez tout les dimanche après midi des randonnées roller. Le souci, c’est que la randonnée peut être annulée très peu de temps avant (1h par exemple) pour des raisons météorologiques ou autres. Il faut un moyen de contacter tout les intéressés rapidement et facilement. Ca peut être fait avec un envoi de mail, mais généralement peu de monde consulte ses mails toutes les heures.

Un système par SMS serait plus pratique. L’organisateur envoie un SMS à notre application (via l’API Orange) et notre application se charge de retransmettre le message à toutes les personnes concernées. Il faut aussi que les gens puissent s’inscrire à la mailing et se désinscrire. Le tout par SMS.

Donc première chose à faire: établir une structure de base de donnée pour stocker les numéros des inscrits. Il faut aussi que l’on puisse indiquer si tel ou tel numéro a le droit d’envoyer un message à tout les autres. Ainsi, on a un champ phone_number et un champ can_send (une énumération de 0 ou 1, 1 donnant le droit d’envoyer un message à tout le monde). Voici le code SQL pour créer cette table:

CREATE TABLE 'sms_mailling' (
		'phone_number' VARCHAR( 15 ) NOT NULL ,
		'can_send' ENUM( '0', '1' ) NOT NULL ,
	UNIQUE (
			`phone_number`
	)
)

Ensuite, il faut écrire l’application en elle-même. Il ne s’agit que de reprendre les concepts vus précédemment et d’y ajouter quelques contrôles. Pour l’envoi des SMS, on reprend le code précédent (dans la fonction sendSms). Ensuite, notre application se comporte comme pour une réception traditionnelle de SMS.

Une fois que l’on a récupéré le numéro de l’expéditeur et son message, on switche sur la commande qu’il a transmis:

  • subscribe: l’expéditeur veut s’inscrire à la mailing. On vérifie si il n’est pas déjà inscrit. Si ce n’est pas le cas, on l’ajoute en base de donnée.
  • stop: l’expéditeur veut se désinscrire de la mailing. On vérifie si il est déjà inscrit. Si ce n’est le cas, on le supprime de la base de donnée.
  • send: l’expéditeur veut envoyer un message à tout les inscrits. On vérifie si il en a le droit (can_send à 1). Si c’est bien le cas, on récupère la suite de son message et on l’envoie à tout le monde.

Voici le code PHP correspondant à cette application:

// Infos SQL
$db = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('db1',$db); 
 
function sendSms($content, $receipient)
{
	$apiKey = "956e82240";
	// Rappel, la taille maximale d'un message est de 160 caractères
	$message = substr($message,0,159);	
 
	// On encode pour passer via l'URL
	$message = urlencode($message);
 
	$apiUrl = "http://sms.alpha.orange-api.net/sms/sendSMS.xml?id=$apiKey&to=$recipient&content=$message";
}
 
if($_GET['api'] == "receivesms")
{
	$content =""; $from = "";
	if(!empty($_GET['content']))
	{
		$content = urldecode($_GET['content']);
		$messageWords = split(' ', $content);
	}
 
	if(!empty($_GET['from']))
	{
		$from = $_GET['from'];
	}
 
	// On switche sur le mot clef qui suit le mot clef Orange
	switch($messageWords[1])
	{
		// Inscription
		case 'subscribe':
			// On vérifie si le numéro n'est pas déjà inscrit
			$sql = "SELECT * FROM sms_mailling WHERE phone_number = '".mysql_escape_string($from)."'";
			$res = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
			if(mysql_num_rows($res) != 0)
			{	// Si c'est le cas, on lui notifie
				sendSms("Vous êtes déjà inscrit sur cette mailling !", $from);
			}
			else
			{	// Sinon, on l'inscrit
				$sql = "INSERT INTO sms_mailling VALUES ('".mysql_escape_string($from)."', '0')";
				$res = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
				sendSms("Vous êtes maintenant inscrit sur cette mailling !", $from);
			}
			break;
		// Désinscription
		case 'stop':
			// On vérifie si l'utilisateur est déjà inscrit
			$sql = "SELECT * FROM sms_mailling WHERE phone_number = '".mysql_escape_string($from)."'";
			$res = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
			if(mysql_num_rows($res) == 0)
			{	// Si c'est pas le cas, on le notifie
				sendSms("Vous n'êtes pas inscrit sur cette mailling !", $from);
			}
			else
			{	// Si c'est le cas, on le désinscrit
				$sql = "DELETE FROM sms_mailling WHERE phone_number = '".mysql_escape_string($from)."'";
				$res = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
				sendSms("Vous êtes maintenant désinscrit de cette mailling !", $from);
			}
			break;
		// Envoi d'un message à la mailling
		case 'send':
			// On vérifie que le numéro a le droit d'envoyer un SMS à tout le monde
			$sql = "SELECT * FROM sms_mailling WHERE phone_number = '".mysql_escape_string($from)."'";
			$res = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
			$row = mysql_fetch_array($res);
			if($row['can_send'] == 0)
			{	// Si ce n'est pas le cas, on le notifie
				sendSms("Vous n'avez pas les droits d'envoi sur cette mailling !", $from);
			}
			else
			{	// Si c'est le cas, on récupère la liste des inscrits et on envoie à tout le monde
				$messageToSend = str_replace($messageWords[0]. " ". $messageWords[1], '', $content);
				$sql = "SELECT * FROM sms_mailling";
				$res = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
				while($line = mysql_fetch_array($res))
				{
					sendSms($messageToSend, $line['phone_number']);
				}
 
			}
			break;		
 
		// Par défaut ... On ne fait rien ! 
 
	}
 
	mysql_close($db);
 
}

Cette entrée a été publiée dans Article, avec comme mot(s)-clef(s) , , , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>