DocuBot es un bot inteligente basado en Python que utiliza la API de OpenAI para responder preguntas basadas en documentos PDF. Puede integrarse con WhatsApp, Telegram o ambos, según tus necesidades.
- 🤖 Bot inteligente que responde preguntas basadas en tus documentos
- 📄 Procesamiento e indexación de documentos PDF
- 🔍 Búsqueda semántica en documentos utilizando embeddings de OpenAI
- 💬 Integración con WhatsApp (vía Twilio) y Telegram
- 🔄 Configuración flexible para personalizar el comportamiento del bot
- 🛡️ Gestión segura de claves API mediante variables de entorno
- 📊 Base de datos SQLite para almacenar documentos y configuraciones
- Python 3.8 o superior
- Cuenta de OpenAI con API key
- Para WhatsApp: Cuenta de Twilio con WhatsApp Sandbox
- Para Telegram: Bot de Telegram creado con BotFather
git clone https://github.com/tu-usuario/DocuBot.git
cd DocuBotpython -m venv venvEn Windows:
venv\Scripts\activateEn macOS/Linux:
source venv/bin/activatepip install -r requirements.txt- Crea un archivo
.enven la raíz del proyecto basado en el archivo.env.example:
cp .env.example .env- Edita el archivo
.envy añade tus claves API y configuraciones:
# API de OpenAI
OPENAI_API_KEY=tu_clave_api_aqui
# Configuración de Telegram
TELEGRAM_BOT_TOKEN=tu_token_de_bot_aqui
# Configuración de WhatsApp (Twilio)
TWILIO_ACCOUNT_SID=tu_account_sid_aqui
TWILIO_AUTH_TOKEN=tu_auth_token_aqui
TWILIO_PHONE_NUMBER=tu_numero_de_whatsapp_aqui
# Configuración general
BOT_NAME=DocuBot
BOT_PLATFORM=both # Opciones: whatsapp, telegram, both
python src/database/init_db.pyPara inicializar y trabajar con el proyecto en Visual Studio Code, sigue estos pasos:
-
Abre VSCode
-
Selecciona "File" > "Open Folder" y navega hasta la carpeta del proyecto DocuBot
-
VSCode detectará automáticamente el entorno virtual. Si no lo hace, puedes seleccionarlo manualmente:
- Presiona
Ctrl+Shift+P(oCmd+Shift+Pen macOS) - Escribe "Python: Select Interpreter"
- Selecciona el intérprete de Python en la carpeta
venv
- Presiona
-
Configuración recomendada para VSCode:
- Instala las extensiones: "Python", "Pylance", "SQLite Viewer"
- Crea un archivo
.vscode/settings.jsoncon el siguiente contenido:
{
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.provider": "autopep8",
"editor.formatOnSave": true,
"python.analysis.extraPaths": [
"${workspaceFolder}"
]
}- Para depurar el proyecto:
- Crea un archivo
.vscode/launch.jsoncon el siguiente contenido:
- Crea un archivo
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Archivo actual",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
},
{
"name": "Python: Iniciar Bot",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/main.py",
"console": "integratedTerminal",
"justMyCode": true,
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
}
]
}python main.py/start- Inicia la interacción con el bot/help- Muestra la ayuda/config- Configura el bot/upload- Sube un documento PDF/list- Lista los documentos disponibles/delete- Elimina un documento/search- Busca en los documentos/about- Muestra información sobre el bot
Para conectar DocuBot con Telegram, sigue estos pasos:
-
Crear un bot en Telegram:
- Abre Telegram y busca a @BotFather
- Envía el comando
/newbot - Sigue las instrucciones para crear un nuevo bot
- BotFather te proporcionará un token de API. Guárdalo en tu archivo
.envcomoTELEGRAM_BOT_TOKEN
-
Configurar DocuBot para usar Telegram:
- Asegúrate de que en tu archivo
.envtienes configurado:BOT_PLATFORM=telegram # o BOT_PLATFORM=both
- Asegúrate de que en tu archivo
-
Iniciar el bot:
python main.py
-
Interactuar con el bot:
- Busca tu bot en Telegram por el nombre que le diste
- Inicia una conversación con el comando
/start - Ahora puedes enviar mensajes y documentos PDF a tu bot
Para conectar DocuBot con WhatsApp (a través de Twilio), sigue estos pasos:
-
Crear una cuenta en Twilio:
- Regístrate en Twilio
- Activa el Sandbox de WhatsApp
- Obtén tu Account SID y Auth Token desde el Dashboard de Twilio
- Guarda estos datos en tu archivo
.env:TWILIO_ACCOUNT_SID=tu_account_sid_aqui TWILIO_AUTH_TOKEN=tu_auth_token_aqui TWILIO_PHONE_NUMBER=tu_numero_de_whatsapp_aqui
-
Configurar un webhook para Twilio:
- DocuBot necesita ser accesible desde Internet para recibir mensajes de WhatsApp
- Puedes usar ngrok para exponer tu servidor local:
ngrok http 5000
- Copia la URL HTTPS generada por ngrok (por ejemplo,
https://abcd1234.ngrok.io) - En la consola de Twilio, configura el webhook:
- En "When a message comes in", ingresa:
https://abcd1234.ngrok.io/whatsapp
- En "When a message comes in", ingresa:
-
Configurar DocuBot para usar WhatsApp:
- Asegúrate de que en tu archivo
.envtienes configurado:BOT_PLATFORM=whatsapp # o BOT_PLATFORM=both
- Asegúrate de que en tu archivo
-
Iniciar el bot:
python main.py
-
Conectar tu WhatsApp al Sandbox:
- Sigue las instrucciones en la consola de Twilio
- Normalmente, deberás enviar un código específico al número de WhatsApp de Twilio
- Una vez conectado, podrás enviar mensajes a tu bot
DocuBot/
├── config/ # Archivos de configuración
├── data/ # Datos y base de datos
│ ├── documents/ # Documentos procesados
│ └── vector_store/ # Índices vectoriales para búsqueda
├── docs/ # Documentación
│ └── images/ # Imágenes para documentación
├── logs/ # Archivos de registro
├── src/ # Código fuente
│ ├── bot/ # Núcleo del bot
│ │ ├── bot.py # Clase principal del bot
│ │ ├── command_processor.py # Procesador de comandos
│ │ ├── config_manager.py # Gestor de configuración
│ │ └── env_manager.py # Gestor de variables de entorno
│ ├── database/ # Gestión de base de datos
│ │ ├── document_manager.py # Gestor de documentos
│ │ ├── init_db.py # Script de inicialización
│ │ └── schema.py # Esquema de la base de datos
│ ├── openai/ # Integración con OpenAI
│ │ ├── document_processor.py # Procesador de documentos
│ │ ├── openai_manager.py # Gestor de OpenAI
│ │ └── query_processor.py # Procesador de consultas
│ └── platforms/ # Integración con plataformas
│ ├── platform_manager.py # Gestor de plataformas
│ ├── telegram_bot.py # Bot de Telegram
│ └── whatsapp_bot.py # Bot de WhatsApp
├── temp/ # Archivos temporales
├── .env # Variables de entorno (no incluido en Git)
├── .env.example # Ejemplo de variables de entorno
├── .gitignore # Archivos ignorados por Git
├── LICENSE # Licencia del proyecto
├── main.py # Punto de entrada principal
├── README.md # Este archivo
└── requirements.txt # Dependencias del proyecto
Las contribuciones son bienvenidas. Por favor, siente libre de abrir un issue o enviar un pull request.
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
Si tienes alguna pregunta o sugerencia, no dudes en contactarme.
Desarrollado con ❤️ usando Python, SQLite y OpenAI.