Integración de avisos sms en tu servidor mediante php

Publicado en Enviar sms | Etiquetas: , , ,

Un caso muy habitual del uso de avisos sms es la necesidad que tienen muchos webmasters o proveedores de servicios de monitorizar sus sistemas, y sobre todo de recibir avisos inmediatas en su teléfono móvil con los eventos y errores más importantes de los sistemas monitorizados.

pasarela sms http

En estos casos, el envío del sms no puede realizarse mediante un sistema de envíos de sms via web, sino que el propio envío del sms tiene que integrarse en el código que opera en la página web o en el servidor para enviar el aviso mediante sms a los número de teléfono móviles que estén al cargo de realizar las labores de mantenimiento del sistema.

Lo más sencillo en el caso de páginas web es implementar los avisos mediante la inserción de una función php para el envío de sms, y llamar a esa función php desde los puntos críticos del sistema que requieran una acción inmediata del personal de soporte técnico de tu empresa o centro servidor de datos.

Php es el lenguaje de programación más utilizado en el mundo web, así que una sencilla integración del envío de mensajes mediante php en tu servidor web te facilitará el manejo del envío de los avisos necesarios para el funcionamiento de tu sistema.

En una entrada anterior se incluía un código de ejemplo que facilitaba la integración del envío de sms en php, que puede ser utilizado en este caso con gran facilidad. Como siempre, es muy importante el uso de un proveedor sms de confianza, puesto que los avisos son críticos y se debe asegurar la calidad del servicio.

Dado que estamos en un entorno web, lo más normal será utilizar el protocolo http para el envío de los sms con la información del aviso.

Caracteres permitidos en un sms de texto

Un aspecto muy importante a la hora de enviar un SMS online, por pasarela de envío de SMS ya sea programando en php, java, asp, etc, es el juego de caracteres a utilizar en la composición del envío del sms.

El juego de caracteres universalmente utilizado por los terminales de teléfonos móviles es el GSM Default Alphabet, de 7 bits. Sin embargo, con la llegada de los smart phones, ya algunos teléfonos pueden utilizar UNICODE o cualquier otro juego de caracteres que determine el fabricante.

Además del juego de caracteres por defecto de GSM, también se puede encontrar el juego de caracteres extendido para GSM, que incluye caracteres como el euro (€) o los corchetes y llaves {}[] entre los más comunes. Cuando se utilizan “n” caracteres de este juego de caracteres, la extensión del sms pasa de ser 160 caracteres a 160-2n.

Además del terminal, otros actores importantes son las operadoras, que también pueden llegar a realizar alguna transformación de los mensajes de acuerdo a sus juegos de caracteres.

Sin embargo en un servicio de sms masivo a través de pasarela, lo conveniente es utilizar el juego de caracteres que permita que tu sms llegue al mayor número posible de terminales diferentes. Por esa razón lo más común es permitir los caracteres incluidos en el GSM Default Alphabet con posibilidad de utilizar el juego de caracteres extendido en algunos casos concretos.

Estos son los caracteres del juego de caracteres por defecto GSM Default Alphabet más relevantes desde el punto de vista del español:

  ¡  ! " # $ % & ' ( ) * + , - . / 0123456789 : ; < = > ?  @
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
_ ¿ Ç ñÑ
àèìòù
äöü ÄÖÜ

Cosas de que las decisiones de los juegos de caracteres las tomen siempre desde el mundo anglosajón es que no están incluidas en estos juegos de caracteres las vocales acentuadas. Lo más normal entre los proveedores es sustituir las vocales acentuadas por sus equivalentes sin acentuar.

Envío de un sms wap push desde php

Ya vimos hace tiempo el envío de sms de texto con php. La función que presentamos hoy permite realizar el envío de sms con php de tipo wappush. De esta forma tu código php corriendo en tu servidor podrá enviar contenidos o urls a los usuarios de tu página php que les sean útiles

