Enviar mensajes de WhatsApp desde Python con la API oficial

Índice de contenido
  1. Prepara una prueba en Meta
  2. Configura variables fuera del código
  3. Envía una única solicitud de prueba
  4. Límites y errores que debes distinguir
  5. Fuentes oficiales

Para enviar mensajes de WhatsApp desde Python utiliza la plataforma oficial de WhatsApp Business y su API de la nube. Prepara primero una prueba con un destinatario autorizado, una plantilla disponible y un token de tu propia aplicación. Automatizar una sesión de WhatsApp Web no sustituye ese proceso.

Prepara una prueba en Meta

  1. Sigue los primeros pasos oficiales para crear o configurar una aplicación con el caso de uso de WhatsApp.
  2. En la configuración de la API, identifica el número emisor y su identificador. Un identificador de número no es el número que escribe un usuario.
  3. Registra un destinatario de prueba autorizado y comprueba primero el envío desde el panel.
  4. Identifica el token, la versión de Graph API y una plantilla habilitada con su idioma.
Instalador de Python en Windows con la opción Add Python to PATH marcada
Imagen 1: Durante la instalación en Windows, marca “Add Python to PATH” para evitar problemas con pip y la terminal.
Comando python --version ejecutado en Windows
Imagen 2: Verifica tu instalación con python --version (o py --version).

Los requisitos de permisos, revisión y cuenta dependen del despliegue. No copies credenciales de un tutorial ni supongas que un token temporal sirve para producción. Revisa su caducidad, los activos a los que da acceso y los permisos que necesita tu aplicación.

Configura variables fuera del código

El ejemplo lee WA_GRAPH_VERSION, WA_PHONE_NUMBER_ID, WA_ACCESS_TOKEN, WA_TEST_RECIPIENT, WA_TEMPLATE_NAME y WA_TEMPLATE_LANGUAGE del entorno del proceso. Configúralas con los valores de tu panel: la versión debe ser una admitida por tu aplicación y el nombre e idioma deben coincidir con la plantilla disponible.

El caso mostrado es una plantilla de prueba sin parámetros. Si tu plantilla tiene variables, encabezados o botones obligatorios, necesitarás incluir sus componentes según la documentación; este cuerpo no es suficiente para cualquier plantilla. No guardes tokens en repositorios, capturas o páginas públicas.

Envía una única solicitud de prueba

import json
import os
import urllib.error
import urllib.request

version = os.environ["WA_GRAPH_VERSION"]
phone_id = os.environ["WA_PHONE_NUMBER_ID"]
token = os.environ["WA_ACCESS_TOKEN"]
recipient = os.environ["WA_TEST_RECIPIENT"]
template_name = os.environ["WA_TEMPLATE_NAME"]
language = os.environ["WA_TEMPLATE_LANGUAGE"]

payload = {
    "messaging_product": "whatsapp",
    "to": recipient,
    "type": "template",
    "template": {
        "name": template_name,
        "language": {"code": language}
    }
}
request = urllib.request.Request(
    f"https://graph.facebook.com/{version}/{phone_id}/messages",
    data=json.dumps(payload).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    },
    method="POST"
)
try:
    with urllib.request.urlopen(request, timeout=30) as response:
        result = json.load(response)
    messages = result.get("messages") or []
    print("Identificador:", messages[0].get("id") if messages else "No indicado")
except urllib.error.HTTPError as error:
    print("La API rechazó la solicitud. Código HTTP:", error.code)
except urllib.error.URLError:
    print("No se pudo confirmar el resultado. Revisa antes de reenviar.")

El código usa la biblioteca estándar de Python y no programa envíos masivos. Ejecútalo únicamente después de preparar tu cuenta y el destinatario. Un identificador en la respuesta significa que Meta aceptó la solicitud; no acredita por sí solo la entrega o lectura. Para conocer esos estados, configura y valida webhooks según la guía de Meta.

Límites y errores que debes distinguir

  • Una plantilla o un idioma incorrectos no se arreglan cambiando el número emisor al azar.
  • Un token caducado o sin acceso necesita revisión de credenciales y permisos.
  • Si se pierde la conexión, comprueba el resultado antes de repetir: reenviar automáticamente puede duplicar mensajes.
  • Fuera del intervalo de servicio permitido, no sustituyas una plantilla requerida por texto libre.

Contacta solo con personas que hayan aceptado esas comunicaciones y respeta las bajas. La política de WhatsApp Business y las condiciones de la cuenta también se aplican a las pruebas y a los sistemas automatizados. No se promete un servicio gratuito, sin límites ni sin riesgo de restricciones.

Si necesitas ejecutar un servicio propio, revisa el uso básico de una terminal Linux y cómo limitar el acceso SSH. Una automatización requiere además control de acceso, tratamiento de errores y seguimiento; no basta con dejar un bucle enviando mensajes.

Fuentes oficiales

Deja un comentario

Subir

Descubre más de Sergio Caballero

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Continuar leyendo