Cómo enviar SMS por PHP en 5 pasos

🕒 6 min.

¿Quieres enviar mensajes masivos cortos al instante a móviles y directamente en conexión con tu aplicación, página web, software, CRM, etc.? 

Puedes hacerlo mediante PHP. 

En este post te explicaremos lo que es, cómo hacerlo mediante la API de Instasent, te daremos tips y te hablaremos de los errores técnicos más comunes. 

¡Vamos allá!

¿Qué es PHP?

Lo primero de todo es saber lo que significa PHP: acrónimo de Hypertext Preprocessor, es un lenguaje de código abierto especialmente adecuado para el desarrollo web, con el cual podemos enviar notificaciones masivas mediante una pasarela SMS o SMS gateway.

¿Cómo funciona?

Al programar con PHP, este te da la oportunidad de enviar tus mensajes de SMS desde distintas plataformas, como tu página web o aplicación, a través de un módem GSM, de forma que puedas mandar una confirmación de compra, información sobre errores en el servicio, una clave de activación o una oferta que tengas en tu web.

Es básicamente crear un formulario en HTML con lo siguiente:

  1. un formulario ( form method=”post” action=”sms.php”, etc… )
  2. un campo de texto para ingresar el nombre/teléfono del remitente.
  3. un campo de texto para ingresar el teléfono del destinatario.
  4. por último: un campo para escribir texto (textarea) con el valor “mensaje” y un botón enviar.

Ejemplos

Esto es enviar un SMS con la API, nuestro SDK PHP lo hace por ti con un interface muy amigable (recuerda poner tu API Token en la cabecera “Authorization”):

$> curl – location – request POST 'https://api.instasent.com/sms/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer MY_TOKEN' \
--data-raw '{ "from":"Instasent", "to":"+34666000000", "text":"Test message" }'

La respuesta:

json
{
  "entity": {
    "id": "588875a72c98d52a6348e701",
    "clientId": null,
    "status": "enqueued",
    "statusCode": null,
    "from": "Instasent",
    "country": "ES",
    "to": "+34666000000",
    "normalizedTo": "+34666000000",
    "charsCount": 12,
    "text": "Test message",
    "deliveredText": "Test message",
    "messagesCount": 1,
    "concatsLimit": 10,
    "finalMessagesCount": 1,
    "encoding": "GSM_7BIT",
    "unicode": false,
    "allowUnicode": false,
    "isSanitized": true,
    "isTruncated": false,
    "charged": true,
    "pricePerSms": 0,
    "priceUser": 0,
    "deliveryReportMask": 0,
    "scheduledAt": null,
    "chargedAt": "2020-01-01T00:00:00+0200",
    "sentAt": null,
    "deliveredAt": null,
    "createdAt": "2020-01-01T00:00:00+0200"
  }
}

Cómo hacerlo a través de la API de Instasent

Paso 1: Instala el SDK de Instasent

$> composer require instasent/instasent-php-lib

php
<?php

use Instasent\SmsClient as InstasentClient;

Paso 2: Importa la librería

require __DIR__  . '/vendor/autoload.php';

Paso 3: Crea el cliente

Asegúrate de incluir aquí tu API token:

$instasentClient = new InstasentClient("MY_TOKEN");

Paso 4: Envía un SMS

$response = $instasentClient->sendSms("Instasent", "+34666000000", "Test message");

Paso 4 (alternativa): Envía SMS con caracteres Unicode (con esta opción, puedes enviar emojis):

$response = $instasentClient->sendUnicodeSms("Instasent", "+34666000000", "Unicode test message: ña éáíóú 😀");

Paso 5: Revisa la respuesta

if ($response["response_code"] === 201) {
    // Send success
    $sms = \json_decode($response["response_body"], true)['entity'];
} else {
    // Send error
}

Recomendaciones y tips a la hora de enviar mensajes por PHP

Remitente

Cuando quieras mandar un mensaje de texto, deberás incluir el remitente, que es el campo “from”. El nombre o número que pongas ahí será el que le aparezca al destinatario.