Como en anteriores ejemplos, para hacer real el envío, es necesario un proveedor sms que sirve de intermediario entre nuestro servidor php y los operadores de telefonía móvil. El ejemplo utiliza la pasarela de envío de sms masivo de Altiria con php.

El protocolo http es el utilizado para las comunicaciones con el proveedor.

Este método se puede llamar desde cualquier parte de tu servidor para hacer el envío de sms. Integrar el envío de sms con php se hará, por ejemplo, con el siguiente código que envía un sms a los números 34600111222 y 34600111333. El sms enviado de tipo wap push será  mostrando un texto en caso de que el envío del sms se haya realizado correctamente y el texto de error generado en caso de error en el envío de sms.

Un mensaje wap push se compone de la url a la que se conectará el teléfono móvil más una alerta que es el aviso que le aparecerá en el móvil al usuario.

<!--? // sDestination: lista de núumeros, comenzando por 34 y separados por comas // sMessage: hasta 160 caracteres // XX, YY y ZZ se corresponden con los valores de identificación del // usuario en el sistema. // Como ejemplo la petición se envía a www.pasarelasms.net/sustituirPOSTsms // Se debe reemplazar la cadena ’/sustituirPOSTsms’ por la parte correspondiente // de la URL suministrada por Altiria al dar de alta el servicio function AltiriaSMS($sDestination,$sMessage,$sUrl) { $sData = "cmd=sendwappush&domainId=XX&login=YY&passwd=ZZ&dest=".str_replace(",","&dest=",$sDestination)."&msg=".urlencode(utf8_encode(substr($sMessage,0,30)))."&url=".urlencode(utf8_encode(substr($sUrl,0,85))); $fp = fsockopen("www.pasarelasms.net", 80); // Reemplazar la cadena ’/sustituirPOSTsms’ por la parte correspondiente // de la URL suministrada por Altiria al dar de alta el servicio $buf = "POST /sustituirPOSTsms HTTP/1.0\r\n"; $buf .= "Host: www.pasarelasms.net\r\n"; $buf .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n"; $buf .= "Content-length: ".strlen($sData)."\r\n"; $buf .= "\r\n"; $buf .= $sData; fputs($fp, $buf); $buf = ""; while (!feof($fp)) $buf .= fgets($fp,128); fclose($fp); if (strstr($buf,"ERROR")) return $buf; else return ""; } /* $resp= AltiriaSMS("34600111222,34600111333", "Texto de prueba", "http://www.pasarelasms.es"); if (!$resp) print "Mensaje enviado correctamente!\n"; else echo strstr($resp,"ERROR"); */ ?-->

Envío de sms: http o mail

El uso más normal que se le da a una pasarela sms es la integración del envío de sms en un software propietario. Lo habitual, una vez más, es implementar la conexión con el proveedor sms mediante el protocolo http para el envío de sms. Las comunicaciones via http son relativamente sencillas de implementar para alguien con conocimientos técnicos, hay multitud de clientes http ya implementados listos para configurar y utilizar y el modo de comunicaciones síncrono permite obtener inmediatamente la respuesta del proveedor sms con el resultado del procesado.

pasarela sms http
Sin embargo, hay ocasiones en las que no es posible utilizar el envío de sms masivo mediante http:

  • El sistema que hay que integrar es heredado y no se puede modificar para introducir comunicaciones http.
  • El único mecanismo de comunicación con el exterior es mediante el envío de correos electrónicos
  • Se quiere realizar un envío masivo en un corto espacio de tiempo. Las comunicaciones http tienen un tiempo de establecimiento de la comunicación que no es despreciable cuando hay restricciones temporales

En todos estos casos, la comunicación mediante http está prohibida y es necesario utilizar otro protocolo de comunicaciones. Una alternativa fácil de utilizar es el envío de sms mediante mail. En posteriores entradas analizaremos cuáles son las posibilidades de envío y las ventajas que tiene cada una de ellas.

Envío de un sms wap push en java

