https://d226lax1qjow5r.cloudfront.net/blog/blogposts/receiving-sms-delivery-receipts-with-python-dr/sms-delivery-receipts_python.png

Recepción de SMS salientes con Python

Publicado el July 17, 2023

Tiempo de lectura: 11 minutos

Ya has aprendido a enviar un SMS con Python. También has aprendido a recibir mensajes SMS en aplicaciones Python. Pero a menos que tengas acceso al dispositivo al que lo has enviado, ¿cómo puedes estar seguro de que tu SMS ha llegado?

Con la API de Messages API de Vonage, puedes confirmar la entrega a través de webhooks y crear recibos de entrega (también conocidos como DLR o informes de entrega). En este tutorial, aprenderás a configurar pruebas de entrega de SMS en Python con ayuda de la API de Vonage.

Nota: Existen dos API para las aplicaciones de SMS en Vonage. La SMS API se puede utilizar para la mensajería SMS, mientras que la Messages API te permite usar canales SMS y no SMS como WhatsApp, Facebook Messenger, Viber y MMS. Este tutorial utiliza la API de Messages.

Requisitos previos

Para crear una aplicación Python para la confirmación de entrega de SMS, primero necesitarás una cuenta API de Vonage. Una vez que hayas configurado tu Account de Vonage, también necesitarás instalar las siguientes herramientas:

  • Python como marco de trabajo para su aplicación.

  • Flask se utilizará para escribir su webhook para los informes de entrega de SMS.

  • El CLI de Vonage te permitirá configurar correctamente tu cuenta de Vonage. También se puede utilizar para comprar un número virtual.

Python

Obtenga la versión adecuada de Python para su sistema operativo en la página oficial de descargas de página oficial de descargas de Python.

  1. Antes de instalar Flaskcree el directorio de su proyecto y navegue en él de la siguiente manera:

mkdir delivery_receipt
cd delivery_receipt

Frasco

Instale Flask con el pip gestor de paquetes. pip viene instalado con Python. A continuación, utilizará Flask para impulsar su aplicación. Utilice el siguiente comando de terminal para instalar Flask dentro de la carpeta recién creada.

pip install flask

CLI de Vonage

Instala la CLI de Vonage globalmente en tu terminal con el npm gestor de paquetes:

npm install -g @vonage/cli

Instrucciones

Una vez que hayas instalado correctamente los paquetes anteriores, puedes empezar a crear tu aplicación Python para las pruebas de envío de SMS.

Estos son los pasos para crear una aplicación Python que reciba informes de entrega de SMS:

  1. Crear un webhook para los recibos de entrega de SMS

  2. Hacer pública la URL del webhook

  3. Configura tu Account de Vonage para los recibos de entrega

  4. Enviar un SMS para probar los informes de entrega en Python

1. Crear un Webhook para recibos de entrega de SMS

El primer paso para recibir recibos de entrega de SMS es crear un webbook.

