API de WhatsApp con Python
Con requests para enviar y Flask para recibir. Funciona igual en Django o FastAPI.
Requisitos
- Python 3.8 o superior
- pip install requests flask
- Tu API key y tu número conectado
Enviar un mensaje
requests arma el JSON con el parámetro json=.
import os
import requests
respuesta = requests.post(
"https://api.kontacto.pro/send-message",
json={
"api_key": os.environ["WSP_API_KEY"],
"sender": "51999888777", # tu número conectado
"number": "51987654321", # destino con código de país
"message": "Hola Ana, tu pedido #1024 ya salió a reparto.",
},
timeout=30,
)
datos = respuesta.json()
if not datos.get("status"):
raise RuntimeError(f"No se envió: {datos.get('msg')}")
print("Enviado")
Enviar una encuesta
De 2 a 5 opciones. countable "1" = una sola respuesta por persona.
requests.post(
"https://api.kontacto.pro/send-poll",
json={
"api_key": os.environ["WSP_API_KEY"],
"sender": "51999888777",
"number": "51987654321",
"name": "¿Confirmas tu cita de mañana a las 10:30?",
"option": ["Sí, asistiré", "Necesito reprogramar"],
"countable": "1",
},
timeout=30,
)
Recibir mensajes con Flask
Si respondes un JSON con text, ese mensaje le llega al cliente.
from flask import Flask, request, jsonify
app = Flask(__name__)
atendidos = set()
@app.post("/webhook")
def webhook():
entrada = request.get_json(silent=True) or {}
texto = entrada.get("message", "") # en minúsculas y sin tildes
if entrada.get("id") in atendidos:
return "", 200
atendidos.add(entrada.get("id"))
if "horario" in texto:
return jsonify(text="Hola {name}, atendemos de 9:00 a 19:00.", quoted=True)
return "", 200 # sin respuesta automática
Todos los endpoints, parámetros y errores están en la documentación de la API.
¿Sirve con Django o FastAPI?
Sí. El webhook es una vista que lee el JSON del POST y devuelve otro JSON o una respuesta vacía.
¿Puedo enviar desde un script con cron?
Sí. Es un uso común para recordatorios diarios: el script lee tu base de datos y envía un mensaje por cliente.
Envía tu primer mensaje hoy
Escríbenos por WhatsApp, conectamos tu número con un QR y te damos tu API key para que pruebes desde tu sistema.