https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-send-sms-messages-with-python-flask-and-vonage/python-flash_sms.png

Cómo enviar mensajes SMS con Python, Flask y Vonage

Publicado el November 1, 2023

Tiempo de lectura: 19 minutos

Hoy en día, casi todo el mundo utiliza los SMS. Los mensajes de texto son una forma sencilla y cómoda de charlar con los amigos, recibir actualizaciones importantes y realizar tareas básicas de seguridad, como la 2FA. Si eres desarrollador, Python ofrece una sencillez y comodidad similares, lo que lo convierte en uno de los lenguajes de programación más populares del mundo.

Entonces, ¿por qué no unir estos dos métodos y utilizar Python para enviar mensajes SMS?

En este tutorial, te mostraremos cómo enviar un SMS usando Python y Flask. Hemos preparado un pequeño ejemplo de código que será un excelente punto de partida para crear tu aplicación.

Cuenta API de Vonage

Para crear tu aplicación Python SMS, necesitarás una cuenta API de Vonage. Para poder utilizar la API de Messages de Vonagetendrás que crear una aplicación de Vonage desde el portal para desarrolladores.

Abrir Configuración API. En la pestaña Claves de API, encontrará su clave de API y el secreto de Account (secreto de API). Utilizaremos estas credenciales más adelante.

Vonage Application Settings

Instala el SDK Python de Vonage

En primer lugar, asegúrese de que su portátil/servidor tiene Python 3 instalado. A continuación, vamos a utilizar venv para crear un entorno aislado con sólo los paquetes necesarios.

Instale virtualenv mediante pip.

pip install virtualenv

Crear el entorno virtual

python3 -m venv venv

Active su entorno virtual

source venv/bin/activate

Instale el SDK de Python de Vonage

pip install vonage

Ejecutar REPL, el intérprete de comandos del lenguaje Python

python

Importar el SDK de Python de Vonage

import vonage

Crea un objeto cliente de Vonage que pueda reutilizarse y que conozca tu clave API de Vonage y su secreto.

client = vonage.Client(key='YOUR-VONAGE-API-KEY', secret='YOUR-VONAGE-API-SECRET')

Utilice send_message method para enviar un SMS. Puedes reemplazar "API de Vonage" por ID de remitente relacionado (nombre del remitente de SMS)

client.sms.send_message({"from": "Vonage APIs", "to": "**6**84**7*", "text": "A text message sent using the Vonage SMS API"})

Resultados esperados

{'messages': [{'to': '**6**84**7*', 'message-id': '59a00000-1c17-40c9-40c9-5ebc****4196', 'status': '0', 'remaining-balance': '**.12347500', 'message-price': '0.03430000', 'network': '2**0*'}], 'message-count': '1'}

Recibimos un diccionario en el que podemos analizar la siguiente información: ¿Se ha enviado correctamente el mensaje? El "estado": "0" significa que todo va bien. ¿En cuántos mensajes se dividió el SMS? ¿Cuánto cuesta enviar el mensaje? Depende del número de símbolos del SMS y del país del receptor.

Comprueba la notificación de tu teléfono y deberías recibir un mensaje SMS. Si no es así, comprueba el contenido de la respuesta.

Screenshot of an SMS message sent with the Vonage SMS API

Puedes monitorear y solucionar problemas de entrega de SMS en el panel de la API de Vonage

Crear un remitente de SMS con Python y Flask

Vamos a crear una pequeña aplicación web usando Flask y Python para enviar un SMS. Nuestra aplicación debe contener un formulario para un número de teléfono y un mensaje SMS. Cuando los usuarios presionen "Enviar SMS", se publicará en una segunda vista que enviará el SMS utilizando la SMS API de Vonage. Crea un archivo server.py y pega allí el código relacionado.

from dotenv import load_dotenv
from flask import Flask, flash, redirect, render_template, request, url_for
import vonage

from os import environ as env

# Load environment variables from a .env file:
load_dotenv('.env')

# Load in configuration from environment variables:
VONAGE_API_KEY = env['VONAGE_API_KEY']
VONAGE_API_SECRET = env['VONAGE_API_SECRET']
VONAGE_NUMBER = env['VONAGE_NUMBER']

# Create a new Vonage Client object:
client = vonage.Client(
   key=VONAGE_API_KEY, secret=VONAGE_API_SECRET
)

# Initialize Flask:
app = Flask(__name__)
app.config['SECRET_KEY'] = env['FLASK_SECRET_KEY']

@app.route('/')
def index():
   """ A view that renders the Send SMS form. """
   return render_template('index.html')

