Si ya creaste una AMI estable, puedes lanzar una nueva instancia EC2 siguiendo estos pasos:
- Ve a AWS EC2 → AMIs.
- Selecciona la AMI (
kafka-whatsapp-image
o el nombre que le pusiste). - Haz clic en "Launch instance from image".
- Selecciona el mismo tipo de instancia (Ej.
t3.micro
ot3.small
). - Elige el mismo Security Group (para que los puertos estén abiertos correctamente).
- Haz clic en "Launch Instance".
Después de lanzar la nueva instancia, asegúrate de que los puertos estén abiertos.
🔹 Ve a AWS EC2 → Security Groups → Editar reglas de entrada (Inbound Rules).
🔹 Configura las siguientes reglas:
Puerto | Protocolo | Origen | Descripción |
---|---|---|---|
22 | TCP | Tu IP (X.X.X.X/32 ) |
Para conectarte por SSH |
80 | TCP | 0.0.0.0/0 | Para tráfico HTTP (nginx y Let's Encrypt) |
443 | TCP | 0.0.0.0/0 | Para HTTPS (nginx y Let's Encrypt) |
3000 | TCP | 0.0.0.0/0 | Para el servidor Flask (Webhook de WhatsApp) |
9092 | TCP | Tu IP pública (X.X.X.X/32 ) |
Para conectar Kafka desde tu PC |
2181 | TCP | 0.0.0.0/0 | Para Zookeeper (interno, puede ser opcional) |
📌 Para mayor seguridad, en 9092
puedes permitir solo la IP de tu PC, en lugar de 0.0.0.0/0
.
Una vez que la instancia esté en marcha:
ssh -i "tu-clave.pem" ubuntu@NUEVA_IP
actualizar la IP en el fichero .secrets actualizar la IP en https://www.duckdns.org/ volver a lanzar el servidor
pkill gunicorn
gunicorn -w 4 -b 0.0.0.0:3000 server:app --daemon
Probar Flask
curl -X POST -H "Content-Type: application/json" -d '{"message": "Test desde Flask"}' http://NUEVA_IP:3000/webhook
Probar nginx
curl -Ik https://remediosapi.duckdns.org/
Si devuelve forbidden está fallando nginx, si devuelve cualquier otro error está fallando Flask. Se deberia ver algo así:
HTTP/2 200
server: nginx/1.18.0 (Ubuntu)
content-type: text/html
Comando | Descripción |
---|---|
curl -I http://NUEVA_IP/ |
Verifica si Nginx responde en HTTP |
curl -Ik https://remediosapi.duckdns.org/ |
Verifica si Nginx responde en HTTPS |
curl -Ik https://remediosapi.duckdns.org/webhook |
Prueba la redirección a Flask |
curl -I http://127.0.0.1:3000/webhook |
Prueba si Flask responde localmente sin Nginx |
curl -X POST -H "Content-Type: application/json" -d '{"message": "Test"}' http://127.0.0.1:3000/webhook |
Envía un mensaje de prueba a Flask |
nc -zv NUEVA_IP 9092 |
Verifica si Kafka acepta conexiones en el puerto 9092 |
Crear topic de prueba:
docker exec -it kafka kafka-topics.sh --create --topic whatsapp-events --bootstrap-server $(curl -s ifconfig.me):9092 --partitions 1 --replication-factor 1
Listar topics:
docker exec -it kafka kafka-topics.sh --bootstrap-server localhost:9092 --list
Conectar al topic:
docker exec -it kafka kafka-console-producer.sh --bootstrap-server localhost:9092 --topic whatsapp-events
Leer todos los mensajes de kafka:
docker exec -it kafka kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic whatsapp-events --from-beginnin
Este proyecto integra la API de WhatsApp de Meta con un servidor local Flask, expuesto a internet mediante ngrok, para procesar mensajes de texto y audio utilizando modelos de inteligencia artificial. Además, se conecta a un servidor GPT4All para generar respuestas dinámicas y contextuales. Aunque el sistema actual no utiliza un broker de mensajería, se contempla la incorporación futura de Kafka para mejorar la escalabilidad y la arquitectura del sistema.
El flujo principal de datos sigue estos pasos:
- API de WhatsApp: Recibe y envía mensajes desde la plataforma de WhatsApp. Se comunica con
miApp
mediante un webhook. - Ngrok: Expone el servidor local
miApp
a internet, facilitando la comunicación con la API de WhatsApp. - miApp (Flask):
- Procesa mensajes de texto y audio.
- Ejecuta modelos de inteligencia artificial para generar y procesar contenido.
- Interactúa con el servidor GPT4All para obtener respuestas basadas en IA.
- GPT4All: Proporciona respuestas contextuales basadas en el contenido del mensaje recibido.
graph TD
subgraph WhatsApp
A[WhatsApp API]
end
A -->|Webhook| B[Ngrok]
B --> C[miApp (Flask)]
C -->|Procesamiento IA| D[Modelos IA]
C -->|Consulta| E[GPT4All]
subgraph Futuro
F[Kafka (Planeado)]
end
A -.->|Mensajería Escalable| F
F -.->|Intermediario| C
- Python 3.8+
- Flask
- Ngrok
- GPT4All
- Bibliotecas adicionales para modelos IA (especificadas en
requirements.txt
)
-
Clona este repositorio:
git clone https://github.com/tu-usuario/whatsapp-ai-assistant.git cd whatsapp-ai-assistant
-
Instala las dependencias:
pip install -r requirements.txt
-
Configura Ngrok para exponer el servidor local:
ngrok http 5000
Copia la URL generada por ngrok y configúrala como webhook en la API de WhatsApp.
-
Inicia el servidor Flask:
python app.py
- Envía mensajes de texto o audio a través de WhatsApp.
- El servidor procesará los mensajes y generará respuestas contextuales utilizando modelos de IA.
¡Las contribuciones son bienvenidas! Si tienes ideas para mejorar este proyecto, no dudes en abrir un issue o enviar un pull request.
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE
para más detalles.
Cualquier parecido con la realidad es pura coincidencia.
¡Esperamos que disfrutes experimentando con este proyecto y explorando las posibilidades de integrar IA en WhatsApp!