¿Listo para transformar tu comunicación?
👉 Visita www.whatzmeapi.com y solicita tu demo gratuita.
Guía rápida para enviar/recibir mensajes, operar plantillas y escalar con buenas prácticas.
1) Arquitectura mínima
- API (FastAPI/Flask): endpoints internos y Webhook.
- Cola (Celery/RQ + Redis): envíos y reintentos.
- DB (PostgreSQL/MongoDB): historial y estados.
- Observabilidad: logs estructurados, métricas y alertas.
2) Conceptos clave
- Plantillas: necesarias para iniciar conversaciones fuera de 24 h.
- Ventana de 24 h: si el usuario escribe, puedes responder libremente.
- Tipos: texto, media, documentos, interactivos (botones/listas).
3) Pasos rápidos
- Obtén
WHATSAPP_TOKEN
,WHATSAPP_PHONE_ID
, registra Webhook y crea plantillas. - Monta FastAPI y valida firma
X-Hub-Signature-256
conAPP_SECRET
. - Envía con plantillas; responde al Webhook para autoservicio o hand‑off humano.
4) Código esencial (mini)
Enviar plantilla
import os, requests
TOKEN=os.getenv("WHATSAPP_TOKEN"); PID=os.getenv("WHATSAPP_PHONE_ID")
url=f"https://graph.facebook.com/v20.0/{PID}/messages"
def send_template(to, name, lang="es_MX", vars=None):
payload={"messaging_product":"whatsapp","to":to,"type":"template",
"template":{"name":name,"language":{"code":lang},
"components":([{"type":"body","parameters":[{"type":"text","text":str(v)} for v in vars]}] if vars else [])}}
r=requests.post(url, headers={"Authorization":f"Bearer {TOKEN}","Content-Type":"application/json"}, json=payload, timeout=30)
r.raise_for_status(); return r.json()
Webhook FastAPI (verificación)
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import PlainTextResponse
import hmac, hashlib, os, json
app=FastAPI(); VERIFY=os.getenv("VERIFY_TOKEN"); SECRET=os.getenv("APP_SECRET","")
@app.get("/webhook")
async def verify(mode:str|None=None, challenge:str|None=None, verify_token:str|None=None):
if mode=="subscribe" and verify_token==VERIFY: return PlainTextResponse(challenge or "")
raise HTTPException(status_code=403)
@app.post("/webhook")
async def incoming(req: Request):
body=await req.body(); sig=req.headers.get("X-Hub-Signature-256")
mac="sha256="+hmac.new(SECRET.encode(), body, hashlib.sha256).hexdigest()
if not SECRET or not sig or not hmac.compare_digest(mac, sig):
raise HTTPException(status_code=403)
data=json.loads(body); return {"ok": True}
5) Buenas prácticas
- Idempotencia:
dedup_key
por mensaje; evita reenvíos. - Reintentos:
429/5xx
con exponential backoff + jitter. - Opt‑in/Opt‑out: respeta políticas; registra consentimiento.
- Seguridad: secretos en Secret Manager; no loguear PII.
6) Checklist de producción
- Plantillas aprobadas e idiomas correctos
- Webhook verificado + firma HMAC
- Colas, reintentos y dead‑letter
- Monitoreo de tasa de entrega/lectura y errores
- Backups y rotación de tokens
¿Listo para transformar tu comunicación?
👉 Visita www.whatzmeapi.com y solicita tu demo gratuita.