Cómo enviar SMS por Python en 5 pasos

ūüēí 8 min.

Cómo funciona

Python es un lenguaje de programación de alto nivel, muy versátil para llevar a cabo desde el desarrollo de un sitio web hasta aplicaciones para sistemas operativos.

El lenguaje de programación Python utiliza módulos de código que son intercambiables en lugar de una larga lista de instrucciones que era estándar para los lenguajes de programación funcional.

Así es como funciona el intérprete de Python

Cuenta con las siguientes caracter√≠sticas: 

  • Es sencillo y veloz: Los programas en Python se crean de manera r√°pida y pueden tener de 3 a 5 l√≠neas de c√≥digo menos que su equivalente en Java.
  • Es gratuito: Se trata de un lenguaje open source o de c√≥digo abierto, por lo que no hace falta ninguna licencia especial para usarlo. 
  • Est√° respaldado por una enorme comunidad: Se desarrollan nuevas librer√≠as y aplicaciones continuamente por programadores, solucionando posibles dudas en multitud de foros. 
  • Es un lenguaje multiparadigma: Combina propiedades de diferentes paradigmas de programaci√≥n, lo que hace que sea muy flexible y f√°cil de aprender.
  • El hecho de que sea multiparadigma permite utilizarlo en distintos campos como el dise√Īo de aplicaciones web o la inteligencia artificial.
  • Multiplataforma: Python es apto para todas las plataformas, que se adapta a diferentes softwares (Windows o Linux, por ejemplo).

Este lenguaje de programaci√≥n nos permite crear multitud de acciones de comunicaci√≥n de manera sencilla, como bots en la web de nuestra marca, mensajes autom√°ticos para nuestras campa√Īas de marketing, controlar las entradas y salidas de GPIO en una Orange Pi o Raspberry Pi, interactuar con el servidor de WhatsApp con la librer√≠a Yowsup cli, e incluso hacer una llamada.

Cómo hacerlo por pasos

Antes de nada, si a√ļn no la tienes, te recomendamos que crees una cuenta en Instasent para poder disfrutar de todos sus productos y contar con un SDK para los lenguajes de programaci√≥n m√°s comunes.

1 – Lo primero que tienes que hacer es instalar el kit de desarrollo de software (SDK) de Instasent.

2 El siguiente paso será importar la librería:

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

3 РLuego tocará crear el cliente al que le queremos enviar el SMS. En este código, tienes que asegurarte de incluir tu API token.

$instasentClient = new InstasentClient("MY_TOKEN");

4 Despu√©s nos quedar√° enviar el SMS. Puedes hacerlo con caracteres Unicode (con el que podr√°s enviar emojis) o GSM (limitado a caracteres latinos que incluye la √Ī). Veamos un ejemplo de cada uno:

Unicode:

$response = $instasentClient->sendUnicodeSms("Instasent", "+34666000000", "Unicode test message: √Īa √©√°√≠√≥√ļ ūüėÄ");

GSM:

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

5 Por √ļltimo, solamente tendremos que revisar la respuesta:

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

Ejemplo

Este es el ejemplo m√°s sencillo para enviar un SMS mediante cURL. Aqu√≠, en la secci√≥n “Authorization”, tendr√°s que poner tu API token:

$> 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": 28,
    "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"
  }
}

Consideraciones y recomendaciones

Remitente

El campo “from” es el remitente del mensaje que le aparecer√° al destinatario. Recuerda que este campo tiene un l√≠mite de 11 caracteres, por lo que si el nombre de tu marca es m√°s largo, te recomendamos que que lo ‚Äúrecortes‚ÄĚ, por ejemplo, juntando las palabras. 

Destinatario

Cuando vayas a insertar el n√ļmero de uno de tus contactos, recuerda que este tiene que estar siempre en formato E.164. Como sabr√°s, cada pa√≠s cuenta con un prefijo que debemos incluir cuando realizamos una llamada o enviamos un mensaje. El de Espa√Īa es el 34. Por lo tanto, sigue estos pasos:

  • inserta el signo m√°s (+)
  • luego a√Īade el prefijo de pa√≠s al que vaya dirigido tu SMS
  • por √ļltimo mete el n√ļmero de tel√©fono

Juego de caracteres

Como hemos comentado más arriba, los tipos de codificación difieren dependiendo de lo que quieras usar en tus SMS:

  • GSM: Este se ci√Īe solamente al alfabeto latino. Incluye algunos acentos, pero no todos.
  • Unicode: No hay ning√ļn tipo de limitaci√≥n y, adem√°s, puedes insertar emoticonos ūüėÄ

