EN

API de envío SMS http/GET

La API SMS http/GET está diseñada para técnicos y clientes que quieran conectar sus aplicaciones con la plataforma de mensajería SMS de LabsMobile.

Las funcionalidades de la API SMS http/GET son:

Esta documentación explica detalladamente el proceso de integración y automatización de estas funcionalidades.

Para iniciar una integración con la API http/GET son imprescindibles los siguientes requisitos:

  • Una cuenta de LabsMobile asociada con un nombre de usuario (correo electrónico de registro). Crea una cuenta aquí.
  • Token API utilizado como contraseña y generado desde la sección Configuración API de tu cuenta.
  • URL del endpoint de la API http/GET y los valores de los parámetros para realizar la petición.

A tener en cuenta

RecomendaciónRecomendamos utilizar la API SMS http/POST porque incluye más funcionalidades, mejora la seguridad y el rendimiento.

La API http/GET de LabsMobile es una API REST que utiliza el protocolo HTTP GET con una URL base común para todas las peticiones: https://api.labsmobile.com/get

Es recomendable utilizar una URL que incluya el protocolo HTTPS en cualquier versión de nuestra API.


Autenticación

En la API SMS http/GET existen dos posibles métodos de autenticación:

  • Basic Auth HTTP. Este tipo de autenticación consta de unas credenciales username:tokenapi que se incluyen en el encabezado de la petición HTTP codificado en base64().
    Ejemplo de valor de encabezado de autenticación:
    Authorization: Basic 9yewaXic21vYmlsZqS5jmSk04enFTbUU=

  • Parámetros GET. Las credenciales se envían en dos parámetros username y password que se incluyen en la URL de la petición.
    Ejemplo de autenticación con parámetros GET:
    ?username=myusername&password=tokenapi

Importante Recomendamos el uso del método Basic Auth debido a que no es seguro transmitir credenciales en parámetros GET.


Configuración y filtros

A continuación se detallan variables de configuración y aspectos de seguridad importantes en una integración con la API de envío SMS http/GET:

  • Dirección IP desde donde se enviarán los mensajes. Si se activa esta opción, sólo se admitirán peticiones de la lista de dirección IPs introducida. Esta funcionalidad es opcional, por defecto se aceptarán mensajes de cualquier IP.
  • Remitente por defecto (por defecto LABSMOBILE). Sólo algunos operadores permiten la asignación dinámica y con valor alfanumérico del campo remitente.
  • Límite de mensajes diario, por defecto 100.000 sms/día.
  • Límite de mensajes por batch, por defecto 10.000 sms/petición.
  • Filtro por países, para que sólo se procesen mensajes de una lista de países.
  • Filtro anti-duplicados, para evitar enviar mensajes iguales a un mismo destinatario.

Todos estos parámetros se pueden activar y modificar en la Configuración API y Preferencias de la cuenta.

Importante Se establece un máximo de 10 peticiones por segundo. Malos usos, abusos o un mayor volumen de peticiones provocarán un bloqueo temporal o permanente de la cuenta y/o dirección IP.

Recomendación Recomendamos activar las Recargas automáticas para que siempre existan créditos disponibles en la cuenta y no se interrumpa el servicio de envío SMS.


Envío de mensajes SMS

Petición para el envío de mensajes SMS de forma individual o masiva.

Con esta funcionalidad se pueden enviar mensajes en tiempo real o de forma programada para un día y hora específicos. Además, se pueden añadir otros parámetros como el remitente, etiqueta, identificador, modo simulado, etc.

ENDPOINT

GET https://api.labsmobile.com/get/send

  • Ampliar todo

    PARÁMETROS

    Los parametros o datos se envían en variables http/GET en la propia URL de la petición. A continuación se describen los valores y funcionalidad de todos los parámetros:

  • RESULTADO

    El resultado de cualquier petición API SMS http/GET se obtiene en formato XML con el elemento raíz <response> y con los siguientes elementos hijos:

