botwa → botmesh. Cada sección dice a quién
afecta y qué hacer.
Nombres de métricas de Prometheus: prefijo botmesh_
toPrometheus(bot.metrics()) (@botmesh/core) nombra ahora cada familia
botmesh_* en lugar de botwa_*, por ejemplo botmesh_messages_in_total.
Los paneles y alertas que consultan los nombres anteriores siguen funcionando si
pasas el prefijo antiguo:
@botmesh/otel) pasó de botwa.* a botmesh.* de
la misma forma (otelMetricsPlugin({ prefix: 'botwa' }) conserva los nombres
anteriores), y el control plane (@botmesh/manager) sirve ahora
botmesh_manager_bots_registered y botmesh_manager_bots_running.
Variables de entorno
La query de recarga en caliente de
botmesh dev es ahora ?botmesh_v=<n> (solo
se ve en las trazas de pila).
@botmesh/redis-store: redis es una dependencia peer
redis (node-redis) pasó de dependencies a peerDependencies con el rango
^4.7.0 || ^5.0.0 || ^6.0.0. npm y pnpm instalan solos una dependencia peer que
falta (node-redis 6), así que pnpm add @botmesh/redis-store sigue funcionando;
si ya dependes de redis, el store usa tu versión.
- node-redis 5 y 6 quedan soportados, en un nodo y en Redis Cluster, con RESP2 o RESP3 (el valor por defecto de node-redis 6).
NativeRedisClientyNativeRedisClusterClientson ahora interfaces estructurales pequeñas en lugar deReturnType<typeof createClient>, de modo que el cliente de cualquier major soportada pasa el chequeo de tipos. Si los usabas para llamar comandos, usa el tipo deredis(ReturnType<typeof createClient>).
@botmesh/baileys: ffmpeg ya no viene incluido
El provider ya no depende de fluent-ffmpeg (obsoleto) ni de
@ffmpeg-installer/ffmpeg (sin mantenimiento, con un ffmpeg antiguo). Las notas
de voz se transcodifican ejecutando directamente un binario de ffmpeg, que se
busca en este orden:
FFMPEG_PATH, si está definida;- la dependencia peer opcional
ffmpeg-static, si está instalada y su binario se descargó (con pnpm, permite su script de build); ffmpegen elPATH(apt install ffmpeg,brew install ffmpeg,choco install ffmpeg).
UnsupportedContentError
que explica cómo instalar ffmpeg (si ffmpeg-static está instalado pero su
binario nunca se descargó, el mensaje dice que permitas su script de build y lo
reinstales). El texto, las imágenes y el resto no se ven
afectados. La imagen Docker de un bot que envía notas de voz necesita ffmpeg (o
ffmpeg-static).
Baileys sigue en 7.0.0-rc14: todavía no existe una 7.x estable (ver el
README del paquete
y su política de actualización de upstream).
Providers de Meta: Graph API v26.0
@botmesh/meta, @botmesh/messenger y @botmesh/instagram llaman ahora por
defecto a la Graph API v26.0 (antes v21.0, que Meta retira el 21-01-2027).
Los payloads de envío y de webhook que usan los providers no cambiaron entre esas
versiones. Para quedarte en una versión, fíjala:
played de WhatsApp (se escuchó una nota de voz) llega ahora como
status: 'read' con platformData.played: true; antes se descartaba.
@botmesh/ai: SDK y modelos por defecto
Para mover un bot de Gemini:
pnpm remove @google/generative-ai && pnpm add @google/genai.
Nada más cambia en aiPlugin; baseUrl pasa a ser el httpOptions.baseUrl del
SDK. Para Vertex AI, crea el cliente tú mismo con fromGoogleGenAI (ver
Gemini).
Los modelos por defecto no entran en semver: fija model si la elección te
importa. Claude Opus 5.5 siempre piensa (thinking: 'off' no reduce nada en él;
usa effort: 'low') y su esfuerzo por defecto es medium.
@botmesh/hub: campo botmesh del manifiesto
Un manifiesto de plugin declara su rango de runtime en botmesh
("botmesh": "^2.0.0"). Los manifiestos con el campo antiguo botwa se siguen
aceptando, y la validación los devuelve con botmesh.
eslint-plugin-botmesh: nombres de los tipos
Los tipos exportados son BotMeshConfigs y BotMeshPlugin. Los antiguos
BotWaConfigs y BotWaPlugin se mantienen como alias obsoletos de los mismos
tipos, así que los imports existentes siguen compilando; renómbralos cuando
te venga bien.
Nombres que se mantienen
Algunos identificadores del nombre anterior del proyecto viven en datos ya guardados. Renombrarlos ocultaría datos que ya existen, así que son permanentes:
Pasa tu propio
prefix, dbName o cadena de conexión para usar otros nombres en
un despliegue nuevo.