En una entrada anterior vimos como realizar la integración de envío de sms mediante java. En esta entrada se pretende replicar el ejemplo para el caso de lo que se quiera enviar sea un sms de tipo wap push.

Una vez más, recalcamos que para que funcione este ejemplo es necesario contratar los servicios de  un proveedor de envío masivo de sms que permita la integración sms de nuestra aplicación. Utilizaremos la sms gateway de envío de Altiria.

El envío del sms de tipo wap push se realiza con este proveedor mediante una petición POST a su servidor con los datos del sms wap push que se quiere enviar como parámetros de la propia petición, siendo los más importantes la url de destino, el texto de alerta que aparecerá en el teléfono móvil y los destinatarios. Se puede encontrar el documento de especificaciones de la conexión también en su web.

La misión del programa Java para enviar SMS será por tanto conectarse de algún modo al proveedor elegido (HTTP, SMTP…) y pasarle los datos del sms en algún formato (con los propios parámetros de HTTP, con un xml…).

Ya tenemos el proveedor y el mecanismo de envío (HTTP). Ya sólo queda implementar esta conexión HTTP en nuestro programa Java. Para ello necesitamos un cliente HTTP para realizar la conexión. Hemos elegido la librería HTTP de Jakarta, (HttpClient) que debe estar presente en el classpath de nuestra aplicación. El siguiente código realiza la conexión enviando los parámetros del sms.

El código no envía realmente el sms wap push, ya que para hacer pruebas reales, es necesario contratar un bono de créditos de envío con el proveedor sms que permita la integración.

//Se inicia el objeto HTTP
HttpClient client = new HttpClient();
client.setStrictMode(true);
//Se fija el tiempo máximo de espera de la respuesta del proveedor sms
client.setTimeout(60000);
//Se fija el tiempo máximo de espera para conectar con el proveedor sms
client.setConnectionTimeout(5000);
PostMethod post = null;
//Se fija la URL sobre la que enviar la petición POST
 
//Como ejemplo se supone www.pasarela_push_altiria.com/post/sms
post = new PostMethod("http://www.pasarela_push_altiria.com/post/sms");
 
//Se fija la codificación de caracteres en la cabecera de la petición
post.setRequestHeader("Content-type",
   "application/x-www-form-urlencoded; charset=UTF-8");
 
//Se crea la lista de parámetros a enviar en la petición POST
NameValuePair[] parametersList = new NameValuePair[4];
parametersList[0] = new NameValuePair("dest", "34600111222");
parametersList[1] = new NameValuePair("dest", "34600111333");
parametersList[2] = new NameValuePair("msg", "Alerta de contenido sms");
parametersList[2] = new NameValuePair("url", "http://www.pasarelasms.com/pasarelasms/contenido");
 
//Se rellena el cuerpo de la petición POST con los parámetros
post.setRequestBody(parametersList);
int httpstatus = 0;
String response = null;
 
try {
//Se envía la petición
httpstatus = client.executeMethod(post);
//Se consigue la respuesta
response = post.getResponseBodyAsString();
}
catch (Exception e) {
//Habrá que prever la captura de excepciones
return;
}
finally {
//En cualquier caso se cierra la conexión
post.releaseConnection();
}
 
//Habrá que prever posibles errores en la respuesta del servidor
if (httpStatus!=200){
return;
}
else {
//Se procesa la respuesta capturada en la cadena ‘‘response’’
}

Este código se traduce en el envío de un sms wap push con la alerta “Alerta de contenido sms” y la url “http://www.pasarelasms.com/pasarelasms/contenido” a los móviles 34600111222 y 34600111333.

Recepción de sms premium. Modos síncrono y asíncrono

A la hora de recibir los datos de un mensaje sms premium mediante la integración de la pasarela sms, existen dos posibilidades de comunicación: modo síncrono o modo asíncrono.