@app.route('/send_sms', methods=['POST'])
def send_sms():
   """ A POST endpoint that sends an SMS. """
   # Extract the form values:
   to_number = request.form['to_number']
   message = request.form['message']
   # Send the SMS message:
   result = client.sms.send_message({
       'from': VONAGE_NUMBER,
       'to': to_number,
       'text': message,
   })
   # Redirect the user back to the form:
   return redirect(url_for('index'))

Creemos ahora una plantilla en templates/index.html El siguiente HTML incluye el framework CSS de Bootstrap y luego renderiza un formulario con dos campos to_number para introducir el número de teléfono de destino y messagepara que el usuario pueda introducir su mensaje SMS.

<!doctype html>
<html lang="en">
   <head>
       <!-- Required meta tags -->
       <meta charset="utf-8">
       <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  
       <!-- Bootstrap CSS -->
       <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
  
       <title>Send an SMS</title>
     </head>
<body>
<script src="https://code.jquery.com/jquery-3.5.0.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<div class="container">
   <h1>Send an SMS</h1>
   <form action="/send_sms" method="POST">
       <div class="form-group"><label for="destination">Phone Number</label>
           <input id="to_number" class="form-control" name="to_number" type="tel" placeholder="Phone Number" /></div>
       <div class="form-group"><label for="message">Message</label>
           <textarea id="message" class="form-control" name="message" placeholder="Your message goes here"></textarea></div>
       <button type="submit" class="btn btn-primary">Send SMS</button>
   </form>
</div>
</body>
</html>

En este tutorial, utilizaremos la biblioteca python-dotenv para cargar un archivo .env archivo. Antes de iniciar tu servidor, necesitarás proporcionar una configuración en un archivo .env archivo. Comience con lo siguiente y rellene sus datos:

# Do not use this in production: FLASK_DEBUG=true # Replace the following with any random value you like: FLASK_SECRET_KEY=RANDOM-STRING_CHANGE-THIS-Ea359 # Sender ID (or SMS sender name), VONAGE_BRAND_NAME VONAGE_NUMBER=Vonage APIs # Get the following from ${CUSTOMER_DASHBOARD_URL}/settings VONAGE_API_KEY=paste-your-api-key VONAGE_API_SECRET=paste-your-api-secret

Cree requirements.txt y poner las dependencias relacionadas como en este archivo

Inicie su aplicación con el siguiente comando

FLASK_APP=server.py flask run

Abrir http://localhost:5000/ en su navegador y navegue hasta el capítulo "Enviar un SMS utilizando la aplicación Python".

Despliegue desde el código fuente

También puede desplegar una aplicación utilizando un ejemplo de código preparado. Para desplegar la aplicación, debe clonar el repositorio utilizando git y actualizar .env con tus credenciales

Clona el código fuente.

git clone https://github.com/obvonage/tutorial-sms-flask-python-sdk

Vaya a la carpeta del proyecto.

cd tutorial-sms-flask-python-sdk

Instale las dependencias.

pip install -r requirements.txt

Inicie su aplicación con el siguiente comando.

FLASK_APP=server.py flask run

Resultado esperado:

* Serving Flask app 'server.py' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:5000 Press CTRL+C to quit * Restarting with stat * Debugger is active! * Debugger PIN: 648-303-150

A continuación, abra http://localhost:5000/ en su navegador y debería ver la siguiente página web

Enviar un SMS con la aplicación Python

Python App for Sending SMS Using Vonage Python SDK

Vamos a enviar un SMS utilizando esta interfaz. Asegúrate de que el número está en formato internacional sin el "+" al principio. Pulsa "Enviar SMS" y comprueba tu teléfono. Puedes encontrar el código fuente de esta aplicación aquí.

Resumen

Enhorabuena. Ya has creado una aplicación para enviar SMS. También puedes usar la API de Messages de Vonage para enviar mensajes con Viber Business Messages, Facebook Messenger y WhatsApp.

Háganos saber cómo podemos ayudarle. Únete a la conversación en nuestro Slack de la comunidad de Vonage o envíanos un mensaje en Twitter.

Lecturas complementarias

Compartir:

https://a.storyblok.com/f/270183/400x409/b965ab37c0/oleksii-borysenko.png
Oleksii BorysenkoAntiguos alumnos de Vonage

Oleksii es Developer Advocate en Vonage, autor y narrador. Sus intereses incluyen IA/ML, comunicaciones unificadas, tecnologías educativas, tecnologías en la nube y código abierto.