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
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
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
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
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
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
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"
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
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.
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
Publicar un comentario