En el modo síncrono, el proveedor sms premium realiza la conexión http para suministrar los datos del mensaje sms que envió el usuario, separando en varios parámetros los datos. Después de la recepción del mensaje, se procesa el mensaje de acuerdo a la propia lógica del servicio y se genera un mensaje de respuesta para el usuario que inició el proceso enviando el sms premium. La respuesta se realiza como contestación a la propia petición http inicial. El proveedor sms premium recibirá esta contestación y se la suministrará a las operadoras para que a su vez remitan el mensaje de respuesta al usuario.

En el modo asíncrono, una vez que se recibe la petición http, se guardan los datos pero no se procesan inmediatamente. En su lugar se contesta al proveedor con una cadena predefinida, “OK”, por ejemplo, indicando al proveedor que la respuesta se generará con posterioridad. Una vez generada la respuesta, es necesario realizar una nueva conexión http al proveedor con los datos de referencia del mensaje al que se está contestando incluyendo el texto de respuesta. El proveedor se encargará de suministrárselo al usuario a través de la correspondiente operadora móvil.

La ventaja del método síncrono reside en su simplicidad. Para integrar la pasarela sms premium símplemente es necesario tener un pequeño servidor http que procese la petición http y que genere la respuesta sobre el mismo canal de entrada. Este servidor puede estar implementado en php, java jsp, asp, etc.

La desventaja del método síncrono es que la contestación al sms premium inicial se tiene que hacer en un tiempo limitado (segundos) y no siempre se tiene la respuesta si se tiene que consultar a algún sistema externo o la lógica es muy complicada. Cuando eso ocurre hay que utilizar el método asíncrono, que añade la dificultad de tener que guardar el mensaje para contestarlo más tarde, pero que añade mucha flexibilidad al servicio que se está intentando implementar.

La recepción de SMS en pasarela es un método muy utilizado tanto para recibir micropagos sms como para recibir sms en campañas de marketing móvil.

Envío de sms en Borland Delphi

Publicado en Enviar sms | Etiquetas: , ,

El siguiente método permite realizar el envío de sms en Borland Delphi.

Una vez más, insistimos que para hacer real el envío, es necesario un proveedor de sms gateway que sirve de intermediario entre nuestro código y los operadores de telefonía móvil. El ejemplo utiliza la pasarela de envío de sms masivo de Altiria.

El protocolo http es el utilizado para las comunicaciones con el proveedor.

Para que funcione el código de envío de SMS en Borland Delphi, es necesario seguir los siguientes pasos:

  • Incluir el componente TIdHTTP ubicado en la paleta de componentes Indy Clients.
  • Configurar las cabeceras asignando a la propiedad “Request->ContentType” el valor “application/x-www-form-urlencoded; charset=UTF-8”
procedure TFormEnviar.btnEnviarClick(Sender: TObject);
	var
		DResultado,SUrl : String;
		Parametros : TStrings;
	begin
		//Se fija la URL sobre la que enviar la petición POST
		//Como ejemplo la petición se envía a www.altiria.net/sustituirPOSTsms
		//Se debe reemplazar la cadena ’/sustituirPOSTsms’ por la parte correspondiente
		//de la URL suministrada por Altiria al dar de alta el servicio
		SUrl:=’http://www.altiria.net/sustituirPOSTsms’;
 
		//Compone el mensaje a enviar
		//XX, YY y ZZ se corresponden con los valores de identificación del usuario en el sistema
		Parametros := TStringList.Create;
		Parametros.Add(’cmd=sendsms’);
		Parametros.Add(’domainId=XX’);
		Parametros.Add(’login=YY’);
		Parametros.Add(’passwd=ZZ’);
		Parametros.Add(’dest=34600111222);
		Parametros.Add(’msg=+UTF8Encode(’Texto de prueba’));
 
		Especificaciones de la Interfaz HTTP
		// Enviamos un mensaje, recibiendo en "DResultado" la respuesta del servidor
		DResultado:=IdHTTP1.Post(SUrl,Parametros);
		Parametros.free;
end;

Envío de sms en Visual Basic

Publicado en Enviar sms | Etiquetas: , ,

La siguiente función permite realizar el envío de sms en Visual Basic.

