Ir al contenido principal

Instalar GOWA con Docker Compose

GOWA: WhatsApp mediante API REST con Docker

Instalar GOWA con Docker Compose, conectar WhatsApp y utilizarlo desde la consola mediante una API REST.

GOWA es una aplicación escrita en Go que permite conectar una cuenta de WhatsApp y utilizarla mediante una API REST.

Esto permite que una aplicación externa pueda enviar y recibir mensajes de WhatsApp utilizando peticiones HTTP.

Aplicación / Consola
        │
        │ HTTP REST
        ▼
      GOWA
        │
        ▼
    WhatsApp

En este tutorial instalaremos GOWA utilizando Docker Compose y posteriormente utilizaremos curl desde la consola para conectarnos a la API y enviar mensajes.

1. Requisitos

Necesitamos tener instalados:

  • Docker
  • Docker Compose
  • Git

Podemos comprobar la instalación:

docker --version
docker compose version
git --version

2. Descargar GOWA

Crearemos el directorio donde almacenaremos el proyecto:

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

Descargamos el proyecto desde GitHub:

git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.git gowa

Entramos en el directorio:

cd /home/docker/gowa
Nota: GOWA utiliza Go y WhatsApp Web para establecer la conexión con WhatsApp.

3. Crear el archivo .env

GOWA proporciona un archivo de configuración de ejemplo. Lo copiaremos para crear nuestra configuración:

cp src/.env.example src/.env

Abrimos el archivo:

nano src/.env

Para una instalación básica podemos utilizar una configuración similar a esta:

APP_PORT=3000
APP_HOST=0.0.0.0

APP_BASIC_AUTH=user1:pass1

APP_UI_ENABLED=true

DB_URI=file:storages/whatsapp.db?_foreign_keys=on

WHATSAPP_CHAT_STORAGE=true
Importante: cambia user1:pass1 por tus propias credenciales.

4. SQLite

GOWA utiliza SQLite para almacenar información local.

En nuestro archivo .env tenemos:

DB_URI=file:storages/whatsapp.db?_foreign_keys=on

Por lo tanto, la base de datos se almacenará dentro del directorio storages.

gowa/
├── docker/
├── src/
│ ├── .env
│ ├── .env.example
│ ├── go.mod
│ └── ...
├── storages/
├── statics/
└── docker-compose.yml
Ventaja: SQLite no necesita un servidor de base de datos independiente. Todo queda almacenado localmente.

5. Configurar Docker Compose

Crearemos o modificaremos:

nano docker-compose.yml

Una configuración sencilla es:

services:
  whatsapp_go:
    build:
      context: .
      dockerfile: ./docker/golang.Dockerfile

    restart: "no"

    ports:
      - "3000:3000"

    env_file:
      - src/.env

    volumes:
      - ./storages:/app/storages
      - ./statics:/app/statics
restart: "no" significa que Docker no iniciará automáticamente GOWA después de reiniciar el servidor.

6. Construir GOWA

Desde el directorio del proyecto:

cd /home/docker/gowa

Construimos la imagen:

docker compose build

Este proceso puede tardar algunos minutos porque Docker debe descargar las dependencias y compilar GOWA.

7. Iniciar GOWA

Como queremos controlar manualmente el servicio, lo iniciaremos con:

docker compose up -d

Comprobamos el contenedor:

docker compose ps

También podemos utilizar:

docker ps

Deberíamos obtener un resultado similar a:

CONTAINER ID   IMAGE        STATUS          PORTS
xxxxxxxxxxxx   gowa:local   Up              0.0.0.0:3000->3000/tcp

8. Ver los logs

Para observar lo que está haciendo GOWA:

docker compose logs -f whatsapp_go

También podemos utilizar directamente:

docker logs -f gowa
Si GOWA inicia correctamente veremos que el servidor está escuchando en el puerto 3000.

9. Acceder a GOWA

Desde el mismo servidor podemos probar:

curl http://localhost:3000

Como configuramos autenticación, podemos recibir:

Unauthorized

Ahora utilizamos las credenciales:

curl -u user1:pass1 http://localhost:3000

GOWA responderá con su interfaz web.

También podemos abrir desde un navegador:

http://IP_DEL_SERVIDOR:3000

10. Conectar WhatsApp

Abrimos la interfaz web de GOWA.

Ingresamos las credenciales configuradas en:

APP_BASIC_AUTH=user1:pass1

Desde la interfaz podemos crear un dispositivo y conectar WhatsApp mediante el código QR.

En nuestro ejemplo utilizaremos el dispositivo:

wasabi
Importante: debemos escanear el código QR utilizando la aplicación WhatsApp del teléfono que queremos conectar.

11. Comprobar el dispositivo

Una vez conectado WhatsApp podemos consultar los dispositivos mediante la API:

curl -u user1:pass1 \
  -H 'X-Device-Id: wasabi' \
  http://localhost:3000/devices

Una respuesta similar a esta indica que el dispositivo está conectado:

{
  "code": "SUCCESS",
  "message": "List devices",
  "results": [
    {
      "id": "wasabi",
      "display_name": "Wasabi",
      "state": "logged_in",
      "jid": "595994757448@s.whatsapp.net"
    }
  ]
}

Lo importante es:

"state": "logged_in"
WhatsApp conectado correctamente.

12. Enviar un mensaje mediante la API

Ahora podemos utilizar GOWA desde la consola.

Para enviar un mensaje utilizamos:

curl -X POST 'http://localhost:3000/send/message' \
  -u user1:pass1 \
  -H 'X-Device-Id: wasabi' \
  -H 'Content-Type: application/json' \
  -d '{
    "phone": "595994352968",
    "message": "Hola desde GOWA"
  }'

GOWA recibe la petición y utiliza el dispositivo wasabi para enviar el mensaje.

curl
 │
 │ POST /send/message
 ▼
GOWA
 │
 │ Device: wasabi
 ▼
WhatsApp
 │
 ▼
595994352968

13. Parámetros utilizados

Parámetro Descripción
-u user1:pass1 Usuario y contraseña de la API.
X-Device-Id Dispositivo de WhatsApp que realizará el envío.
phone Número de WhatsApp del destinatario.
message Texto que se enviará.

14. Detener GOWA

Podemos detener el contenedor sin eliminarlo:

docker compose stop

Para iniciarlo nuevamente:

docker compose start

También podemos detener y eliminar el contenedor:

docker compose down
Importante: los directorios montados como volúmenes, como storages, permanecen en el servidor.

15. Iniciar GOWA después de reiniciar el servidor

Como utilizamos:

restart: "no"

GOWA no se iniciará automáticamente.

Después de reiniciar el servidor podemos iniciarlo manualmente:

cd /home/docker/gowa
docker compose up -d

Comprobamos:

docker ps

16. La idea principal

Lo importante de GOWA no es solamente la interfaz web. La interfaz permite conectar y administrar WhatsApp, pero nuestra aplicación puede trabajar directamente con la API REST.

              GOWA
                │
       ┌────────┴────────┐
       │                 │
    Interfaz           REST API
       │                 │
       ▼                 ▼
  Conectar QR       Aplicaciones
                         │
              ┌──────────┼──────────┐
              ▼          ▼          ▼
            Python      Java      Django

Por ejemplo, una aplicación Python, Java o Django puede realizar una petición HTTP exactamente igual que el comando curl utilizado anteriormente.

17. Arquitectura para una aplicación

GOWA puede funcionar como una capa independiente entre nuestra aplicación y WhatsApp:

┌──────────────────────┐
│     Mi aplicación    │
│                      │
│ Python / Java /      │
│ Django / etc.        │
└──────────┬───────────┘
           │
           │ HTTP REST
           ▼
┌──────────────────────┐
│         GOWA         │
│                      │
│      Puerto 3000     │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│       WhatsApp       │
└──────────────────────┘

De esta manera, nuestra aplicación no necesita implementar directamente el protocolo utilizado para comunicarse con WhatsApp.

18. Preparación para un bot de IA

Una vez que podemos enviar mensajes mediante la API, podemos utilizar GOWA como componente de comunicación de un bot.

WhatsApp
    │
    ▼
  GOWA
    │
    │ Webhook
    ▼
 Bot Python
    │
    ▼
    IA
    │
    ▼
 Bot Python
    │
    │ REST API
    ▼
  GOWA
    │
    ▼
WhatsApp

En este escenario GOWA se ocupa de WhatsApp y nuestro programa se ocupa de la lógica del bot.

Resumen: GOWA permite conectar WhatsApp y exponerlo mediante una API REST. Podemos utilizar esa API directamente desde la consola con curl o desde cualquier aplicación que pueda realizar peticiones HTTP.

19. Comandos principales

Acción Comando
Construir docker compose build
Iniciar docker compose up -d
Ver estado docker compose ps
Ver logs docker compose logs -f whatsapp_go
Detener docker compose stop
Eliminar contenedor docker compose down
Enviar mensaje POST /send/message

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

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