Envío individual
  curl --location 'http://api.labsmobile.com/get/send.php?username=myUsername&password=myToken&msisdn=12015550123&message=Your%20verification%20code%20is%20123'
                
  #include <stdio.h> 
  #include <curl/curl.h> 

  int main(void)
  {
      CURL *curl;
      CURLcode res;

      char *username = "myUsername";
      char *token = "myToken";
      char *msisdn = "12015550123";
      char *message = "Your verification code is 123";

      char *encoded_username = curl_easy_escape(curl, username, 0);
      char *encoded_message = curl_easy_escape(curl, message, 0);

      char url[500]; 
      sprintf(url, "http://api.labsmobile.com/get/send.php?username=%s&password=%s&msisdn=%s&message=%s&test=1", encoded_username, token, msisdn, encoded_message);

      curl = curl_easy_init();
      if (curl)
      {
          curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
          curl_easy_setopt(curl, CURLOPT_URL, url);
          curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
          curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
          res = curl_easy_perform(curl);
          if (res != CURLE_OK)
          {
              fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
          }
      }
      curl_free(encoded_username);
      curl_free(encoded_message);
      curl_easy_cleanup(curl);
      return 0;
  }
              
  using System;
  using RestSharp;

  namespace SendGetUni
  {
    class Program
    {
      static void MainSend(string[] args)
      {
        string username = "myUsername";
        string token = "myToken";
        string msisdn = "12015550123";
        string message = "Your verification code is 123";

        var client = new RestClient("https://api.labsmobile.com");
        var request = new RestRequest("/get/send.php", Method.Get);

        request.AddParameter("username", username);
        request.AddParameter("password", token);
        request.AddParameter("msisdn", msisdn);
        request.AddParameter("message", message);

        RestResponse response = client.Execute(request);
        if (response.ErrorException != null)
        {
          Console.WriteLine("Error: " + response.ErrorException.Message);
        }
        else
        {
          Console.WriteLine("Response content: " + response.Content);
        }
      }
    }
  }
              
  import com.mashape.unirest.http.HttpResponse;
  import com.mashape.unirest.http.Unirest;
  import com.mashape.unirest.http.exceptions.UnirestException;

  import java.io.UnsupportedEncodingException;
  import java.net.URLEncoder;

  public class App {
    public static void main(String[] args) throws UnirestException, UnsupportedEncodingException {
      String username = "myUsername";
      String token = "myToken";
      String message = "Your verification code is 123";
      String[] msisdn = {"12015550123"};

      String url = "http://api.labsmobile.com/get/send.php?username=" +
              URLEncoder.encode(username, "utf-8") +
              "&password=" + URLEncoder.encode(token, "utf-8") +
              "&message=" + URLEncoder.encode(message, "utf-8") +
              "&msisdn=" + URLEncoder.encode(String.join(",", msisdn), "utf-8");

      Unirest.setTimeouts(0, 0);
      HttpResponse<String> response = Unirest.get(url).asString();
      System.out.println("Status code: " + response.getBody());
    }
  }
              
<?php 
  $curl = curl_init();

  $username = "myUsername";
  $token = "myToken";
  $msisdn = array(12015550123);
  $message = "Don't miss our Sale! Use code XXXX123 for 20% off.";

  $url = 'http://api.labsmobile.com/get/send.php?';
              $url .= 'username='.  urlencode($username) .'&';
              $url .= 'password='.  urlencode($token) .'&';
              $url .= 'msisdn=' .  urlencode(json_encode($msisdn)) .'&';
              $url .= 'message=' .  urlencode($message);
  curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
  ));

  $response = curl_exec($curl);

  curl_close($curl);
  echo $response;
              
  import requests, urllib.parse

  data = {
      'username':'myUsernmae',
      'password': 'myToken',
      'msisdn': '[12015550123]',
      'message':'Your verification code is 123'
  }

  url = "http://api.labsmobile.com/get/send.php?"+urllib.parse.urlencode(data, doseq=True)
  payload = {}
  headers = {}

  response = requests.request("GET", url, headers=headers, data=payload)

  print(response.text)
              
  const axios = require('axios');

  const username = "myUsername";
  const token = "myToken";
  const message = "Your verification code is 123";
  const msisdns = ["12015550123"];

  let config = {
    method: 'get',
    maxBodyLength: Infinity,
    url: `http://api.labsmobile.com/get/send.php?username=${encodeURIComponent(username)}&password=${encodeURIComponent(token)}&message=${encodeURIComponent(message)}&msisdn=${encodeURIComponent(JSON.stringify(msisdns))}`
  };

  axios.request(config)
  .then((response) => {
    console.log(JSON.stringify(response.data));
  })
  .catch((error) => {
    console.log(error);
  });

              
  require "uri"
  require "net/http"

  url = URI("http://api.labsmobile.com/get/send.php")

  data = {
    'username' => 'myUsername',
    'password' => 'myToken',
    'msisdn' => '[12015550123]',
    'message' => 'Your verification code is 123'
  }

  url.query = URI.encode_www_form(data)
  https = Net::HTTP.new(url.host, url.port)
  request = Net::HTTP::Get.new(url)

  response = https.request(request)
  puts response.read_body
              
