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 鈥渞ecortes鈥, 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.

TU PRESUPUESTO A MEDIDA

RESUMEN DE COMPRA

Pa铆s Espa帽a

N潞 de SMS 0

Precio total (sin IVA) 0 鈧

Precio por SMS (sin IVA) 0 鈧

Descarga el listado completo de precios SMS por pa铆s

WOW!

Para volumenes superiores a 10 mil SMS ponte en contacto con nosotros y te haremos una oferta!

Deja un comentario