Como en anteriores ejemplos, para hacer real el envío, es necesario un proveedor sms que sirve de intermediario entre nuestro programa en Visual Basic y los operadores de telefonía móvil. El ejemplo utiliza la pasarela de envío de sms masivo de Altiria.

El protocolo http es el utilizado para las comunicaciones con el proveedor.

Dim objXSH As New MSXML2.ServerXMLHTTP50
Dim strPostText As String
Dim sResponseText As String
’Se fija la URL sobre la que enviar la petición POST
’Como ejemplo la petición se envía a www.altiria.net/sustituirPOSTsms
’Se debe reemplazar la cadena /sustituirPOSTsms por la parte correspondiente
’de la URL suministrada por Altiria al dar de alta el servicio de envío de SMS en Visual Basic
objXSH.open "POST", "http://www.altiria.net/sustituirPOSTsms", False
objXSH.setRequestHeader "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"
 
’XX, YY y ZZ se corresponden con los valores de identificación del usuario en el sistema.
strPostText=
	"cmd=sendsms&amp;domainId=XX&amp;login=YY&amp;passwd=ZZ&amp;dest=34600111222&amp;msg=Texto de prueba"
objXSH.send strPostText
 
If objXSH.Status = 200 Then
	’La respuesta se debe usar para filtrar el resultado devuelto por la pasarela sms
	sResponseText = objXSH.responseText
Else
	Debug.Print "Error: (" &amp; objXSH.Status &amp; ") " &amp; objXSH.statusText
End If

Como habéis visto, este ejemplo de implementación de una conexión mediante pasarela sms en Visual Basic es muy sencillo para quien tenga unos conocimientos básico de programación en este lenguaje.

Enviar sms desde php

Publicado en Enviar sms | Etiquetas: , , ,

La siguiente función permite realizar el envío de sms con php. De esta forma tu código php corriendo en tu servidor podrá enviar alertas que te sean útiles (una caída de un servicio, una compra, un registro de usuario)

Como en anteriores ejemplos, para hacer real el envío, es necesario un proveedor sms que sirve de intermediario entre nuestro servidor php y los operadores de telefonía móvil. El ejemplo utiliza la pasarela de envío de sms de Altiria con php.

El protocolo http para el envío de sms es el utilizado para las comunicaciones con el proveedor.

Este método se puede llamar desde cualquier parte de tu servidor para hacer el envío de sms. Integrar el envío de sms con php se hará, por ejemplo, con el siguiente código que envía un sms a los números 34600111222 y 34600111333, mostrando un texto en caso de que el envío del sms se haya realizado correctamente y el texto de error generado en caso de error en el envío de sms desde php.

<!--? // sDestination: lista de núumeros, comenzando por 34 y separados por comas  
// sMessage: hasta 160 caracteres  
// XX, YY y ZZ se corresponden con los valores de identificación del  
// usuario en el sistema.  
// Como ejemplo la petición se envía a www.pasarelasms.net/sustituirPOSTsms  
// Se debe reemplazar la cadena ’/sustituirPOSTsms’ por la parte correspondiente 
// de la URL suministrada por Altiria al dar de alta el servicio de envío de sms desde PHP
function AltiriaSMS($sDestination,$sMessage) {  $sData = "cmd=sendsms&#038;domainId=XX&#038;login=YY&#038;passwd=ZZ&#038;dest=".str_replace(",","&#038;dest=",$sDestination)."&#038;msg=" .urlencode(utf8_encode(substr($sMessage,0,160)));  
$fp = fsockopen("www.pasarelasms.net", 80);  
// Reemplazar la cadena ’/sustituirPOSTsms’ por la parte correspondiente // de la URL suministrada por Altiria al dar de alta el servicio $buf = "POST /sustituirPOSTsms HTTP/1.0\r\n";  
$buf .= "Host: www.pasarelasms.net\r\n";  
$buf .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";  
$buf .= "Content-length: ".strlen($sData)."\r\n";  
$buf .= "\r\n"; $buf .= $sData;  fputs($fp, $buf); 
$buf = "";  while (!feof($fp)) 
$buf .= fgets($fp,128); 
fclose($fp); 
if (strstr($buf,"ERROR"))  return $buf; else return ""; } 
/* $resp= AltiriaSMS("34600111222,34600111333", "Texto de prueba"); if (!$resp) print "Mensaje enviado correctamente!\n"; else echo strstr($resp,"ERROR"); */ ?-->