Cuando escribas tu SMS, Instasent captará el tipo de símbolos que estás usando.

Longitud del mensaje

Seg√ļn el juego de caracteres que uses, tendr√°s distinto margen en cuanto a la largura de tu mensaje de texto. Pi√©nsalo bien antes de usar uno de los dos porque la diferencia entre los dos es importante:

  • GSM: El n√ļmero m√°ximo de caracteres es de 160 (153 para SMS concatenados).
  • Unicode: Este se limita solo a 70 caracteres (67 para SMS concatenados).

Si te pasas de caracteres, el sistema lo detectar√° como varios SMS (independientemente del juego de caracteres que uses). Al destinatario le llegar√° como solo un SMS (todo junto), pero a ti te lo contar√° (y cobrar√°) como varios. Ten esto muy en cuenta para no llevarte sustos.

Postman Collection

En la sección de Documentación de Instasent, tendrás a tu disposición la carpeta denominada InstasentAPI.postman_collection.json para que puedas incluirlo en Postman y así usar la API.

SDK de Python

Instasent proporciona SKD para encapsular y facilitar el uso de nuestra API Rest en varios lenguajes, entre ellos Python.

Lo primero que hay que hacer es instalar el SDK mediante pip:

$> pip install instasent

Una vez tenemos instalado el SDK ya podemos usarlo:

python
import instasent

client = instasent.Client('MY_TOKEN')

Aseg√ļrate de incluir tu API token en la parte de los par√©ntesis.

Envío de SMS solo con caracteres GSM:

response = client.send_sms('Instasent', '+34666000000', 'Test message')

Envío de SMS con caracteres Unicode:

response = client.send_sms_unicode('Instasent', '+34666000000', 'Unicode test message: √Īa √©√°√≠√≥√ļ ūüėÄ')

if response['response_code'] != 201:
    // Send success
    print response['response_code']
    print response['response_body']
else:
    // Send error

Errores técnicos más comunes

Los errores más usuales suelen ser los código de respuesta, que a ti te llegarán como códigos HTTP desde la API. Vamos a ver lo que significa cada uno:

El código 201 es un código positivo, que significa que el mensaje ha sido enviado adecuadamente.

El problema viene cuando el código que recibimos es distinto a ese. En este caso, cada código tiene su motivo:

  • 400 Wrong Request: El cuerpo de la solicitud tiene un formato incorrecto o algo sali√≥ mal con tu solicitud
  • 401 Authentication Failed: El token usado no es v√°lido
  • 402 No Funds: Te has quedado sin cr√©dito en tu cuenta
  • 413 Request entity too large: Tu env√≠o masivo de SMS tiene elementos de m√°s
  • 422 Validation Errors: Error de validaci√≥n (por ejemplo, cuando el n√ļmero de destino no es v√°lido)
  • 429 Rate limit reached: Hay muchas demandas de SMS por minuto

Uno de los errores que m√°s llega es el 422, el cual nos indica qu√© es exactamente lo que ha fallado en el env√≠o de SMS. En el ejemplo de abajo vemos que el error es que el n√ļmero no es v√°lido.

json
{
  "errors": {
    "fields": {
      "to": [
        "Invalid number"
      ]
    }
  }
}

Otro de los errores habituales es el 429, el cual significa que queremos enviar demasiados SMS por minuto. La solución a este problema sería sencillamente disminuir la velocidad en la que enviamos los mensajes al minuto.

Por qué hacerlo con la API de Instasent

En Instasent contamos con una interfaz muy amigable que te facilitará y agiliza cualquier tarea de programación y envíos. Asimismo, nuestra API HTTP te permite:

  • Enviar SMS
  • Buscar n√ļmeros
  • Verificar n√ļmeros de tel√©fono

Para cada acción que mencionamos arriba, tenemos una sección de prueba en la que podrás hacer intentos de cómo funcionan para ver si se adaptan a lo que estás buscando. Además, contamos también con una herramienta que puede generar códigos automáticamente.

Precios

Te lo ponemos fácil para que pagues solo por los SMS que envíes, con tarifas adaptadas a lo que realmente necesitas, sin cuotas de alta ni cuotas mensuales. Además, te ofrecemos una calculadora de precios para que puedas hacerte una idea de cuánto te costarán los envíos que desees realizar (el precio varía dependiendo del país de destino y la cantidad de SMS que quieras mandar).

Disponemos de diferentes métodos de pago, entre ellos Paypal, Tarjeta de crédito y Transferencia bancaria, y trabajamos en más de 200 países.

Deja un comentario