Envío múltiple
  curl --location 'http://api.labsmobile.com/get/send.php?username=myUsername&password=myToken&msisdn=12015550123,12015550124,12015550125&message=Your%20verification%20code%20is%20123'
                
  #include <stdio.h> 
  #include <curl/curl.h> 

  int main(void)
  {
      CURL *curl;
      CURLcode res;
      char *username = "myUsername";
      char *token = "myToken";
      char *msisdn = "[12015550123,12015550124,12015550125]";
      char *message = "Don't miss our Sale! Use code XXXX123 for 20% off.";
      char *test = "1";

      char *encoded_username = curl_easy_escape(curl, username, 0);
      char *encoded_message = curl_easy_escape(curl, message, 0);
      char *encoded_msisdn = curl_easy_escape(curl, msisdn, 0);

      char url[500];
      sprintf(url, "http://api.labsmobile.com/get/send.php?username=%s&password=%s&msisdn=%s&message=%s&test=1", encoded_username, token, encoded_msisdn, encoded_message);

      curl = curl_easy_init();
      if (curl)
      {
          curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
          curl_easy_setopt(curl, CURLOPT_URL, url);
          curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
          curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
          res = curl_easy_perform(curl);
          if (res != CURLE_OK)
          {
              fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
          }
      }
      curl_free(encoded_username);
      curl_free(encoded_message);
      curl_free(encoded_msisdn);
      curl_easy_cleanup(curl);
      return 0;
  }
              
  using System;
  using RestSharp;

  namespace SendGetMul
  {
    class Program
    {
      static void MainSend(string[] args)
      {
        string username = "myUsername";
        string token = "myToken";
        string msisdn = "[12015550123,12015550124,12015550125]";
        string message = "Don't miss our Sale! Use code XXXX123 for 20% off.";

        var client = new RestClient("https://api.labsmobile.com");
        var request = new RestRequest("/get/send.php", Method.Get);

        request.AddParameter("username", username);
        request.AddParameter("password", token);
        request.AddParameter("msisdn", msisdn);
        request.AddParameter("message", message);

        RestResponse response = client.Execute(request);
        if (response.ErrorException != null)
        {
          Console.WriteLine("Error: " + response.ErrorException.Message);
        }
        else
        {
          Console.WriteLine("Response content: " + response.Content);
        }
      }
    }
  }
              
  import com.mashape.unirest.http.HttpResponse;
  import com.mashape.unirest.http.Unirest;
  import com.mashape.unirest.http.exceptions.UnirestException;

  import java.io.UnsupportedEncodingException;
  import java.net.URLEncoder;

  public class App {
    public static void main(String[] args) throws UnirestException, UnsupportedEncodingException {
        String username = "myUsername";
        String token = "myToken";
        String message = "Don't miss our Sale! Use code XXXX123 for 20% off.";
        String[] msisdn = {"12015550123,12015550124,12015550125"};

        String url = "http://api.labsmobile.com/get/send.php?username=" +
              URLEncoder.encode(username, "utf-8") +
              "&password=" + URLEncoder.encode(token, "utf-8") +
              "&message=" + URLEncoder.encode(message, "utf-8") +
              "&msisdn=" + URLEncoder.encode(String.join(",", msisdn), "utf-8");

        Unirest.setTimeouts(0, 0);
        HttpResponse<String> response = Unirest.get(url).asString();
        System.out.println("Status code: " + response.getBody());
    }
  }
              
