Ir al contenido principal

Automatizando WhatsApp con WAHA en Docker y Python

Automatizando WhatsApp con WAHA en Docker y Python

Este tutorial explica cómo levantar WAHA en Docker, conectar WhatsApp y crear un bot en Python que responda automáticamente a mensajes usando eventos.

1️⃣ Preparar el entorno Docker

Crea un directorio para el proyecto y agrega los archivos necesarios:

mkdir -p /home/docker/waha
cd /home/docker/waha

Archivo docker-compose.yml:

services:
  waha:
    image: devlikeapro/waha:noweb
    container_name: waha
    ports:
      - "3001:3000"
    environment:
      WHATSAPP_DEFAULT_ENGINE: noweb
      WHATSAPP_DEFAULT_SESSION: default
      LOG_LEVEL: info
    volumes:
      - ./waha-data:/app/data

Archivo .env (opcional):

# Tu API key en texto plano (opcional)
WAHA_API_KEY=tu_clave_segura

# O, mejor, el hash SHA512 que recomienda WAHA
# WAHA_API_KEY=sha512:{SHA512_HASH_DE_TU_API_KEY}

Levanta el contenedor:

docker-compose up -d

WAHA estará disponible en http://localhost:3001/dashboard/ y usará la sesión default.

2️⃣ Configurar la sesión de WhatsApp

Crear la sesión:

curl -X POST http://localhost:3001/api/sessions \
-H 'Content-Type: application/json' \
-d '{
  "name": "default",
  "config": {"noweb": {"markOnline": true}}
}'

Actualizar sesión existente:

curl -X PUT http://localhost:3001/api/sessions/default \
-H 'Content-Type: application/json' \
-d '{
  "config": {"noweb": {"markOnline": true}}
}'

Arrancar la sesión:

curl -X POST http://localhost:3001/api/sessions/default/start \
-H "Content-Type: application/json"

Escanea el código QR desde WhatsApp: Ajustes > Dispositivos vinculados > Vincular un dispositivo. Una vez escaneado, la sesión estará activa.

3️⃣ Enviar mensajes desde la API

curl -X POST http://localhost:3001/api/sendText \
-H "Content-Type: application/json" \
-d '{
  "session": "default",
  "chatId": "595991xxxxxx@c.us",
  "text": "Hola, este es un mensaje de prueba"
}'

4️⃣ Crear un bot en Python usando eventos

WAHA permite recibir mensajes sin exponer la API al público mediante eventos:

import requests
import time

SESSION = "default"
URL_EVENTS = "http://localhost:3001/api/events"

def send_text(chat_id, text):
    payload = {
        "session": SESSION,
        "chatId": chat_id,
        "text": text
    }
    return requests.post("http://localhost:3001/api/sendText", json=payload).json()

def handle_event(event):
    if event.get("type") == "chat":
        from_id = event["from"]
        text = event["body"]
        print(f"Nuevo mensaje de {from_id}: {text}")
        send_text(from_id, f"Recibí tu mensaje: {text}")

while True:
    try:
        r = requests.get(URL_EVENTS)
        events = r.json()
        for event in events:
            handle_event(event)
    except Exception as e:
        print(f"Error al procesar eventos: {e}")
    time.sleep(1)

Usar eventos es seguro para uso personal o pruebas, ya que no requiere exponer la API. Para producción o integración con servidores públicos, considera usar Webhooks.

Comentarios

Entradas populares de este blog

Instalar Evolution API en Docker con Redis y PostgreSQL Local

Instalar Evolution API en Docker con Redis y PostgreSQL Local En este tutorial vamos a levantar Evolution API usando Docker , con soporte de Redis para sesiones y PostgreSQL local para almacenar datos de manera persistente y compartida entre varios usuarios. 1. Estructura del proyecto Crea una carpeta para tu proyecto y colócate en ella: mkdir -p ~/docker/evolution-api cd ~/docker/evolution-api 2. Archivo docker-compose.yml Este compose levanta Redis y Evolution API : version: "3.9" services: # ✅ SERVICIO REDIS redis: container_name: evolution_redis image: redis:7-alpine restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --save 60 1 --loglevel warning # ✅ SERVICIO EVOLUTION API evolution-api: container_name: evolution_api image: atendai/evolution-api restart: unless-stopped ports: - "8085:8080" env_file: - .env ...

Instalación y Configuración de MySQL 5.7 en Ubuntu 24.04 LTS

Instalar MySQL 5.7 en Ubuntu 24.04 1. Descargar e instalar MySQL Copiar mkdir ~/mysql57 cd ~/mysql57 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz sudo mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 2. Instalar dependencias necesarias IMPORTANTE: Se descargan las versiones nuevas de las librerías y se las vincula con las librerías que necesita MySQL. Copiar sudo apt update # Reemplazo de libaio sudo apt install libaio1t64 # Reemplazo de libtinfo y ncurses sudo apt install libtinfo6 libncurses6 Copiar # Crear los enlaces simbólicos sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1 sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 sudo ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64...

Tutorial: n8n con Docker Compose en Linux

Tutorial Completo: Instalar y correr n8n en Linux con Docker Compose Este tutorial te guiará paso a paso para instalar y ejecutar n8n usando Docker Compose en un sistema Linux (como Ubuntu), con buenas prácticas y configuraciones recomendadas. --- 1. Actualizar el sistema Es buena práctica empezar actualizando los paquetes y sistema: Copiar sudo apt update sudo apt upgrade -y --- 2. Instalar dependencias necesarias para Docker Copiar sudo apt install -y ca-certificates curl gnupg lsb-release --- 3. Agregar repositorio oficial de Docker Copiar sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update --- 4. ...