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

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...

Instalar DeepSeek R1 1.5B en Ubuntu 24.04 sin GPU

Instalar DeepSeek en tu sistema sin GPU, pasos: Especificaciones del Entorno de Pruebas Componente Detalle SO Ubuntu Cinnamon 24.04 LTS x86_64 Kernel 6.8.0-51-generic CPU Intel i7-6820HQ (8 núcleos) @ 3.600GHz GPUs AMD ATI Radeon HD 8830M / R7 250 / R7 M465X Intel HD Graphics 530 RAM 15.882 GB (3.716 GB en uso) Resolución 1440x810 Escritorio Cinnamon 6.0.4 1. Instalar Git LFS sudo apt-get install git-lfs git lfs install 2. Clonar el repositorio cd /opt sudo mkdir deepseek && sudo chown $USER:$USER deepseek cd deepseek git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B 3. Crear y activar un entorno virtual python -m ve...

Instalar Jasper Studio 6.21 para Ubuntu 24.04

Instalar js-studiocomm_6.21.3 en Ubuntu 24.4 Para instalar Jaspersoft Studio en Ubuntu 24.4, sigue estos pasos: 1. Descargar Jasper Studio Descarga la versión js-studiocomm_6.21.3 desde el siguiente enlace: Jaspersoft Studio 6.21.3 2. Crear el directorio de instalación mkdir /opt/jasperstudio 3. Mover el archivo descargado mv /dir_descarga/js-studiocomm_6.21.3_linux_x86_64.tgz /opt/jasperstudio/ cd /opt/jasperstudio 4. Extraer el archivo tar -xvzf js-studiocomm_6.21.3_linux_x86_64.tgz cd js-studiocomm_6.21.3 5. Ejecutar Jaspersoft Studio ./Jaspersoft\ Studio 6. Crear acceso directo en el escritorio Para facilitar el acceso, crea un archivo .desktop en el escritorio: gedit ~/Escritorio/jaspersoft-studio.desktop En el archivo jaspersoft-studio.desktop , agrega lo siguiente: [Desktop Entry] Version=1.0 Ty...