<?php 
  $curl = curl_init();

  $username = "myUsername";
  $token = "myToken";
  $msisdn = array(12015550123,12015550124,12015550125);
  $message = "Don't miss our Sale! Use code XXXX123 for 20% off.";

  $url = 'http://api.labsmobile.com/get/send.php?';
              $url .= 'username='.  urlencode($username) .'&';
              $url .= 'password='.  urlencode($token) .'&';
              $url .= 'msisdn=' .  urlencode(json_encode($msisdn)) .'&';
              $url .= 'message=' .  urlencode($message);
  curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
  ));

  $response = curl_exec($curl);

  curl_close($curl);
  echo $response;
              
  import requests, urllib.parse

  data = {
      'username':'myUsername',
      'password': 'myToken',
      'msisdn': '[12015550123,12015550124,12015550125]',
      'message':"Don't miss our Sale! Use code XXXX123 for 20% off."
      
  }
  url = "http://api.labsmobile.com/get/send.php?"+urllib.parse.urlencode(data, doseq=True)
  payload = {}
  headers = {}

  response = requests.request("GET", url, headers=headers, data=payload)

  print(response.text)
              
  const axios = require('axios');

  const username = "myUsername";
  const token = "myToken";
  const message = "Don't miss our Sale! Use code XXXX123 for 20% off.";
  const msisdns = ["12015550123","12015550124","12015550125"];

  let config = {
    method: 'get',
    maxBodyLength: Infinity,
    url: `http://api.labsmobile.com/get/send.php?username=${encodeURIComponent(username)}&password=${encodeURIComponent(token)}&message=${encodeURIComponent(message)}&msisdn=${encodeURIComponent(JSON.stringify(msisdns))}`
  };

  axios.request(config)
  .then((response) => {
    console.log(JSON.stringify(response.data));
  })
  .catch((error) => {
    console.log(error);
  });
              
  require "uri"
  require "net/http"

  url = URI("http://api.labsmobile.com/get/send.php")

  data = {
    'username' => 'myUsername',
    'password' => 'myToken',
    'msisdn': '[12015550123,12015550124,12015550125]',
    'message' => "Don't miss our Sale! Use code XXXX123 for 20% off."
  }

  url.query = URI.encode_www_form(data)
  https = Net::HTTP.new(url.host, url.port)
  request = Net::HTTP::Get.new(url)

  response = https.request(request)
  puts response.read_body
              
Resultado positivo
  <?xml version="1.0" encoding="utf-8"?>
  <response>
        <code>0</code>
        <message>Message has been successfully sent</message>
        <subid>56fb9baa6bc22</subid>
  </response>
                  
Resultado erróneo
  <?xml version="1.0" encoding="utf-8"?>
  <response>
      <subid>6615686480e47</subid>
      <code>21</code>
      <message>The message element cannot be empty</message>
  </response>
                  

Consulta de saldo

Consulta sobre el número de créditos disponibles de una cuenta.

ENDPOINT

GET https://api.labsmobile.com/balance

  • PARÁMETROS

  • RESULTADO

    El resultado de cualquier petición API SMS http/GET se obtiene en formato XML con el elemento raíz <response> y con el siguiente elemento hijo:

Consulta de saldo
  curl --location 'http://api.labsmobile.com/get/balance.php?username=myUsername&password=myToken'
                
  #include <stdio.h> 
  #include <curl/curl.h> 

  int main(void)
  {
      CURL *curl;
      CURLcode res;

      char *username = "oscar.santa@labsmobile.com";
      char *token = "HWzeyIS8AX1jPio7P5ZNxpPDktQ1Lnpj";

      char *encoded_username = curl_easy_escape(curl, username, 0);

      char url[500]; 
      sprintf(url, "http://api.labsmobile.com/get/balance.php?username=%s&password=%s", encoded_username, token);

      curl = curl_easy_init();
      if (curl)
      {
          curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
          curl_easy_setopt(curl, CURLOPT_URL, url);
          curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
          curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
          res = curl_easy_perform(curl);
          if (res != CURLE_OK)
          {
              fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
          }
      }
      curl_free(encoded_username);
      curl_easy_cleanup(curl);
      return 0;
  }


              
  using System;
  using RestSharp;

  namespace BalanceGet
  {
    class Program
    {
      static void MainBalance(string[] args)
      {
        string username = "myUsername";
        string token = "myToken";

        var client = new RestClient("https://api.labsmobile.com");
        var request = new RestRequest("/get/balance.php", Method.Get);

        request.AddParameter("username", username);
        request.AddParameter("password", token);

        RestResponse response = client.Execute(request);
        if (response.ErrorException != null)
        {
          Console.WriteLine("Error: " + response.ErrorException.Message);
        }
        else
        {
          Console.WriteLine("Response content: " + response.Content);
        }
      }
    }
  }  
              
  import com.mashape.unirest.http.HttpResponse;
  import com.mashape.unirest.http.Unirest;
  import com.mashape.unirest.http.exceptions.UnirestException;

  import java.io.UnsupportedEncodingException;
  import java.net.URLEncoder;

  public class App {
      public static void main(String[] args) throws UnirestException, UnsupportedEncodingException {
          String username = "oscar.santa@labsmobile.com";
          String token = "HWzeyIS8AX1jPio7P5ZNxpPDktQ1Lnpj";

          String url = "http://api.labsmobile.com/get/balance.php?username=" +
                  URLEncoder.encode(username, "utf-8") +
                  "&password=" + URLEncoder.encode(token, "utf-8");

          Unirest.setTimeouts(0, 0);
          HttpResponse<String> response = Unirest.get(url).asString();
          System.out.println("Status code: " + response.getBody());
      }
  }
              
