Saltar al contenido principal
new Bot() valida el objeto completo y lanza un ConfigValidationError que nombra la primera opción incorrecta.

Opciones de BotConfig

Lo esencial

Enrutado y conversaciones

Un mensaje en conversation.* gana al texto interno traducido; para traducir los textos internos, ver Mensajes internos.

Envío

Identidad y espacio de nombres

Estos ids son el espacio de nombres de todo lo que escribe el bot (filas del store, datos de usuario, tareas programadas, journals durables, trazas), así que dos bots pueden compartir una base de datos. Cambiar cualquiera de ellos más adelante hace que el bot busque en otro espacio: las filas existentes quedan en el anterior.

Funciones de producción (opt-in)

Cada una está desactivada hasta que la configuras, y tiene su propia guía. storeConfig está obsoleta: pasa store: new MemoryStore({ file, maxMessagesPerChat, autoSaveInterval }).

Duraciones

Toda opción de duración acepta un texto o un número de milisegundos. Incluye todas las opciones cuyo nombre termina en Ms (typing.minMs, coordination.turnWaitMs, scheduler.tickMs, durability.outbox.backoff.baseMs…):
Un valor inválido falla al construir el bot y nombra la opción:
parseDuration('2m') (de @botmesh/core) usa la misma gramática y devuelve milisegundos.

Ciclo de vida y eventos

  • Los envíos, ediciones y ctx.delete() antes de start() o después de stop() rechazan con BotNotRunningError. Un listener de 'ready' ya puede enviar.
  • Las llamadas a start() y stop() se ejecutan de una en una, en orden.
  • Las señales de presencia (ctx.typing(), ctx.markRead()) nunca lanzan con el transporte desconectado: se omiten y cuentan en metrics().presenceSkipped.
Escucha con bot.on(evento, fn) (también bot.once y bot.off):
Escucha siempre 'error'Los errores nunca tumban el proceso, así que sin listener solo quedan en el log. bot.on('error', ({ error, ctx }) => ...) es donde los reportas.

Logs

logger acepta un LoggerLike: pino, console o cualquier objeto con debug, info, warn y error. Providers y stores aceptan la misma opción logger. Los paquetes siempre lo llaman al estilo pino, así que un logger propio solo tiene que entender dos formas:
Un error va siempre bajo la clave err, y child(bindings) es opcional. Sin logger, el bot usa su propio pino en warn (debug: true lo baja a debug); bot.logger es el logger en uso. Los ids de chat y remitente son datos personales (teléfonos, emails), así que las líneas de log del propio bot los hashean por defecto: Los cuerpos de los mensajes nunca se registran.

Errores

Todos se exportan desde @botmesh/core. Compruébalos con instanceof; la mayoría lleva además un code o name estable.

Siguientes pasos