WhatsApp (canal web)
Estado: listo para producción mediante WhatsApp Web (Baileys). La gateway es propietaria de las sesiones vinculadas.Instalación (bajo demanda)
- Onboarding (
openclaw onboard) yopenclaw channels add --channel whatsappsolicitan instalar el plugin de WhatsApp la primera vez que lo seleccionas. openclaw channels login --channel whatsapptambién ofrece el flujo de instalación cuando el plugin todavía no está presente.- Canal de desarrollo + checkout de git: usa de forma predeterminada la ruta local del plugin.
- Stable/Beta: usa de forma predeterminada el paquete npm
@openclaw/whatsapp.
Emparejamiento
La política predeterminada de mensajes directos es emparejamiento para remitentes desconocidos.
Solución de problemas del canal
Diagnósticos y guías de reparación entre canales.
Configuración de gateway
Patrones y ejemplos completos de configuración del canal.
Configuración rápida
OpenClaw recomienda ejecutar WhatsApp en un número independiente cuando sea posible. (Los metadatos del canal y el flujo de configuración están optimizados para esa configuración, pero también se admiten configuraciones con número personal).
Patrones de despliegue
Número dedicado (recomendado)
Número dedicado (recomendado)
Este es el modo operativo más limpio:
- identidad de WhatsApp separada para OpenClaw
- límites de listas de permitidos y enrutamiento de mensajes directos más claros
- menor probabilidad de confusión por chatear contigo mismo
Alternativa con número personal
Alternativa con número personal
Onboarding admite el modo de número personal y escribe una línea base compatible con chat contigo mismo:
dmPolicy: "allowlist"allowFromincluye tu número personalselfChatMode: true
allowFrom.Ámbito del canal solo WhatsApp Web
Ámbito del canal solo WhatsApp Web
El canal de la plataforma de mensajería está basado en WhatsApp Web (
Baileys) en la arquitectura actual de canales de OpenClaw.No existe un canal de mensajería de WhatsApp de Twilio separado en el registro integrado de canales de chat.Modelo de runtime
- La gateway es propietaria del socket de WhatsApp y del bucle de reconexión.
- Los envíos salientes requieren un listener de WhatsApp activo para la cuenta de destino.
- Los chats de estado y difusión se ignoran (
@status,@broadcast). - Los chats directos usan reglas de sesión de mensajes directos (
session.dmScope;mainde forma predeterminada colapsa los mensajes directos en la sesión principal del agente). - Las sesiones de grupo están aisladas (
agent:<agentId>:whatsapp:group:<jid>).
Control de acceso y activación
- Política de mensajes directos
- Política de grupo + listas de permitidos
- Menciones + /activation
channels.whatsapp.dmPolicy controla el acceso al chat directo:pairing(predeterminado)allowlistopen(requiere queallowFromincluya"*")disabled
allowFrom acepta números con formato E.164 (normalizados internamente).Sobrescritura para varias cuentas: channels.whatsapp.accounts.<id>.dmPolicy (y allowFrom) tienen prioridad sobre los valores predeterminados a nivel de canal para esa cuenta.Detalles del comportamiento en runtime:- los emparejamientos se conservan en el almacén de permitidos del canal y se fusionan con
allowFromconfigurado - si no se configura ninguna lista de permitidos, el número propio vinculado está permitido de forma predeterminada
- los mensajes directos salientes
fromMenunca se emparejan automáticamente
Comportamiento de número personal y chat contigo mismo
Cuando el número propio vinculado también está presente enallowFrom, se activan las protecciones de chat contigo mismo de WhatsApp:
- omitir confirmaciones de lectura en turnos de chat contigo mismo
- ignorar el comportamiento de activación automática por mention-JID que de otro modo te haría ping a ti mismo
- si
messages.responsePrefixno está establecido, las respuestas en chat contigo mismo usan de forma predeterminada[{identity.name}]o[openclaw]
Normalización de mensajes y contexto
Sobre envolvente de entrada + contexto de respuesta
Sobre envolvente de entrada + contexto de respuesta
Los mensajes entrantes de WhatsApp se encapsulan en el sobre compartido de entrada.Si existe una respuesta citada, el contexto se añade de esta forma:Los campos de metadatos de respuesta también se rellenan cuando están disponibles (
ReplyToId, ReplyToBody, ReplyToSender, remitente JID/E.164).Placeholders de medios y extracción de ubicación/contacto
Placeholders de medios y extracción de ubicación/contacto
Los mensajes entrantes solo de medios se normalizan con placeholders como:
<media:image><media:video><media:audio><media:document><media:sticker>
Inyección pendiente del historial de grupos
Inyección pendiente del historial de grupos
Para grupos, los mensajes no procesados pueden almacenarse en búfer e inyectarse como contexto cuando finalmente se activa el bot.
- límite predeterminado:
50 - configuración:
channels.whatsapp.historyLimit - fallback:
messages.groupChat.historyLimit 0desactiva
[Chat messages since your last reply - for context][Current message - respond to this]
Confirmaciones de lectura
Confirmaciones de lectura
Las confirmaciones de lectura están habilitadas de forma predeterminada para los mensajes entrantes de WhatsApp aceptados.Desactivar globalmente:Sobrescritura por cuenta:Los turnos de chat contigo mismo omiten las confirmaciones de lectura incluso cuando están habilitadas globalmente.
Entrega, fragmentación y medios
Fragmentación de texto
Fragmentación de texto
- límite de fragmentación predeterminado:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- el modo
newlineprefiere límites de párrafo (líneas en blanco) y luego usa como fallback una fragmentación segura por longitud
Comportamiento de medios salientes
Comportamiento de medios salientes
- admite cargas de imagen, video, audio (nota de voz PTT) y documento
audio/oggse reescribe aaudio/ogg; codecs=opuspara compatibilidad con notas de voz- la reproducción de GIF animados se admite mediante
gifPlayback: trueen envíos de video - los subtítulos se aplican al primer elemento multimedia al enviar cargas de respuesta multimeda
- la fuente multimedia puede ser HTTP(S),
file://o rutas locales
Límites de tamaño de medios y comportamiento de fallback
Límites de tamaño de medios y comportamiento de fallback
- límite de guardado de medios entrantes:
channels.whatsapp.mediaMaxMb(predeterminado50) - límite de envío de medios salientes:
channels.whatsapp.mediaMaxMb(predeterminado50) - las sobrescrituras por cuenta usan
channels.whatsapp.accounts.<accountId>.mediaMaxMb - las imágenes se optimizan automáticamente (redimensionado/barrido de calidad) para ajustarse a los límites
- ante fallo al enviar medios, el fallback del primer elemento envía una advertencia de texto en lugar de descartar la respuesta silenciosamente
Nivel de reacciones
channels.whatsapp.reactionLevel controla qué tan ampliamente usa el agente reacciones con emoji en WhatsApp:
| Nivel | Reacciones de confirmación | Reacciones iniciadas por el agente | Descripción |
|---|---|---|---|
"off" | No | No | Sin reacciones en absoluto |
"ack" | Sí | No | Solo reacciones de confirmación (acuse previo a respuesta) |
"minimal" | Sí | Sí (conservadoras) | Confirmación + reacciones del agente con guía conservadora |
"extensive" | Sí | Sí (fomentadas) | Confirmación + reacciones del agente con guía fomentada |
"minimal".
Las sobrescrituras por cuenta usan channels.whatsapp.accounts.<id>.reactionLevel.
Reacciones de confirmación
WhatsApp admite reacciones de confirmación inmediatas al recibir entradas mediantechannels.whatsapp.ackReaction.
Las reacciones de confirmación están controladas por reactionLevel: se suprimen cuando reactionLevel es "off".
- se envían inmediatamente después de aceptar la entrada (antes de responder)
- los fallos se registran, pero no bloquean la entrega normal de la respuesta
- el modo de grupo
mentionsreacciona en turnos activados por mención; la activación de grupoalwaysactúa como bypass para esta comprobación - WhatsApp usa
channels.whatsapp.ackReaction(el heredadomessages.ackReactionno se usa aquí)
Varias cuentas y credenciales
Selección de cuenta y valores predeterminados
Selección de cuenta y valores predeterminados
- los IDs de cuenta provienen de
channels.whatsapp.accounts - selección de cuenta predeterminada:
defaultsi está presente; en caso contrario, el primer ID de cuenta configurado (ordenado) - los IDs de cuenta se normalizan internamente para la búsqueda
Rutas de credenciales y compatibilidad heredada
Rutas de credenciales y compatibilidad heredada
- ruta actual de autenticación:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - archivo de respaldo:
creds.json.bak - la autenticación heredada predeterminada en
~/.openclaw/credentials/sigue reconociéndose/migrándose para flujos de cuenta predeterminada
Comportamiento de cierre de sesión
Comportamiento de cierre de sesión
openclaw channels logout --channel whatsapp [--account <id>] borra el estado de autenticación de WhatsApp para esa cuenta.En directorios heredados de autenticación, oauth.json se conserva mientras se eliminan los archivos de autenticación de Baileys.Herramientas, acciones y escrituras de configuración
- La compatibilidad con herramientas del agente incluye la acción de reacción de WhatsApp (
react). - Puertas de acciones:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Las escrituras de configuración iniciadas por canal están habilitadas de forma predeterminada (desactívalas con
channels.whatsapp.configWrites=false).
Solución de problemas
No vinculado (se requiere QR)
No vinculado (se requiere QR)
Síntoma: el estado del canal informa que no está vinculado.Solución:
Vinculado pero desconectado / bucle de reconexión
Vinculado pero desconectado / bucle de reconexión
Síntoma: cuenta vinculada con desconexiones repetidas o intentos de reconexión.Solución:Si es necesario, vuelve a vincular con
channels login.Sin listener activo al enviar
Sin listener activo al enviar
Los envíos salientes fallan rápidamente cuando no existe un listener activo de gateway para la cuenta de destino.Asegúrate de que la gateway esté en ejecución y de que la cuenta esté vinculada.
Los mensajes de grupo se ignoran inesperadamente
Los mensajes de grupo se ignoran inesperadamente
Comprueba en este orden:
groupPolicygroupAllowFrom/allowFrom- entradas de la lista de permitidos
groups - filtro de mención (
requireMention+ patrones de mención) - claves duplicadas en
openclaw.json(JSON5): las entradas posteriores sobrescriben las anteriores, así que mantén un sologroupPolicypor ámbito
Advertencia de runtime de Bun
Advertencia de runtime de Bun
El runtime de gateway de WhatsApp debe usar Node. Bun está marcado como incompatible para el funcionamiento estable de la gateway de WhatsApp/Telegram.
Indicadores de referencia de configuración
Referencia principal: Campos de WhatsApp de alta señal:- acceso:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - entrega:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - varias cuentas:
accounts.<id>.enabled,accounts.<id>.authDir, sobrescrituras a nivel de cuenta - operaciones:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - comportamiento de sesión:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit