// bot.js
import { Bot, defineBot, flow, isMainModule } from '@botmesh/core'
import { BaileysProvider } from '@botmesh/baileys'
const PRECIOS = { pequena: 8, mediana: 10, grande: 12 }
const createBot = defineBot((provider) => {
const bot = new Bot({ provider, lang: 'es' })
// Un sub-flujo sin trigger propio: lo ejecuta el menú principal
const pedido = flow([])
.choose('¿Qué tamaño?', { pequena: 'Pequeña ($8)', mediana: 'Mediana ($10)', grande: 'Grande ($12)' }, 'tamano')
.choose('¿Qué sabor?', { margarita: 'Margarita', pepperoni: 'Pepperoni', vegetal: 'Vegetal' }, 'sabor')
.say((_ctx, c) => `✅ Una ${c.state.sabor} ${c.state.tamano}: $${PRECIOS[c.state.tamano]}. ¡Lista en 20 minutos!`)
// Menú numerado: funciona en todas partes, también en WhatsApp con Baileys
bot.use(
flow('menu').choose('🍕 *Pizzería*: ¿qué te apetece?', {
pedir: { label: 'Pedir una pizza', then: pedido },
horario: { label: 'Horario', then: (_ctx, c) => c.say('🕘 Todos los días, de 12:00 a 23:00.') },
}),
)
// Botones nativos donde el canal los muestra (Telegram, WhatsApp Cloud API),
// y la misma pregunta como menú numerado en el resto
bot.conversation('valorar', async (c, ctx) => {
const opciones = { genial: '😋 Genial', bien: '🙂 Bien', meh: '😕 Regular' }
let respuesta
if (ctx.capabilities?.buttons) {
await ctx.buttons('¿Qué tal tu pizza?', Object.entries(opciones).map(([id, title]) => ({ id, title })))
respuesta = (await c.waitAny()).body // un toque llega como un mensaje cuyo texto es el id del botón
} else {
respuesta = await c.choose('¿Qué tal tu pizza?', opciones)
}
await ctx.reply(Object.hasOwn(opciones, respuesta) ? `¡Gracias por tu valoración: ${opciones[respuesta]}!` : '¡Gracias por tu opinión!')
})
bot.onMessage((ctx) => ctx.reply('Envía "menu" para pedir o "valorar" para valorarnos.'))
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: 'menu-bot' }))
bot.on('ready', () => console.log('✅ Conectado. Escribe "menu" desde otro teléfono.'))
await bot.start()
}