https://d226lax1qjow5r.cloudfront.net/blog/blogposts/using-a-message-queue-with-sms-for-throughput-limitations/Blog_Send-Outgoing-SMS_1200x600.png

Utilización de una cola de mensajes con SMS para las limitaciones de caudal

Publicado el May 5, 2021

Tiempo de lectura: 9 minutos

En algunos países, la limitación del rendimiento de los SMS y la lentitud de las solicitudes (a veces sólo una por segundo) dificultan el envío masivo. Una forma de superar estas limitaciones es utilizar una cola de mensajes, como AWS SQS.

Para este ejemplo, se crea un microservicio sin servidor en AWS Lambda utilizando esta aplicación Python disponible en Github que utiliza Flasky sin servidor. La aplicación tiene dos propósitos: Añade mensajes a AWS SQS y luego facilita el envío real a través de Vonage SMS según lo solicitado.

Requisitos previos

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Instrucciones de instalación

Clonar el archivo nexmo-community/sms-aws-sqs-python-sender de GitHub y navega hasta el directorio recién creado para continuar.

Medio ambiente

Cambie el nombre de .env.default a .env y añada valores a VONAGE_API_KEY y VONAGE_API_SECRET proporcionados en tu Panel de la API de Vonage.

Configuración de AWS

Necesita crear credenciales de AWS como indica Serverless. Actualice el .env con ellas.

Además, cree una nueva cola SQS FIFO utilizando la configuración predeterminada y actualice .env con la URL de la cola SQS. FIFO garantiza que los mensajes se envíen en el orden en que se almacenaron.

Utilización

Para empezar, cree un virtualenv dentro de la raíz del proyecto para contener el proyecto. A continuación, actívelo de la siguiente manera:

virtualenv venv --python=python3 source venv/bin/activate

A continuación, inicializa npm y sigue las indicaciones seleccionando los valores predeterminados, a menos que desees cambiar alguno de ellos. Además, utiliza npm para instalar las dependencias necesarias para DEV para que Serverless y Lambda funcionen con la aplicación Flask.

npm init npm install --save-dev serverless-wsgi serverless-python-requirements

Ahora puedes usar pip para instalar las dependencias de Python necesarias. Las dependencias están en el requirements.txt, así que instruye a pip para que lo use.

pip install -r requirements.txt

Running Local

Si desea ejecutar la aplicación localmente y probar las cosas, antes de implementar en AWS Lambda, puede servirla con el siguiente comando:

sls wsgi serve

Por defecto, sirve la aplicación en http://localhost:5000. Pulsa Ctrl+c para cerrarla.

Despliegue en Lambda

Con todo lo anterior terminado con éxito, ahora puede utilizar Serverless para implementar la aplicación en AWS Lambda.

sls deploy

IMPORTANTE: Esta aplicación no contiene ninguna autenticación para su uso. Por lo tanto, asegúrate de agregar autenticación delante de ella para evitar el uso público. Al dejarla abierta al público, podría dar lugar a cargos por uso en AWS y Vonage.

Puntos finales disponibles

Hay 3 puntos finales de URL disponibles con este cliente:

1 solicitud GET a /

  • No realiza ninguna acción, pero proporciona una forma rápida de probar

2 Solicitud POST a /add

  • Esta acción almacena el mensaje en SQS.

  • Pase un POST con un cuerpo JSON como el siguiente. Sustituya los marcadores de posición, indicados con <> con sus datos.

  • El resultado contiene el SQS MessageId.

{
    "from": "<your_name_or_number>",
    "message": "<sms_message_contents>",
    "to": "<recipients_number>"
}

3 Solicitud GET a /process

  • Inicia el proceso de envío.

  • Recupera mensajes de la cola SQS FIFO.

  • Se conecta a Nexmo y envía el mensaje SMS.

location=None, media_mode=relayed, archive_mode=manual
Ejemplos:

Vaya a la URL proporcionada por el proceso de despliegue. A continuación se muestran algunos ejemplos de solicitudes de muestra: (Su URL puede variar.)

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/

El punto final / devuelve el mensaje genérico.

POST https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/add

El punto final add devuelve el SQS MessageId.

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/process

El punto final process devuelve un mensaje que indica que el envío se ha realizado correctamente.

Desactivar Virtualenv

Para salir del virtualenv, puede desactivarlo cuando lo desee.

deactivate

NOTA: Dependiendo del sistema operativo, puede que tenga que anteponer virtualenv al comando anterior.

Próximos pasos

En este ejemplo, la aplicación contiene un endpoint /process con una petición HTTP GET a intervalos programados. Alternativamente, el código en /process podría colocarse en una función Lambda independiente y llamarse directamente desde eventos programados de CloudWatch en lugar de una solicitud HTTP GET.

Si tiene alguna pregunta o se encuentra con problemas, puede ponerse en contacto con @VonageDev en Twitter o consultar en la Comunidad de Vonage en Slack. Buena suerte.

Compartir:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAntiguos alumnos de Vonage

Adam es un desarrollador y consultor al que le gusta correr a toda velocidad, bloguear y ayudar a otros a domar la tecnología para conseguir cosas increíbles, con un deseo insaciable de servir de mentor y ayudar.