Saltar al contenido principal

🔌 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 local
  • MySQLAdapter, 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 mysql2 o sequelize, y definir tus modelos/tablas equivalentes.


✅ Resumen del Módulo 5

RecursoUso principal
API RESTConectar con servicios externos (clima, productos, usuarios, etc.)
JSON / SQLiteGuardado simple de datos
MySQL / MongoDBBases de datos reales para proyectos más robustos
axios / fetchHerramientas 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.