Enviar mensajes por API es la mitad del flujo. La otra mitad es recibir respuestas: cuando un cliente escribe a tu WhatsApp y tu backend debe reaccionar en tiempo real.
Para eso existen los webhooks de mensajería: MessageAPI hace un POST a tu URL cada vez que llega un mensaje entrante. En este artículo conectamos ese webhook con un servidor Python + Flask.
Arquitectura del flujo
- Un usuario envía un WhatsApp a tu número conectado.
- MessageAPI recibe el mensaje y lo reenvía a tu webhook.
- Tu app Python procesa el payload y decide qué responder (o dispara otra acción).
- Opcionalmente respondes con la API de envío.
Paso 1 — Servidor Flask mínimo
pip install flask requests
# app.py
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.post("/webhook/whatsapp")
def whatsapp_webhook():
payload = request.get_json(force=True, silent=True) or {}
sender = payload.get("from")
text = payload.get("text", "")
print(f"Mensaje de {sender}: {text}")
# Aquí: guardar en DB, crear ticket, etc.
return jsonify({"ok": True})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
En desarrollo usa ngrok http 8080 para exponer tu localhost con HTTPS. MessageAPI requiere una URL pública accesible.
Paso 2 — Configurar el webhook en MessageAPI
- Entra a Settings → sección Webhook.
- Pega la URL pública, por ejemplo:
https://abc123.ngrok.io/webhook/whatsapp - Activa el webhook y guarda.
Envía un mensaje de prueba a tu WhatsApp conectado. Deberías ver el log en la consola de Flask.
Paso 3 — Responder automáticamente
Combina recepción y envío en el mismo handler:
import os
import requests
from flask import Flask, request, jsonify
API_KEY = os.environ["MESSAGEAPI_KEY"]
SEND_URL = "https://msgapi.cloud/api/v1/send"
app = Flask(__name__)
def reply(recipient: str, text: str):
requests.post(
SEND_URL,
headers={"X-API-Key": API_KEY},
json={"recipient": recipient, "text": text},
timeout=30,
).raise_for_status()
@app.post("/webhook/whatsapp")
def whatsapp_webhook():
data = request.get_json(force=True) or {}
sender = data.get("from", "").replace("@s.whatsapp.net", "")
text = (data.get("text") or "").strip().lower()
if text == "hola":
reply(sender, "¡Hola! Recibimos tu mensaje. Un agente te contactará pronto.")
return jsonify({"ok": True})
Buenas prácticas
- Responde al webhook en menos de 5 segundos; delega tareas pesadas a una cola.
- Registra el
messageIdde los envíos salientes para trazabilidad. - No expongas lógica sensible sin autenticación adicional en rutas públicas.
- Prueba primero con Test API que el envío funciona antes de automatizar respuestas.
Conecta tu webhook hoy
Crea tu cuenta, vincula WhatsApp y configura el webhook en Settings. Prueba el flujo completo en minutos.