<?php 
  $curl = curl_init();

  $username = "myUsername";
  $token = "myToken";

  $url = 'http://api.labsmobile.com/get/balance.php?';
              $url .= 'username='.  urlencode($username) .'&';
              $url .= 'password='.  urlencode($token);
  curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
  ));

  $response = curl_exec($curl);

  curl_close($curl);
  echo $response;

              
  import requests, urllib.parse

  data = {
      'username':'myUsername',
      'password': 'myToken'
  }


  url = "http://api.labsmobile.com/get/balance.php?"+urllib.parse.urlencode(data, doseq=True)
  print(url)
  payload = {}
  headers = {}

  response = requests.request("GET", url, headers=headers, data=payload)

  print(response.text)
              
  const axios = require('axios');

  const username = "myUsername";
  const token = "myToken";

  let config = {
    method: 'get',
    maxBodyLength: Infinity,
    url: `http://api.labsmobile.com/get/balance.php?username=${encodeURIComponent(username)}&password=${encodeURIComponent(token)}`
  };

  axios.request(config)
  .then((response) => {
    console.log(JSON.stringify(response.data));
  })
  .catch((error) => {
    console.log(error);
  });
              
  require "uri"
  require "net/http"

  url = URI("http://api.labsmobile.com/get/balance.php")

  data = {
    'username' => 'myUsername',
    'password' => 'myToken'
  }

  url.query = URI.encode_www_form(data)
  https = Net::HTTP.new(url.host, url.port)
  request = Net::HTTP::Get.new(url)

  response = https.request(request)
  puts response.read_body

              
Resultado positivo
  <?xml version="1.0" encoding="utf-8"?>
  <response>
      <messages>9.956954285714286</messages>
  </response>
                  
Resultado erróneo
  <html>
    <head>
      <title>403 Forbidden</title>
    </head>
    <body>
      <h1>403 Forbidden</h1>
    /body>
  </html>
                  

Errores

A continuación se describen los códigos de error HTTP que puede devolver una petición a la API SMS http/GET.

Códigos HTTP
Código HTTPDescripción
200 OKPetición procesada correctamente.
400 Bad RequestError en los parámetros de la petición. Se detalla y especifica el error en el código devuelto en el formato XML.
401 UnauthorizedError en las credenciales o método de autenticación.
402 Payment RequiredError por falta de créditos en la cuenta.
403 ForbiddenPetición bloqueada por el filtro IP o por infringir alguna política de uso de la plataforma.
500 Internal Server ErrorError temporal o incidencia en el servicio

Esta es la lista completa de códigos de respuesta en el formato XML:

Códigos de resultado en el XML de respuesta
Código XMLDescripción
0Message has been successfully sent
10Missing XML data in request
11Badly formed XML in request
20The message element must be present in the request
21The message element cannot be empty
23There are no recipients
24Too many recipients
27This message contained one or more invalid character(s)
28Subid is exceeding maximum length
30There was an error while sending the message
35The account has no enough credit for this sending
39The value of the scheduled field is not a valid datetime format
41Scheduled messages cannot be send in test mode