// bot.js
import { Bot, defineBot, flow, isMainModule, slashCommandsPlugin } from '@botmesh/core'
import { BaileysProvider } from '@botmesh/baileys'
const PRODUCTOS = {
movil: { label: '📱 Móvil ($599)', price: 599 },
camisa: { label: '👕 Camisa ($25)', price: 25 },
lampara: { label: '🏠 Lámpara ($35)', price: 35 },
}
const createBot = defineBot((provider) => {
const bot = new Bot({
provider,
lang: 'es',
// Se envía cuando vence una espera del flujo
conversation: { timeoutMessage: '⏰ Tu carrito caducó. Envía "comprar" para empezar de nuevo.' },
})
bot.plug(slashCommandsPlugin)
// Un sub-flujo reutilizable: corre en línea desde la confirmación y vuelve
const direccion = flow([]).ask('🏠 ¿Calle y número?', 'street').ask('🏙️ ¿Ciudad?', 'city')
bot.use(
flow('comprar')
.timeout('2m')
.choose('🛒 *¿Qué quieres comprar?*', {
movil: PRODUCTOS.movil.label,
camisa: PRODUCTOS.camisa.label,
lampara: PRODUCTOS.lampara.label,
}, 'product')
.choose('¿Cuántas unidades?', { una: '1 unidad', dos: '2 unidades', tres: '3 unidades' }, 'qty')
.say((_ctx, c) => {
const cantidad = { una: 1, dos: 2, tres: 3 }[c.state.qty]
const producto = PRODUCTOS[c.state.product]
c.state.total = cantidad * producto.price
return `🧾 ${cantidad} × ${producto.label} = $${c.state.total}`
})
.choose('¿Confirmas el pedido?', {
si: { label: 'Sí ✅', then: direccion },
cambiar: { label: '⬅️ Elegir otro producto', goto: 'comprar' },
})
.say((_ctx, c) => `📦 Pedido hecho: $${c.state.total}, envío a ${c.state.street}, ${c.state.city}.`),
)
bot.onMessage((ctx) => ctx.reply('Envía "comprar" para empezar.'))
return bot
})
export default createBot
// `node bot.js` conecta con WhatsApp; `npx botmesh dev bot.js` se salta este bloque
if (isMainModule(import.meta)) {
const bot = await createBot(new BaileysProvider({ session: 'shop-bot' }))
bot.on('ready', () => console.log('✅ Conectado. Escribe "comprar" desde otro teléfono.'))
await bot.start()
}