Saltar al contenido principal

📌 Módulo 6: Casos prácticos de uso

En este módulo veremos ejemplos reales y completos de bots desarrollados con bot-whatsapp. Estos casos combinan conceptos de flujos, integración con APIs, almacenamiento de datos y diseño conversacional para resolver problemas específicos en diferentes sectores.


7.1 Bot de pedidos de comida (delivery)

Este bot guía al usuario a través de un flujo paso a paso para realizar un pedido. Incluye menú dinámico, cantidad, confirmación y opción de enviar el pedido a una API o almacenarlo.

const menu = [
{ id: 1, nombre: 'Hamburguesa', precio: 15 },
{ id: 2, nombre: 'Pizza', precio: 25 },
{ id: 3, nombre: 'Ensalada', precio: 12 }
];

const flowPedido = addKeyword(['pedido', 'ordenar'])
.addAnswer('🍽️ Bienvenido al bot de pedidos. Elige un número del menú:')
.addAnswer(menu.map(item => `${item.id}. ${item.nombre} - S/ ${item.precio}`).join('
'))
.addAction(async (ctx, { state, flowDynamic }) => {
const item = menu.find(p => p.id === parseInt(ctx.body));
if (!item) return flowDynamic('❌ Opción inválida. Intenta con 1, 2 o 3.');
state.producto = item;
await flowDynamic(`Has elegido: *${item.nombre}*. ¿Cuántas unidades deseas?`);
})
.addAction(async (ctx, { state, flowDynamic }) => {
const cantidad = parseInt(ctx.body);
if (isNaN(cantidad)) return flowDynamic('❌ Por favor escribe una cantidad válida.');
state.cantidad = cantidad;
const total = state.producto.precio * cantidad;
await flowDynamic(`✅ Pedido confirmado: ${cantidad} x ${state.producto.nombre} = S/ ${total}`);
console.log({ producto: state.producto.nombre, cantidad, total });
// Aquí puedes enviar a una API externa
});

const flowPedido = addKeyword(['pedido', 'ordenar'])
.addAnswer('🍔 ¿Qué deseas pedir hoy? (Ej: Hamburguesa, Pizza, Ensalada)')
.addAction(async (ctx, { state, flowDynamic }) => {
state.food = ctx.body;
await flowDynamic(`¿Cuántas unidades de *${ctx.body}* deseas?`);
})
.addAction(async (ctx, { state, flowDynamic }) => {
state.quantity = ctx.body;
await flowDynamic(`✅ Pedido confirmado: ${state.quantity} x ${state.food}`);
// Aquí puedes integrar API de restaurante o guardar en DB
});

Puedes integrar con una API de cocina o dashboard de pedidos.


7.2 Bot de atención ciudadana (municipalidad)

Un bot que permite al ciudadano seleccionar trámites y obtener información básica, horarios o requisitos.

const {
createBot,
createProvider,
createFlow,
addKeyword,
EVENTS,
} = require("@bot-whatsapp/bot");
const QRPortalWeb = require("@bot-whatsapp/portal");
const BaileysProvider = require("@bot-whatsapp/provider/baileys");
const MockAdapter = require("@bot-whatsapp/database/mock");

// Subflujos llamados desde el menú
const flowPartidas = addKeyword(EVENTS.ACTION).addAnswer(
"📄 Requisitos: DNI, formulario y pago de S/ 15.00."
);
const flowLicencia = addKeyword(EVENTS.ACTION).addAnswer(
"🚗 Licencias: Lun–Vie, 8:00 a 14:00."
);
const flowCertificados = addKeyword(EVENTS.ACTION).addAnswer(
"📌 Certificados: retiro en Mesa de Partes."
);

// Menú de trámites
const flowTramites = addKeyword(["tramite", "trámite"])
.addAnswer("🧾 ¿Qué trámite deseas consultar?")
.addAnswer(
`1) Partidas
2) Licencia
3) Certificados`,
{ capture: true },
async (ctx, { gotoFlow, flowDynamic }) => {
const op = (ctx.body || "").trim();
if (op === "1") return gotoFlow(flowPartidas);
if (op === "2") return gotoFlow(flowLicencia);
if (op === "3") return gotoFlow(flowCertificados);
return await flowDynamic("❌ Opción inválida. Responde con 1, 2 o 3.");
}
);

const main = async () => {
const adapterDB = new MockAdapter();
const adapterFlow = createFlow([
flowTramites,
flowPartidas,
flowLicencia,
flowCertificados,
]);
const adapterProvider = createProvider(BaileysProvider);

createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
});
QRPortalWeb(); // abre portal QR en http://localhost:3000
};

main();

7.3 Bot educativo de preguntas frecuentes (FAQs)

Bot para responder dudas comunes de estudiantes:

const flowFAQs = addKeyword(['pregunta', 'ayuda'])
.addAnswer('📚 Preguntas frecuentes:
1. ¿Cómo me matriculo?
2. ¿Dónde veo mis notas?
3. ¿Qué pasa si repruebo?', null, async (ctx, { gotoFlow }) => {
if (ctx.body === '1') return gotoFlow(flowMatricula);
if (ctx.body === '2') return gotoFlow(flowNotas);
if (ctx.body === '3') return gotoFlow(flowReprobado);
});

const flowMatricula = addKeyword([]).addAnswer('✅ Para matricularte, entra al portal y sigue los pasos del sistema.');
const flowNotas = addKeyword([]).addAnswer('📊 Puedes ver tus notas en el portal académico con tu usuario.');
const flowReprobado = addKeyword([]).addAnswer('🔁 Si repruebas, puedes llevar el curso en verano o repetirlo.');

✅ Resumen del Módulo 7

Caso prácticoAplicación principal
Bot de pedidosGestión de menú, pedidos rápidos
Atención ciudadanaConsulta de trámites, horarios, requisitos
FAQs educativasAyuda automatizada a estudiantes
Registro de usuariosCaptura de datos personales vía chat

📦 ¿Qué sigue?

En el Módulo 8, aprenderás a desplegar tu bot a producción usando PM2, servidores VPS y buenas prácticas de seguridad y escalabilidad.