Interfaz HTTP de envio de SMS

De Open movilforum wiki

Tabla de contenidos

[editar] URL del servicio

A continuación se describe la interfaz http de envío de mensajes cortos para aplicaciones. Para utilizar esta interfaz, las aplicaciones deberán realizar una petición https a:

https://opensms.movistar.es/aplicacionpost/loginEnvio.jsp

[editar] Formato de la llamada

Esta petición deberá cumplir los siguientes requisitos:

  • Realizada por el método POST.
  • Ser del tipo application/x-www-form-urlencoded:
  • Contener los siguientes parámetros:
    • TM_ACTION = AUTHENTICATE
    • TM_LOGIN = número de teléfono del remitente del SMS
    • TM_PASSWORD = Clave del remitente
    • to = destinatario(s) del SMS. En caso de varios destinatarios utilizar el separador “;”. Para especificar el prefijo del país se debe poner antes 00, por ejemplo 00346xxxxxxxx.
    • message = texto del SMS.

Nota 1: para usar este API has de ser cliente movistar. La clave del remitente se obtiene enviando un mensaje de texto gratuito al 770 cuyo texto sea la clave de acceso que desee (la clave antigua dejará de ser válida). La clave deberá tener entre 6 y 14 caracteres y se distinguen entre mayúsculas y minúsculas.

Nota 2: el precio de cada SMS enviado es el mismo que lo que te constaría enviarlo desde tu móvil.

[editar] Respuestas

Si el envío se ha realizado correctamente la aplicación recibirá un OK en la respuesta http. En caso contrario, recibirá un código y un texto de error. A continuación se define la lista de errores posibles:

  • 1 - El usuario es incorrecto. Por favor vuelve a introducirlo.
  • 4 - Sentimos comunicarte que en estos momentos el servicio no está disponible. Por favor, intenta acceder pasados unos instantes.
  • 5 - La clave es incorrecta. Por favor, vuelve a introducirla teniendo en cuenta que se distinguen mayúsculas y minúsculas.
  • 11 - Destinatario incorrecto.
  • 12 - No se especificó el destinatario.

[editar] Ejemplos

[editar] Ejemplo de petición de envío

A continuación se puede ver un ejemplo de la petición de envío:

POST /aplicacionpost/loginEnvio.jsp HTTP/1.1
Host: opensms.movistar.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,
/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 87
   
TM_ACTION=AUTHENTICATE&TM_LOGIN=609xyzxyz&TM_PASSWORD=abcdef&to=629xyzxyz;609xxxyyy&message=mensaje de prueba

[editar] Ejemplo simple en HTML

<html>
  <title>Ejemplo opensms</title>
  <body>
    <form action='https://opensms.movistar.es/aplicacionpost/loginEnvio.jsp' method='POST'>
      <input type='hidden' name='TM_ACTION' value='AUTHENTICATE'>
      Mi Movil: <input type='text' name='TM_LOGIN'>
      Password: <input type='password' name='TM_PASSWORD'size=20> (Envia 'miclave' al 770)
      Destinos: <input type='text' name='to'size=40>
      Texto: <input type='text' name='message' size=80>
      <input type='submit' value='Enviar'>
    </form>
  </body>
</html>

[editar] Ejemplo en Perl usando un POST

Ejemplo usando comando POST (incluído en perl):

echo """
TM_ACTION=AUTHENTICATE&TM_LOGIN=NNNNNNNNN&TM_PASSWORD=XXXXXX&to=MMMMMMMMM&message=mensaje+de+prueba
""" | POST -U https://opensms.movistar.es/aplicacionpost/loginEnvio.jsp


[editar] Ejemplo en Python

def send_sms(number, text, login="NNNNNNNNN", password="NNNNNN"):
   """Envio de mensajes cortos usando la pasarela de movistar
     
   """
   import urllib
   url = "https://opensms.movistar.es/aplicacionpost/loginEnvio.jsp"
   form = dict(to=number,
               message=text,
               TM_ACTION='AUTHENTICATE',
               TM_LOGIN=login,
               TM_PASSWORD=password,
               submit='Enviar')
   data = urllib.urlencode(form)
   f = urllib.urlopen(url, data=data)
   res = f.read()
   if res != 'OK':
       raise ValueError(res.strip())
   return res

[editar] Ejemplo en Ruby

Definiremos una clase para hacer el código más reutilizable:

 require 'net/http'
 require 'uri'
 
 class MovistarGateway
 
   URL = 'https://opensms.movistar.es/aplicacionpost/loginEnvio.jsp'
 
   def initialize(login, password)
     @login = login.to_s
     @password = password.to_s
   end
 
   def send(destinations, message)
     numbers = destinations.find_all do |destination|
       destination =~ /\d+/
     end.join(';')
     return if numbers.blank?
     response = Net::HTTP.post_form(URI.parse(URL),
       {
         'TM_ACTION' => 'AUTHENTICATE',
         'TM_LOGIN' => @login,
         'TM_PASSWORD' => @password,
         'to' => numbers,
         'message' => message
       }
     )
     raise "SMS could not be sent: #{response.body}" unless response.body =~ /OK/
   end
 
 end

Así pues, para enviar el mensaje, en este caso a dos móviles 666666666 y 677777777:

 gateway = MovistarGateway.new('<login>', '<password>')
 gateway.send(['66666666', '677777777'], 'Texto del mensaje')

[editar] Ejemplo en PHP

 <?php
// Funcion que envia el mensaje
 function send_sms($tm_login, $tm_password, $tm_to, $tm_mensaje) {

# variables post
$host="opensms.movistar.es";
$service_uri="/aplicacionpost/loginEnvio.jsp";
$vars="TM_ACTION=AUTHENTICATE&TM_LOGIN=".$tm_login."&TM_PASSWORD=".$tm_password."&to=".$tm_to."&message=".$tm_mensaje;

# cabecera http HTTP
$header = "Host: $host\r\n";
$header .= "User-Agent: PHP Script\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".strlen($vars)."\r\n";
$header .= "Connection: close\r\n\r\n";

$fp = pfsockopen($host, 443, $errno, $errstr);

if (!$fp) {
  echo "$errstr ($errno)\n";
  echo $fp;
} else {
  fputs($fp, "POST $service_uri HTTP/1.1\r\n");
  fputs($fp, $header.$vars);
  fwrite($fp, $out);
  # muestra la salida (opcional)
  # while (!feof($fp)) {
  # echo fgets($fp, 128);
  # }
fclose($fp);
}
}
 ?>

Llamada a la función para enviar un sms:

 <?
 send_sms("666555444", "miclave", "666444555", "Funcion que envia un sms");
 ?>