Enviar sms desde java mediante http

Publicado en Enviar sms | Etiquetas: , , ,

En esta entrada os mostraremos cómo enviar sms desde Java.

Integrar sms en una aplicación es una funcionalidad que en algún momento algún cliente puede querer, como por ejemplo para comunicarse con sus propios clientes, enviar una alerta en determinadas ocasiones, etc…

La integración del envío del sms necesita un proveedor fiable. Un proveedor de sms sirve de intermediario entre nuestra aplicación Java y los operadores de telefonía móvil.

Utilizaremos la pasarela de envío de sms masivo de Altiria.

El envío de sms se realiza con este proveedor mediante una petición POST al servidor de Altiria con los datos del sms que se quiere enviar como parámetros de la propia petición, siendo los más importantes el contenido del sms y los destinatarios. Se puede encontrar el documento de especificaciones de la conexión también en su web.

La misión del programa Java será por tanto conectarse de algún modo al proveedor elegido (HTTP, SMTP…) y pasarle los datos del sms en algún formato (con los propios parámetros de HTTP, con un xml…).

Ya tenemos el proveedor y el mecanismo de envío (HTTP). Ya sólo queda implementar esta conexión HTTP en nuestro programa Java. Para ello necesitamos un cliente HTTP para realizar la conexión. Hemos elegido la librería HTTP de Jakarta, (HttpClient) que debe estar presente en el classpath de nuestra aplicación. El siguiente código realiza la conexión enviando los parámetros del sms en Java.

El código no envía realmente el sms, ya que para hacer pruebas reales, es necesario contratar un bono de créditos de envío con el proveedor.

//Se inicia el objeto HTTP
HttpClient client = new HttpClient();
client.setStrictMode(true);
//Se fija el tiempo máximo de espera de la respuesta del servidor
client.setTimeout(60000);
//Se fija el tiempo máximo de espera para conectar con el servidor
client.setConnectionTimeout(5000);
PostMethod post = null;
//Se fija la URL sobre la que enviar la petición POST
 
//Como ejemplo se supone www.pasarela_push_altiria.com/post/sms
post = new PostMethod("http://www.pasarela_push_altiria.com/post/sms");
 
//Se fija la codificación de caracteres en la cabecera de la petición
post.setRequestHeader("Content-type",
   "application/x-www-form-urlencoded; charset=UTF-8");
 
//Se crea la lista de parámetros a enviar en la petición POST
NameValuePair[] parametersList = new NameValuePair[3];
parametersList[0] = new NameValuePair("dest", "34600111222");
parametersList[1] = new NameValuePair("dest", "34600111333");
parametersList[2] = new NameValuePair("msg", "Mensaje de prueba");
 
//Se rellena el cuerpo de la petición POST con los parámetros
post.setRequestBody(parametersList);
int httpstatus = 0;
String response = null;
 
try {
//Se envía la petición
httpstatus = client.executeMethod(post);
//Se consigue la respuesta
response = post.getResponseBodyAsString();
}
catch (Exception e) {
//Habrá que prever la captura de excepciones
return;
}
finally {
//En cualquier caso se cierra la conexión
post.releaseConnection();
}
 
//Habrá que prever posibles errores en la respuesta del servidor
if (httpStatus!=200){
return;
}
else {
//Se procesa la respuesta capturada en la cadena ‘‘response’’
}

Este código se traduce en el envío de un sms con el texto “Mensaje de Prueba” a los móviles 34600111222 y 34600111333.