Waurik es una librería para crear chatbots de WhatsApp usando decoradores en TypeScript. Es fácil de usar, escalable y el código es muy entendible para que cualquier desarrollador pueda contribuir en ella.
- Soporte para múltiples proveedores (Baileys, WhatsApp Business API)
- Sistema de flujos basado en decoradores
- Manejo de estado para cada conversación
- Soporte para archivos (imágenes, documentos, etc.)
- Integración con APIs REST
- Manejo de eventos
- Funciones personalizadas
npm install waurik
import { Waurik, BaileysProvider, Flow, Step } from 'waurik';
@Flow('saludo')
class SaludoFlow {
@Step('¡Hola! ¿Cómo estás?')
async saludar(context: any) {
return context.message.body;
}
@Step('Me alegro de que estés {saludar}. ¿En qué puedo ayudarte?')
async preguntar(context: any) {
return null;
}
}
async function main() {
const provider = new BaileysProvider();
const waurik = new Waurik(provider);
waurik.registerFlow(SaludoFlow);
await waurik.initialize();
}
main().catch(console.error);
Inicia un nuevo flujo y define la palabra clave para activarlo.
@Flow('registro')
class RegistroFlow {
// ...
}
Define un paso en el flujo que envía un mensaje y espera la respuesta del usuario.
@Step('Por favor, ingresa tu nombre:')
async nombre(context: any) {
return context.message.body;
}
Define una función que puede realizar operaciones personalizadas.
@Func()
async validarEdad(context: any) {
if (context.state.edad < 18) {
return false;
}
return true;
}
Maneja eventos específicos del proveedor.
@Event('message')
async onMessage(context: any) {
// Manejar el evento
}
Maneja la recepción de archivos.
@Files('./uploads')
async documento(context: any) {
return context.state.documento;
}
Realiza llamadas a APIs REST.
@Api('POST', 'https://api.example.com/registro')
async guardarRegistro(context: any) {
return context.state.data;
}
Define un menú interactivo con opciones que pueden navegar a diferentes partes del flujo.
@Menu(
'¿En qué puedo ayudarte?',
[
{ option: "1 - Ver productos", goTo: "productos" },
{ option: "2 - Hacer pedido", goTo: "pedido" },
{ option: "3 - Contactar soporte", goTo: "soporte" }
]
)
async mainMenu(context: any) {
// Lógica adicional del menú si es necesaria
}
Muestra un mensaje informativo sin esperar respuesta del usuario.
@Info('Tu pedido ha sido registrado correctamente.')
async confirmacion(context: any) {
// Lógica adicional si es necesaria
}
Los decoradores @Step e @Info soportan opciones adicionales para el manejo del flujo:
// Permitir volver al menú principal con el comando '0'
@Step('¿Cuál es tu nombre?', {
backToMenu: true,
menuCommand: '0' // opcional, por defecto es '0'
})
async pedirNombre(context: any) {
return context.message.body;
}
// También funciona con @Info
@Info('Procesando tu pedido...', {
backToMenu: true,
menuCommand: '#' // usando un comando personalizado
})
async procesando(context: any) {
// Lógica adicional
}
Proveedor gratuito basado en Baileys.
const provider = new BaileysProvider();
Proveedor oficial de WhatsApp Business API.
const provider = new MetaProvider(
'tu-access-token',
'tu-phone-number-id',
'tu-verify-token'
);
Proveedor personalizado de ejemplo.
const provider = new CustomProvider({
// Tu configuración personalizada
});
¡Las contribuciones son bienvenidas! Aquí te explicamos cómo puedes contribuir al proyecto:
- Node.js (versión 16 o superior)
- npm o yarn
- Git
- Haz un fork del repositorio
- Clona tu fork:
git clone https://github.com/aurik3/waurik.git
cd waurik
- Instala las dependencias:
npm install
- Construye el proyecto:
npm run build
waurik/
├── src/ # Código fuente
│ ├── core/ # Núcleo de la librería
│ ├── decorators/ # Implementación de decoradores
│ ├── providers/ # Proveedores de WhatsApp
│ └── types/ # Definiciones de tipos
├── examples/ # Ejemplos de uso
├── tests/ # Tests unitarios y de integración
└── dist/ # Código compilado (generado)
- Crear una nueva rama:
git checkout -b feature/nueva-caracteristica
-
Desarrollo:
- Sigue las convenciones de código existentes
- Escribe tests para nuevas funcionalidades
- Actualiza la documentación según sea necesario
-
Tests:
npm test
- Linting:
npm run lint
-
Commit:
- Usa mensajes de commit descriptivos
- Sigue el formato:
tipo(alcance): descripción
- Ejemplo:
feat(provider): add new WhatsApp provider
-
Pull Request:
- Actualiza la documentación
- Incluye ejemplos de uso
- Describe los cambios y su propósito
- Asegúrate que todos los tests pasen
- Usa TypeScript para todo el código nuevo
- Sigue el estilo de código existente
- Documenta las funciones y clases públicas
- Escribe tests unitarios para nueva funcionalidad
- Mantén la compatibilidad con versiones anteriores
- Todos los PRs serán revisados por los mantenedores
- Los cambios deben pasar todos los tests
- La documentación debe estar actualizada
- El código debe seguir las convenciones establecidas
Si encuentras un bug, por favor:
- Revisa si ya existe un issue reportado
- Crea un nuevo issue con:
- Descripción del problema
- Pasos para reproducir
- Comportamiento esperado
- Versión de la librería
- Entorno (Node.js, npm, etc.)
Las sugerencias son bienvenidas. Por favor:
- Describe la mejora propuesta
- Explica por qué sería útil
- Incluye ejemplos de uso si es posible
MIT