Pero ten en cuenta que este campo tiene un límite de 11 caracteres.

Destinatario

El número de teléfono del destinatario debe estar indicado en el formato E.164, y tiene que incluir:

  • el signo más (+)
  • seguido del prefijo de país (por ejemplo 34 para España)
  • finalmente el número de teléfono

Juego de caracteres

Es importante tener en cuenta el juego de caracteres de tu mensaje SMS:

GSM (Sistema Global de Comunicaciones Móviles): Este sistema está limitado a caracteres latinos, incluida la ñ, y a ciertos acentos únicamente.

Unicode: Los caracteres permitidos no están limitados, pudiendo enviar incluso emojis 😀

Ten en cuenta que la plataforma de Instasent detecta automáticamente el juego de caracteres que se haya usado.

Longitud del mensaje

Como ya hemos hablado en otros posts, los SMS están limitados en longitud, y ésta longitud depende del juego de caracteres usado:

  • GSM: Tiene un límite de 160 caracteres por mensaje (153 para mensajes concatenados)
  • Unicode: El límite de caracteres que caben en un mensaje baja a 70 (67 para mensajes concatenados)

Un mensaje cuya longitud supere el límite para caber en un único SMS, tanto para GSM como para Unicode, será dividido en varias partes que se enviarán al teléfono deseado.

Una vez todas las partes llegan al teléfono se recompone el mensaje original, de tal forma que finalmente al destinatario le aparece como un sólo mensaje.

Postman Collection

Proporcionamos la colección InstasentAPI en el archivo InstasentAPI.postman_collection.json para incluirlo en Postman y poder probar la API rápidamente. 

Para ayudarte  a ver como funciona nuestra api te proporcionamos una collection de Postman que puedes descargarte:

Códigos de respuesta

La API usa los códigos HTTP para sus respuestas.

El código 201 es el que indica que el envío del SMS ha sido correcto.

En caso de recibir un código diferente a 201 ésta es su explicación:

  • 400 Wrong Request: Hay algo incorrecto en la petición
  • 401 Authentication Failed: El token usado no es válido
  • 402 No Funds: No hay saldo para enviar mensajes
  • 413 Request entity too large: Demasiados elementos en un envío bulk
  • 422 Validation Errors: Error de validación
  • 429 Rate limit reached: Demasiadas peticiones por minuto

Errores más comunes

Como acabamos de ver, puede haber una serie de errores a la hora de enviar un mensaje de texto a través de PHP, pero existen dos de ellos que son más comunes:

  • El error más habitual es el 422, en cuya respuesta está indicado el campo o campos cuya validación ha fallado:
json
{
  "errors": {
    "fields": {
      "to": [
        "Invalid number"
      ]
    }
  }
}
  • El segundo error más común es 429 (demasiadas peticiones por minuto). En este caso, la solución es simplemente bajar la velocidad de envío por minuto.

¿Por qué deberías hacer tus envíos con la API de Instasent?

La API HTTP de Instasent no solo te permite enviar mensajes de texto a través de una interfaz muy amigable, sino que también podrás hacer búsquedas de números

Código de búsqueda de cliente

Además, en Instasent tenemos una sección de prueba en cada punto final para que pueda probar fácilmente las solicitudes / respuestas de la API.

También tenemos algunos SDK para los lenguajes de programación más populares y una herramienta de generación automática de código.

Nuestros precios

En Instasent ofrecemos tarifas que se adaptan a lo que necesites. Por eso, pagarás solo por los SMS que envíes, sin cuotas de alta ni cuotas mensuales.

Aquí te dejamos nuestra calculadora de precios, que depende del país de destino y la cantidad de SMS que quieras mandar.

Si, por ejemplo, quieres mandar 300 SMS a España, el precio sería de 12€, como puedes observar en la tabla de abajo.

Ejemplo de precio por 300 SMS con Instasent

Deja un comentario