OVH Community, votre nouvel espace communautaire.

Bonne méthode envoi SMS PHP


Harry Potter
17/07/2014, 23h53
Je me demandais s'il existait une fonction PHP toute faite pour remplacer les caractères qu'il faut afin de toujours envoyer les SMS en 7bits.

Du coup j'ai utilisé cette fonction sur le corps du message que j'appelle évidemment après la soumission du formulaire mais avant que la requête ne soit envoyé vers OVH.

Code PHP:
function smsControl($string){ 
    return 
str_replace( array('á','ã','ä''ç''ê','ë''í','î','ï''ó','ô','õ''ù','ú','û''ý','ÿ''Á','Ã''È','Ê','Ë''Ì','Í','Î','Ï''Ò','Ó','Ô','Õ''Ù','Ú','Û''Ý'), array('a','a','a''c''e','e''i','i','i''o','o','o''u','u','u''y','y''A','A''E','E','E''I','I','I','I''O','O','O','O''U','U','U''Y'), $string);

Je me suis basé sur le tableau de caractères sur Wikipédia. Je dirais que dans cette fonction il y a les caractères principaux. En espérant que ça aide les futurs utilisateurs du service SMS.

En revanche, je c'est pas si il est conseillé de remplacer également le signe € (euro)...

Harry Potter
15/06/2014, 16h37
merci

LouisM
13/06/2014, 23h12
- http://en.wikipedia.org/wiki/GSM_03.38

Le premier tableau te donne les caractère qui permette d'envoyer le sms en 7bit (160 caractère pour le premier sms, 146 les suivants)

Les autre réduirons la taille du SMS a 70 caractères le premier SMS, 64 pour les suivants

Harry Potter
12/06/2014, 18h14
Justement, en parlant de la gestion du message SMS en lui-même. Quelqu'un connaitrait la liste des caractères spéciaux non-supportés ou qui doubleraient le nombre de SMS envoyé ? Il me semble que pour les caractères accentués basiques (accents graves et aigus), il n'y a pas de soucis mais que pour les trémas et circonflexes là il faudrait vraiment commencer à faire les vérifications car ça semble utiliser + de crédits SMS lors des envois.

D'ailleurs aussi, en nombre de caractères, quelle est la taille à respecter officiellement ?

fibo
31/05/2014, 13h38
Après quelques expériences, tâtonnements et réponse du support, tout cela parce que la doc n'est pas bien faite...
- Utiliser xxxUserxxx qui te permet de ne pas donner le mot de passe maître de l'identifiant NIC, mais seulement celui du "user" autorisé à envoyer
- ATTENTION: il faut impérativement (si tu veux que tes SMS passent vers SFR) utiliser comme "expéditeur" non pas ton numéro de téléphone (comme il est hélas toujours indiqué dans la doc), mais un texte alphanumérique, 11 caractères maxi
- ... et si tu fais cela sans autre précaution, tu risques que ton SMS soit a priori considéré comme de la pub et donc comporte "stop:36110" ou autre...
- cf notamment ici http://forum.ovh.com/showthread.php?...ilisateurs-SFR et http://forum.ovh.com/showthread.php?...%E9ro&p=609955

le code que j'utilise personnellement et qui semble marcher sans souci:
Code:
	$sms = new SMS("sms-XXX-1", "user", "userpassword", "EMETTEUR" /* emetteur alpha, pas numero tel */
	    );
        $sms_id=$sms->Send($phonenumber,$mon_message);
        // attention, enlever du message tout caractère ^€ etc... bref aucun accent!!
...

/**
 * Classe permettant l'envoi de SMS via la plateforme OVH
 */
class SMS
{
	public $account;
	public $user;
	public $password;
	public $from;
	
	/**
	 * Constructeur de la classe SMS
	 *
	 * @param string $account Compte à utiliser chez OVH
	 * @param string $user Nom d'utilisateur chez OVH
	 * @param string $password Mot de passe chez OVH
	 * @param string $from TEXTE 11cars pour passer chez SFR
	 */
	public function __construct($account, $user, $password, $from)
	{
		$this->account = $account;
		$this->user = $user;
		$this->password = $password;
		$this->from = $from;	
	}
	
	/**
	* Cette fonction envoie un message SMS au numéro désigné
	* C'EST LA RESPONSABILITE DU PROGRAMME APPELANT DE GERER LE TEXTE DU MESSAGE (longueur, etc.)
	*
	* @param string $to Numéro destinataire, de la forme +33612345678
	* @param string $message  Texte du message
	* 
	* @return int|bool Id du SMS envoyé ou False en cas d'erreur
	*/
	public function Send($to, $message)
	{
		try {
			$soap = new SoapClient("https://www.ovh.com/soapi/soapi-re-1.63.wsdl");
			//telephonySmsUserSend cf  http://www.ovh.com/soapi/fr/?method=telephonySmsUserSend
			$result = $soap->telephonySmsUserSend($this->user, $this->password, $this->account, $this->from, $to, $message, "", "2", "", "","","","1");
			return $result; // contient l'id d'envoi
		} catch(SoapFault $fault) {
			return false;
		}
	}
}

fibo
31/05/2014, 13h35
Après quelques expériences, tâtonnements et réponse du support, tout cela parce que la doc n'est pas bien faite...
- Utiliser xxxUserxxx qui te permet de ne pas donner le mot de passe maître de l'identifiant NIC, mais seulement celui du "user" autorisé à envoyer
- ATTENTION: il faut impérativement (si tu veux que tes SMS passent vers SFR) utiliser comme "expéditeur" non pas ton numéro de téléphone (comme il est hélas toujours indiqué dans la doc), mais un texte alphanumérique, 11 caractères maxi
- ... et si tu fais cela sans autre précaution, tu risques que ton SMS soit a priori considéré comme de la pub et donc comporte "stop:36110" ou autre...
- cf notamment ici http://forum.ovh.com/showthread.php?...ilisateurs-SFR et http://forum.ovh.com/showthread.php?...%E9ro&p=609955

le code que j'utilise personnellement et qui semble marcher sans souci:
Code:
	$sms = new SMS("sms-XXX-1", "user", "userpassword", "EMETTEUR" /* emetteur alpha, pas numero tel */
	    );
        $sms_id=$sms->Send($phonenumber, "mon_message");
        // attention, enlever du message tout caractère ^€ etc... bref aucun accent!!
...

/**
 * Classe permettant l'envoi de SMS via la plateforme OVH
 */
class SMS
{
	public $account;
	public $user;
	public $password;
	public $from;
	
	/**
	 * Constructeur de la classe SMS
	 *
	 * @param string $account Compte à utiliser chez OVH
	 * @param string $user Nom d'utilisateur chez OVH
	 * @param string $password Mot de passe chez OVH
	 * @param string $from TEXTE 11cars pour passer chez SFR
	 */
	public function __construct($account, $user, $password, $from)
	{
		$this->account = $account;
		$this->user = $user;
		$this->password = $password;
		$this->from = $from;	
	}
	
	/**
	* Cette fonction envoie un message SMS au numéro désigné
	* C'EST LA RESPONSABILITE DU PROGRAMME APPELANT DE GERER LE TEXTE DU MESSAGE (longueur, etc.)
	*
	* @param string $to Numéro destinataire, de la forme +33612345678
	* @param string $message  Texte du message
	* 
	* @return int|bool Id du SMS envoyé ou False en cas d'erreur
	*/
	public function Send($to, $message)
	{
		try {
			$soap = new SoapClient("https://www.ovh.com/soapi/soapi-re-1.63.wsdl");
			//telephonySmsUserSend cf  http://www.ovh.com/soapi/fr/?method=telephonySmsUserSend
			$result = $soap->telephonySmsUserSend($this->user, $this->password, $this->account, $this->from, $to, $message, "", "2", "", "","","","1");
			return $result; // contient l'id d'envoi
		} catch(SoapFault $fault) {
			return false;
		}
	}
}

fibo
20/05/2014, 11h58
Même souci. Je passe par
Code PHP:
$soap = new SoapClient("https://www.ovh.com/soapi/soapi-re-1.63.wsdl");
...
$result $soap->telephonySmsUserSend($this->user$this->password$this->account$this->from$to$message"""2"""""); 
sans savoir si c'est la bonne méthode, et de nombreux sms ne passent pas (notamment vers sfr)
serait-il mieux d'utiliser telephonyUserSend?

pierrot
11/05/2014, 22h49
Bsr,

Ok merci. Je trouve que c'est un peu un souci avec OVH, on passe de SOAPI beta à API gamma sans jamais finalement avoir de produit fini, fiable et correctement documenté et mis à jour ... aucune info sur le devenir de SOAPI (des tous petits caractères dans un coin qui disent que l'API existe), sur la pérennité de API (en "gamma" depuis des lustres pour qui sait ce qu'est une "gamma" ...), bref un peu fatiguant sans parler du fait que http2sms existe toujours et que tous les guides OVH pointent vers ça ...

P.

Niloo
11/05/2014, 00h05
Bonjour,

A l'époque où j'utilisais les SMS OVH, je passais par SOAPI : http://www.ovh.com/soapi/fr/?method=telephonySmsSend

A présent, tu as le choix entre SOAPI, une API qui n'est plus vraiment maintenu (information du support) mais qui semble à peu près stable à part des indisponibilités de temps en temps ou la nouvelle API qui n'a pas autant de fonctionnalité que SOAPI mais semble plus fiable et bien plus rapide.

pierrot
10/05/2014, 17h06
Bonjour,

Je parcours la doc OVH à la recherche de la bonne méthode pour envoyer des SMS depuis un script PHP et j'ai l'impression d'en trouver 2-3 ... D'abord http2sms, ensuite SOAPI et ensuite API OVH qui est en gamma (je sais même plus ce que ça veut dire ça, c'est après beta, avant beta, avant alpha ...).
Bref comme d'hab avec OVH, c'est un peu le bazar à l'image des managers, on ne sait plus trop par ou entrer :-)

A votre avis quelle est la méthode pérenne pour démarrer maintenant sur l'envoi de SMS depuis un script PHP ? si en plus vous avez un lien avec un exemple qui marche, c'est super ... j'ai déjà exploré bcp de liens mais rien trouvé qui me fasse dire "cool voilà un truc qui a l'air de marcher je vais essayer" ...

Merci d'avance. Pierre.