Cuando envías mensajes a través de tu (aplicación de Vonage)[https://developer.vonage.com/en/getting-started/concepts/glossary#vonage-application], el recibo de entrega se reenvía a tu aplicación Python si has configurado una URL de webhook en tu panel de control de Vonage. Configuraremos la parte de Vonage más adelante, pero ahora configuraremos nuestra aplicación Flask para que acepte esta solicitud POST.

Usted aceptará una POST en su controlador webhook para recibir actualizaciones del estado de los mensajes. Las solicitudes de webhook de la API de Messages son POST peticiones. Creará un punto final Flask para la solicitud.

Cree un archivo receipt.py en tu proyecto Flask y añade el siguiente código:

#!/usr/bin/env python3
from flask import Flask, request, jsonify
from pprint import pprint

app = Flask(__name__)

@app.route("/webhooks/message-status", methods=['POST'])
def message_status():
  if request.is_json:
    data = request.get_json()
    pprint(data)
  else:
      data = dict(request.form) or dict(request.args)
      pprint(data)

  return "200"

if __name__ == '__main__':
  app.run(host="", port=3000)

En el código anterior, has creado el endpoint webhook /webhooks/message-statusque acepta el código de estado de SMS a través de webhooks.

El endpoint también analiza la solicitud entrante y utiliza la función request.get_json() para comprobar si la solicitud está en formato JSON. Las peticiones codificadas en JSON tienen su mimetype se establece en application/json o application/*+json.

Si la solicitud no está en formato JSON, entonces request.form y request.args recuperan los pares clave/valor del cuerpo de la solicitud o de la cadena de consulta de la URL, respectivamente.

A continuación, el endpoint analiza los datos de la solicitud en la variable data y los imprime en el terminal utilizando pprint. El último comando ejecuta el servidor de la aplicación en el puerto 3000.

2. Hacer pública la URL del Webhook

Ahora, crearás una URL de acceso público a la cual las API de Vonage puedan enviar las solicitudes de webhook. De esta manera, la API de Vonage puede acceder al webhook que creaste para los recibos de entrega.

ngrok es un motor ligero y rápido que imita a un servidor web. Por lo tanto, no tendrás que hacer configuraciones DNS, configuraciones SSL y otras cosas que necesitarías en un escenario de producción real. ngrok es una herramienta útil para pruebas rápidas en un entorno de desarrollo. Puede consultar este tutorial para ver más información sobre cómo utilizar ngrok.

En primer lugar, instale ngrok desde el sitio web oficial oficial.

A continuación, ejecute ngrok en su terminal:

ngrok http 3000

Obtendrá una URL pública similar a la siguiente:

https://f9db-102-89-43-137.eu.ngrok.io -> http://localhost:3000

Puede realizar peticiones web a la URL que ngrok ha generado. Se sirve en el puerto 3000 de su máquina local.

Tenga en cuenta los siguientes puntos:

  • La URL cambia cada vez que reinicia el ngrok servidor si está en el plan gratuito.

  • Una sesión de servidor ngrok dura 1 hora en el plan gratuito, después de lo cual puede iniciar el servidor de nuevo y se obtiene una nueva URL pública.

Necesitas añadir tu endpoint a la URL ngrok recién generada para formar tu URL webhook así:

  • https://f9db-102-89-43-137.eu.ngrok.io/webhooks/message-status

La URL anterior es la URL completa de tu webhook.

3. Configurar tu Account de Vonage para recibos de entrega

Ahora que tu webhook de recibo de entrega está listo, completarás la configuración en tu Account de Vonage.

Visite la sección de configuración de tu panel de control y ve a la sección Configuración de SMS para seleccionar Messages API. Puedes mantener los demás valores predeterminados, como la versión de Messages API, en 1.0.

A continuación, vaya a la sección aplicaciones para crear una aplicación de Vonage. Haz clic en el botón + Crear aplicación . Luego, ingresa el nombre que desees en el campo Nombre que desee.

En la sección Capacidades, seleccione Mensajes e introduzca su webhook URL de estado. Deberá introducir su URL tanto para Inboud como para Status URL. Puede consultar nuestro Cómo recibir mensajes SMS en Python sobre cómo configurar la URL de entrada para aceptar mensajes SMS entrantes.

Su panel de control debe tener este aspecto con sus URL ngrok:

ngrok Webhooks Configured For Messages APIngrok-webhooks-configured-for-messages-api.png

Haga clic en Generar nueva aplicación para completar el proceso de creación. Esto le llevará automáticamente a la página de la solicitud

En la página de solicitud, podrás vincular tu número o comprar un número virtual si usas una cuenta paga de Vonage.

4. Enviar un SMS para probar los informes de entrega en Python

En este punto, tu servidor ngrok debería estar ejecutándose en el puerto 3000Asegúrate de haber configurado tu aplicación con un número virtual en tu cuenta de Vonage.

Ahora, puede iniciar la aplicación Flask en otra ventana de terminal para mantener la ventana de terminal anterior en ejecución con ngrok.

Utilice el siguiente comando para lanzar la aplicación en el puerto especificado 3000. ngrok obtiene la aplicación del puerto y la sirve en Internet a través de su URL pública.

python receipt.py

Para probar nuestro código, necesitaremos enviar un SMS desde nuestro número de Vonage a través de Messages API.

En primer lugar, crearemos un nuevo archivo en nuestro proyecto llamado send-sms.sh

En ese archivo añadiremos el siguiente código:

curl -X POST https://api.nexmo.com/v1/messages \
  -H 'Authorization: Bearer '$JWT\
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d $'{
          "message_type": "text",
          "text": "Vonage Delivery Receipt Testing",
          "to": "'$TO_NUMBER'",
          "from": "'$FROM_NUMBER'",
          "channel": "sms"
}'

Reemplaza $TO_NUMBER con tu número personal, $FROM_NUMBER con tu número virtual de Vonage y $JWT con un JWT que crees para la aplicación. Puedes usar nuestra herramienta generadora de JWT en línea.

Asegúrese de añadir el código de su país a YOUR_PERSONAL_NUMBER como 23400000001

A continuación, abra una nueva pestaña en su terminal y ejecute:

bash send-sms.sh

Deberías ver una respuesta con el message_id, así:

{"message_uuid":"6cdbd8ed-7217-4bbf-ba3f-da9cdcaeaf2b"}

Entonces si miras en tu pestaña ngrok verás una petición POST exitosa, como esta:

POST /webhooks/message-status  200 OK

Y por último, verás en la pestaña de tu aplicación, deberías ver el estado del albarán en el terminal como el siguiente:

{'channel': 'sms',
 'destination': {'network_code': '42507'},
 'from': '972523083911',
 'message_uuid': '30af1182-e2c9-4986-bf60-0129a14bbc79',
 'sms': {'count_total': '1'},
 'status': 'submitted',
 'timestamp': '2023-06-19T10:23:16Z',
 'to': '972532208911',
 'usage': {'currency': 'EUR', 'price': '0.093'}}

Observe que el estado es submitted. En unos segundos deberías recibir una segunda respuesta parecida a:

{'channel': 'sms',
 'destination': {'network_code': '42507'},
 'from': '972523083911',
 'message_uuid': '30af1182-e2c9-4986-bf60-0129a14bbc79',
 'status': 'delivered',
 'timestamp': '2023-06-19T10:23:23Z',
 'to': '972532208911'}

Conclusión

Cuando trabajas con mensajes SMS, los recibos de entrega pueden ser críticos, especialmente si estás creando aplicaciones a gran escala. Al crear una aplicación Python para los recibos de entrega, sabrás que la entrega falla y podrás tomar medidas correctivas

Este artículo muestra cómo obtener recibos de entrega de mensajes SMS enviados a través de Messages API de Vonage. Aprendiste a crear una aplicación basada en Python para manejar los informes de entrega de SMS y aprendiste a probar esta aplicación con ngrok. Ahora, puedes incluir la función de recibos de entrega en cualquier aplicación de Python que crees.

Lecturas complementarias

Puede consultar algunos de nuestros recursos para obtener más información sobre Messages API:

  1. Descripción de la API de Messages

  2. Referencia de la API Messages

  3. Guía de recibos de entrega

  4. Restricciones a los recibos de entrega

¿Te ha gustado este tutorial? ¿Te has quedado atascado? Ponte en contacto con nosotros en Twitter o en Slack de la comunidad de Vonage. ¡Nos entusiasma ver lo que estás construyendo!

Compartir:

https://a.storyblok.com/f/270183/400x397/505bfb0eb9/jekayinoluwa-olabemiwo.png
Jekayinoluwa Olabemiwo

Jẹ́káyinOlúwa is a software craftsman and product manager passionate about technology and its impact on people. He works on product management, backend development, DevOps, technical writing, and community strategy. He enjoys dealing in the intersection of software, design, and human interaction. He likes reading and music.