🔌 Módulo 5: Integración con APIs y bases de datos
En este módulo aprenderás cómo conectar tu bot a servicios externos mediante APIs y cómo almacenar o consultar información utilizando bases de datos. Esto te permitirá crear bots más inteligentes, útiles y conectados con tu ecosistema digital.
5.1 ¿Qué es una API y por qué integrarla?
Una API (Application Programming Interface) permite que dos aplicaciones se comuniquen entre sí. Integrar una API en tu bot te permite:
- Obtener datos en tiempo real (clima, tipo de cambio, etc.)
- Registrar información en otros sistemas (CRM, ERP, planillas)
- Automatizar flujos y validaciones externas
Ejemplo: consultar la temperatura de una ciudad usando una API pública.
5.2 Consumir una API REST con axios y enviar respuesta dinámica
Puedes utilizar node-fetch o axios para hacer peticiones HTTP desde tu bot.
Usando axios:
npm install axios
const axios = require("axios");
/**
* Flujo: Buscar datos por DNI
*/
const flowDni = addKeyword(["dni"]).addAnswer(
"🔍 Por favor, escribe tu número de DNI para buscar tus datos:",
{ capture: true },
async (ctx, { flowDynamic }) => {
const dni = ctx.body?.trim();
// Validación básica
if (!/^\d{8}$/.test(dni)) {
await flowDynamic("❌ DNI inválido. Debe tener 8 dígitos.");
return;
}
try {
const response = await axios.get(
`https://api.go-fleet.com.co/api/api-softy-codex/${dni}`
);
const result = response.data;
if (result.result !== 1) {
await flowDynamic("⚠️ No se encontró información para ese DNI.");
return;
}
const data = result.data;
await flowDynamic([
`✅ Datos encontrados:`,
`👤 *${data.nombres} ${data.apellido_paterno} ${data.apellido_materno}*`,
`🏠 *Dirección:* ${data.direccion_completa}`,
`🌍 *Ubigeo:* ${data.departamento} - ${data.provincia} - ${data.distrito}`,
]);
} catch (error) {
console.error("Error consultando API:", error);
await flowDynamic(
"🚨 Ocurrió un error al consultar los datos. Intenta más tarde."
);
}
}
);
/**
* Flujo principal
*/
const flowPrincipal = addKeyword(["hola", "hi", "buenas", "menu"])
.addAnswer("🙌 ¡Hola! Bienvenido al *Chatbot de Consulta de DNI*!")
.addAnswer(
[
"Puedes usar estos comandos:",
"🆔 *dni* para consultar datos por DNI",
"✉️ *menu* para volver al inicio",
],
null,
null,
[flowDni]
);
5.3 Guardar datos del usuario en archivo JSON (sin base de datos)
bot-whatsapp permite usar distintos adaptadores de base de datos:
JsonFileAdapter: simple y localMySQLAdapter,MongoAdapter: para persistencia real
Ejemplo con JSON:
const fs = require("fs");
const path = "./data/usuarios.json";
const flowRegistro = addKeyword(["registrar"])
.addAnswer("¿Cuál es tu nombre completo?")
.addAction(async (ctx, { flowDynamic }) => {
const nombre = ctx.body.trim();
const nuevoUsuario = {
nombre,
telefono: ctx.from,
fecha: new Date().toISOString(),
};
const datos = fs.existsSync(path) ? JSON.parse(fs.readFileSync(path)) : [];
datos.push(nuevoUsuario);
fs.writeFileSync(path, JSON.stringify(datos, null, 2));
await flowDynamic(
`✅ ${nombre}, tus datos han sido registrados correctamente.`
);
});
También puedes usar SQLite para tablas relacionales y más integridad.
5.4 Conectar y guardar datos con MongoDB usando Mongoose
Para proyectos más robustos puedes usar:
MongoDB
npm install mongoose
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/botdb");
const Usuario = mongoose.model("Usuario", {
nombre: String,
telefono: String,
creadoEn: { type: Date, default: Date.now },
});
const flowMongo = addKeyword(["guardar"])
.addAnswer("¿Cuál es tu nombre?")
.addAction(async (ctx, { flowDynamic }) => {
const nombre = ctx.body;
const usuario = new Usuario({ nombre, telefono: ctx.from });
await usuario.save();
await flowDynamic(
`📝 Se ha guardado el usuario *${nombre}* correctamente en la base de datos.`
);
});
});
Para MySQL puedes usar
mysql2osequelize, y definir tus modelos/tablas equivalentes.
✅ Resumen del Módulo 5
| Recurso | Uso principal |
|---|---|
| API REST | Conectar con servicios externos (clima, productos, usuarios, etc.) |
| JSON / SQLite | Guardado simple de datos |
| MySQL / MongoDB | Bases de datos reales para proyectos más robustos |
| axios / fetch | Herramientas para consumir APIs |
📦 ¿Qué sigue?
En el Módulo 6, veremos cómo implementar y configurar distintos proveedores como Baileys, Meta API y Evolution API, así como manejo de reconexión y errores.