Mainstream messaging
Estado: listo para producción mediante WhatsApp Web (Baileys). Gateway gestiona las sesiones vinculadas.
Instalación (bajo demanda)
- La incorporación (
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 aún no está presente.- Canal de desarrollo + checkout de git: usa de forma predeterminada la ruta local del Plugin.
- Stable/Beta: usa el paquete npm
@openclaw/whatsappen la etiqueta de versión oficial actual.
La instalación manual sigue disponible:
openclaw plugins install @openclaw/whatsapp
Usa el paquete base para seguir la etiqueta de versión oficial actual. Fija una versión exacta solo cuando necesites una instalación reproducible.
En Windows, el Plugin de WhatsApp necesita Git en PATH durante la instalación de npm porque
una de sus dependencias de Baileys/libsignal se obtiene desde una URL de git. Instala
Git for Windows, luego reinicia la shell y vuelve a ejecutar la instalación:
winget install --id Git.Git -e
Portable Git también funciona si su directorio bin está en PATH.
La política predeterminada de DM es el emparejamiento para remitentes desconocidos.
Diagnósticos entre canales y guías de reparación.
Patrones y ejemplos completos de configuración de canal.
Configuración rápida
Configurar la política de acceso de WhatsApp
{
channels: {
whatsapp: {
dmPolicy: "pairing",
allowFrom: ["+15551234567"],
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
},
},
}
Vincular WhatsApp (QR)
openclaw channels login --channel whatsapp
Para una cuenta específica:
openclaw channels login --channel whatsapp --account work
Para adjuntar un directorio de autenticación de WhatsApp Web existente/personalizado antes de iniciar sesión:
openclaw channels add --channel whatsapp --account work --auth-dir /path/to/wa-auth
openclaw channels login --channel whatsapp --account work
Iniciar el Gateway
openclaw gateway
Aprobar la primera solicitud de emparejamiento (si usas el modo de emparejamiento)
openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
Las solicitudes de emparejamiento caducan después de 1 hora. Las solicitudes pendientes tienen un límite de 3 por canal.
Patrones de despliegue
Número dedicado (recomendado)
Este es el modo operativo más limpio:
- identidad de WhatsApp separada para OpenClaw
- listas de permitidos de DM y límites de enrutamiento más claros
- menor probabilidad de confusión con chats contigo mismo
Patrón mínimo de política:
{
channels: {
whatsapp: {
dmPolicy: "allowlist",
allowFrom: ["+15551234567"],
},
},
}
Alternativa con número personal
La incorporación admite el modo de número personal y escribe una base compatible con chats contigo mismo:
dmPolicy: "allowlist"allowFromincluye tu número personalselfChatMode: true
En tiempo de ejecución, las protecciones de chat contigo mismo se basan en el número propio vinculado y allowFrom.
Alcance del canal solo para WhatsApp Web
El canal de la plataforma de mensajería está basado en WhatsApp Web (Baileys) en la arquitectura de canales actual de OpenClaw.
No hay un canal de mensajería de Twilio WhatsApp separado en el registro integrado de canales de chat.
Modelo de tiempo de ejecución
- Gateway gestiona el socket de WhatsApp y el bucle de reconexión.
- El vigilante de reconexión usa la actividad de transporte de WhatsApp Web, no solo el volumen de mensajes entrantes de la aplicación, por lo que una sesión silenciosa de dispositivo vinculado no se reinicia solo porque nadie haya enviado un mensaje recientemente. Un límite más largo de silencio de la aplicación sigue forzando una reconexión si los frames de transporte continúan llegando pero no se procesa ningún mensaje de aplicación durante la ventana del vigilante; después de una reconexión transitoria para una sesión activa recientemente, esa comprobación de silencio de la aplicación usa el tiempo de espera normal de mensajes para la primera ventana de recuperación.
- Los tiempos del socket de Baileys son explícitos bajo
web.whatsapp.*:keepAliveIntervalMscontrola los pings de aplicación de WhatsApp Web,connectTimeoutMscontrola el tiempo de espera del handshake de apertura ydefaultQueryTimeoutMscontrola los tiempos de espera de consultas de Baileys. - Los envíos salientes requieren un listener de WhatsApp activo para la cuenta de destino.
- Los envíos a grupos adjuntan metadatos nativos de mención para tokens
@+<digits>y@<digits>en texto y pies de medios cuando el token coincide con los metadatos actuales de participantes de WhatsApp, incluidos grupos respaldados por LID. - Los chats de estado y difusión se ignoran (
@status,@broadcast). - El vigilante de reconexión sigue la actividad de transporte de WhatsApp Web, no solo el volumen de mensajes entrantes de la aplicación: las sesiones silenciosas de dispositivo vinculado permanecen activas mientras continúen los frames de transporte, pero un bloqueo del transporte fuerza una reconexión mucho antes de la ruta posterior de desconexión remota.
- Los chats directos usan reglas de sesión de DM (
session.dmScope; el valor predeterminadomaincolapsa los DM en la sesión principal del agente). - Las sesiones de grupo están aisladas (
agent:<agentId>:whatsapp:group:<jid>). - Los canales/newsletters de WhatsApp pueden ser destinos salientes explícitos con su JID nativo
@newsletter. Los envíos salientes a newsletters usan metadatos de sesión de canal (agent:<agentId>:whatsapp:channel:<jid>) en lugar de semántica de sesión de DM. - El transporte de WhatsApp Web respeta las variables de entorno de proxy estándar en el host de Gateway (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ variantes en minúsculas). Prefiere la configuración de proxy a nivel de host frente a ajustes de proxy de WhatsApp específicos del canal. - Cuando
messages.removeAckAfterReplyestá habilitado, OpenClaw borra la reacción de acuse de WhatsApp después de que se entrega una respuesta visible.
Hooks de Plugin y privacidad
Los mensajes entrantes de WhatsApp pueden contener contenido de mensajes personales, números de teléfono,
identificadores de grupo, nombres de remitente y campos de correlación de sesión. Por ese motivo,
WhatsApp no transmite cargas de hook message_received entrantes a plugins
a menos que lo habilites explícitamente:
{
channels: {
whatsapp: {
pluginHooks: {
messageReceived: true,
},
},
},
}
Puedes limitar la habilitación a una cuenta:
{
channels: {
whatsapp: {
accounts: {
work: {
pluginHooks: {
messageReceived: true,
},
},
},
},
},
}
Habilita esto solo para plugins en los que confíes para recibir contenido e identificadores de mensajes entrantes de WhatsApp.
Control de acceso y activación
Política de DM
channels.whatsapp.dmPolicy controla el acceso a chats directos:
pairing(predeterminado)allowlistopen(requiere queallowFromincluya"*")disabled
allowFrom acepta números con estilo E.164 (normalizados internamente).
allowFrom es una lista de control de acceso de remitentes de DM. No controla envíos salientes explícitos a JID de grupos de WhatsApp ni a JID de canales @newsletter.
Anulación multicuenta: channels.whatsapp.accounts.<id>.dmPolicy (y allowFrom) tienen prioridad sobre los valores predeterminados a nivel de canal para esa cuenta.
Detalles del comportamiento en tiempo de ejecución:
- los emparejamientos se conservan en el almacén de permitidos del canal y se combinan con
allowFromconfigurado - la automatización programada y el fallback de destinatario de Heartbeat usan destinos de entrega explícitos o
allowFromconfigurado; las aprobaciones de emparejamiento de DM no son destinatarios implícitos de cron ni de Heartbeat - si no hay una lista de permitidos configurada, el número propio vinculado se permite de forma predeterminada
- OpenClaw nunca empareja automáticamente DM salientes
fromMe(mensajes que te envías a ti mismo desde el dispositivo vinculado)
Política de grupos + listas de permitidos
El acceso a grupos tiene dos capas:
-
Lista de permitidos de membresía de grupo (
channels.whatsapp.groups)- si
groupsse omite, todos los grupos son elegibles - si
groupsestá presente, actúa como una lista de permitidos de grupos ("*"permitido)
- si
-
Política de remitentes de grupo (
channels.whatsapp.groupPolicy+groupAllowFrom)open: se omite la lista de permitidos de remitentesallowlist: el remitente debe coincidir congroupAllowFrom(o*)disabled: bloquea todas las entradas de grupo
Fallback de lista de permitidos de remitentes:
- si
groupAllowFromno está definido, el tiempo de ejecución recurre aallowFromcuando esté disponible - las listas de permitidos de remitentes se evalúan antes de la activación por mención/respuesta
Nota: si no existe ningún bloque channels.whatsapp, el fallback de política de grupos en tiempo de ejecución es allowlist (con un log de advertencia), incluso si channels.defaults.groupPolicy está definido.
Menciones + /activation
Las respuestas de grupo requieren mención de forma predeterminada.
La detección de menciones incluye:
- menciones explícitas de WhatsApp a la identidad del bot
- patrones regex de mención configurados (
agents.list[].groupChat.mentionPatterns, fallbackmessages.groupChat.mentionPatterns) - transcripciones de notas de voz entrantes para mensajes de grupo autorizados
- detección implícita de respuesta al bot (el remitente de la respuesta coincide con la identidad del bot)
Nota de seguridad:
- citar/responder solo satisface el control de mención; no concede autorización al remitente
- con
groupPolicy: "allowlist", los remitentes que no estén en la lista de permitidos siguen bloqueados aunque respondan al mensaje de un usuario incluido en la lista de permitidos
Comando de activación a nivel de sesión:
/activation mention/activation always
activation actualiza el estado de la sesión (no la configuración global). Está controlado por el propietario.
Comportamiento con número personal y chat contigo mismo
Cuando el número propio vinculado también está presente en allowFrom, se activan las salvaguardas de chat contigo mismo de WhatsApp:
- omitir confirmaciones de lectura para turnos de chat contigo mismo
- ignorar comportamiento de activación automática por mention-JID que de otro modo te haría ping a ti mismo
- si
messages.responsePrefixno está definido, las respuestas de chat contigo mismo usan de forma predeterminada[{identity.name}]o[openclaw]
Normalización de mensajes y contexto
Envoltorio entrante + contexto de respuesta
Los mensajes entrantes de WhatsApp se envuelven en el envoltorio entrante compartido.
Si existe una respuesta citada, el contexto se añade con esta forma:
[Replying to <sender> id:<stanzaId>]
<quoted body or media placeholder>
[/Replying]
Los campos de metadatos de respuesta también se completan cuando están disponibles (ReplyToId, ReplyToBody, ReplyToSender, JID/E.164 del remitente).
Cuando el destino de la respuesta citada es un medio descargable, OpenClaw lo guarda mediante
el almacén normal de medios entrantes y lo expone como MediaPath/MediaType para que
el agente pueda inspeccionar la imagen referenciada en lugar de ver solo
<media:image>.
Marcadores de posición de medios y extracción de ubicación/contacto
Los mensajes entrantes solo con medios se normalizan con marcadores de posición como:
<media:image><media:video><media:audio><media:document><media:sticker>
Las notas de voz de grupo autorizadas se transcriben antes del control de menciones cuando el
cuerpo es solo <media:audio>, por lo que decir la mención del bot en la nota de voz puede
activar la respuesta. Si la transcripción aún no menciona al bot, la
transcripción se conserva en el historial de grupo pendiente en lugar del marcador de posición sin procesar.
Los cuerpos de ubicación usan texto de coordenadas conciso. Las etiquetas/comentarios de ubicación y los detalles de contacto/vCard se renderizan como metadatos no confiables delimitados, no como texto de prompt inline.
Inyección de historial de grupo pendiente
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 - reserva:
messages.groupChat.historyLimit 0desactiva
Marcadores de inyección:
[Mensajes de chat desde tu última respuesta - para contexto][Mensaje actual - responde a esto]
Confirmaciones de lectura
Las confirmaciones de lectura están activadas de forma predeterminada para los mensajes entrantes aceptados de WhatsApp.
Desactivar globalmente:
{
channels: {
whatsapp: {
sendReadReceipts: false,
},
},
}
Anulación por cuenta:
{
channels: {
whatsapp: {
accounts: {
work: {
sendReadReceipts: false,
},
},
},
},
}
Los turnos de chat propio omiten las confirmaciones de lectura incluso cuando están activadas globalmente.
Entrega, fragmentación y multimedia
Fragmentación de texto
- límite de fragmento predeterminado:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- el modo
newlineprefiere los límites de párrafo (líneas en blanco) y luego recurre a una fragmentación segura por longitud
Comportamiento de multimedia saliente
- admite cargas de imagen, video, audio (nota de voz PTT) y documento
- el multimedia de audio se envía mediante la carga
audiode Baileys conptt: true, por lo que los clientes de WhatsApp lo muestran como una nota de voz push-to-talk - las cargas de respuesta conservan
audioAsVoice; la salida de nota de voz TTS para WhatsApp permanece en esta ruta PTT incluso cuando el proveedor devuelve MP3 o WebM - el audio nativo Ogg/Opus se envía como
audio/ogg; codecs=opuspara compatibilidad con notas de voz - el audio que no sea Ogg, incluida la salida MP3/WebM de Microsoft Edge TTS, se transcodifica con
ffmpega Ogg/Opus mono de 48 kHz antes de la entrega PTT /tts latestenvía la última respuesta del asistente como una nota de voz y suprime envíos repetidos de la misma respuesta;/tts chat on|off|defaultcontrola el TTS automático para el chat actual de WhatsApp- la reproducción de GIF animados es compatible mediante
gifPlayback: trueen envíos de video - los subtítulos se aplican al primer elemento multimedia al enviar cargas de respuesta con varios medios, salvo que las notas de voz PTT envían primero el audio y el texto visible por separado porque los clientes de WhatsApp no muestran los subtítulos de notas de voz de forma uniforme
- la fuente multimedia puede ser HTTP(S),
file://o rutas locales
Límites de tamaño de multimedia y comportamiento de reserva
- límite de guardado de multimedia entrante:
channels.whatsapp.mediaMaxMb(predeterminado50) - límite de envío de multimedia saliente:
channels.whatsapp.mediaMaxMb(predeterminado50) - las anulaciones por cuenta usan
channels.whatsapp.accounts.<accountId>.mediaMaxMb - las imágenes se optimizan automáticamente (barrido de redimensionamiento/calidad) para ajustarse a los límites
- ante un fallo de envío de multimedia, la reserva del primer elemento envía una advertencia de texto en lugar de descartar la respuesta silenciosamente
Citas en respuestas
WhatsApp admite citas nativas en respuestas, donde las respuestas salientes citan visiblemente el mensaje entrante. Contrólalo con channels.whatsapp.replyToMode.
| Valor | Comportamiento |
|---|---|
"off" |
No citar nunca; enviar como mensaje simple |
"first" |
Citar solo el primer fragmento de respuesta saliente |
"all" |
Citar cada fragmento de respuesta saliente |
"batched" |
Citar respuestas agrupadas en cola y dejar sin cita las respuestas inmediatas |
El valor predeterminado es "off". Las anulaciones por cuenta usan channels.whatsapp.accounts.<id>.replyToMode.
{
channels: {
whatsapp: {
replyToMode: "first",
},
},
}
Nivel de reacción
channels.whatsapp.reactionLevel controla con qué amplitud el agente usa reacciones de emoji en WhatsApp:
| Nivel | Reacciones de acuse | Reacciones iniciadas por el agente | Descripción |
|---|---|---|---|
"off" |
No | No | Sin reacciones en absoluto |
"ack" |
Sí | No | Solo reacciones de acuse (confirmación previa a la respuesta) |
"minimal" |
Sí | Sí (conservador) | Acuse + reacciones del agente con orientación conservadora |
"extensive" |
Sí | Sí (recomendado) | Acuse + reacciones del agente con orientación recomendada |
Predeterminado: "minimal".
Las anulaciones por cuenta usan channels.whatsapp.accounts.<id>.reactionLevel.
{
channels: {
whatsapp: {
reactionLevel: "ack",
},
},
}
Reacciones de acuse
WhatsApp admite reacciones de acuse inmediatas al recibir mensajes entrantes mediante channels.whatsapp.ackReaction.
Las reacciones de acuse están controladas por reactionLevel: se suprimen cuando reactionLevel es "off".
{
channels: {
whatsapp: {
ackReaction: {
emoji: "👀",
direct: true,
group: "mentions", // always | mentions | never
},
},
},
}
Notas de comportamiento:
- se envían inmediatamente después de aceptar el mensaje entrante (antes de la respuesta)
- los fallos se registran, pero no bloquean la entrega normal de la respuesta
- el modo de grupo
mentionsreacciona en turnos activados por menciones; la activación de grupoalwaysactúa como omisión para esta comprobación - WhatsApp usa
channels.whatsapp.ackReaction(el valor heredadomessages.ackReactionno se usa aquí)
Varias cuentas y credenciales
Selección de cuenta y valores predeterminados
- los ids de cuenta provienen de
channels.whatsapp.accounts - selección de cuenta predeterminada:
defaultsi está presente; de lo 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
- ruta de autenticación actual:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - archivo de copia de seguridad:
creds.json.bak - la autenticación predeterminada heredada en
~/.openclaw/credentials/todavía se reconoce/migra para flujos de cuenta predeterminada
Comportamiento de cierre de sesión
openclaw channels logout --channel whatsapp [--account <id>] borra el estado de autenticación de WhatsApp para esa cuenta.
Cuando hay un Gateway accesible, el cierre de sesión primero detiene el escuchador activo de WhatsApp para la cuenta seleccionada, de modo que la sesión vinculada no siga recibiendo mensajes hasta el siguiente reinicio. openclaw channels remove --channel whatsapp también detiene el escuchador activo antes de desactivar o eliminar la configuración de la cuenta.
En directorios de autenticación heredados, 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). - Controles de acciones:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Las escrituras de configuración iniciadas por el canal están activadas de forma predeterminada (desactivar mediante
channels.whatsapp.configWrites=false).
Solución de problemas
No vinculado (se requiere QR)
Síntoma: el estado del canal indica que no está vinculado.
Solución:
openclaw channels login --channel whatsapp
openclaw channels status
Vinculado pero desconectado / bucle de reconexión
Síntoma: cuenta vinculada con desconexiones repetidas o intentos de reconexión.
Las cuentas silenciosas pueden permanecer conectadas más allá del tiempo de espera normal de mensajes; el vigilante reinicia cuando se detiene la actividad de transporte de WhatsApp Web, se cierra el socket o la actividad a nivel de aplicación permanece en silencio más allá de la ventana de seguridad más larga.
Si los registros muestran status=408 Request Time-out Connection was lost repetido, ajusta
los tiempos del socket de Baileys bajo web.whatsapp. Empieza acortando
keepAliveIntervalMs por debajo del tiempo de espera por inactividad de tu red y aumentando
connectTimeoutMs en enlaces lentos o con pérdidas:
{
web: {
whatsapp: {
keepAliveIntervalMs: 15000,
connectTimeoutMs: 60000,
defaultQueryTimeoutMs: 60000,
},
},
}
Solución:
openclaw doctor
openclaw logs --follow
Si ~/.openclaw/logs/whatsapp-health.log dice Gateway inactive pero
openclaw gateway status y openclaw channels status --probe muestran que el
gateway y WhatsApp están sanos, ejecuta openclaw doctor. En Linux, doctor
advierte sobre entradas heredadas de crontab que todavía invocan
~/.openclaw/bin/ensure-whatsapp.sh; elimina esas entradas obsoletas con
crontab -e porque cron puede carecer del entorno de bus de usuario de systemd y
hacer que ese script antiguo informe incorrectamente el estado del gateway.
Si es necesario, vuelve a vincular con channels login.
El inicio de sesión por QR agota el tiempo detrás de un proxy
Síntoma: openclaw channels login --channel whatsapp falla antes de mostrar un código QR utilizable con status=408 Request Time-out o una desconexión de socket TLS.
El inicio de sesión de WhatsApp Web usa el entorno proxy estándar del host del gateway (HTTPS_PROXY, HTTP_PROXY, variantes en minúsculas y NO_PROXY). Verifica que el proceso del gateway herede el entorno proxy y que NO_PROXY no coincida con mmg.whatsapp.net.
Sin escuchador activo al enviar
Los envíos salientes fallan rápido cuando no existe un escuchador de gateway activo para la cuenta de destino.
Asegúrate de que el gateway esté en ejecución y la cuenta esté vinculada.
La respuesta aparece en la transcripción pero no en WhatsApp
Las filas de transcripción registran lo que generó el agente. La entrega de WhatsApp se comprueba por separado: OpenClaw solo considera que una respuesta automática se ha enviado después de que Baileys devuelva un id de mensaje saliente para al menos un envío visible de texto o multimedia.
Las reacciones de acuse son confirmaciones previas a la respuesta independientes. Una reacción correcta no demuestra que WhatsApp haya aceptado la respuesta posterior de texto o multimedia.
Revisa los registros del gateway para auto-reply delivery failed o auto-reply was not accepted by WhatsApp provider.
Mensajes de grupo ignorados inesperadamente
Comprueba en este orden:
groupPolicygroupAllowFrom/allowFrom- entradas de lista de permitidos de
groups - control por menciones (
requireMention+ patrones de mención) - claves duplicadas en
openclaw.json(JSON5): las entradas posteriores anulan las anteriores, así que mantén un sologroupPolicypor ámbito
Advertencia de runtime de Bun
El runtime del gateway de WhatsApp debe usar Node. Bun se marca como incompatible para el funcionamiento estable del gateway de WhatsApp/Telegram.
Prompts del sistema
WhatsApp admite prompts del sistema de estilo Telegram para grupos y chats directos mediante los mapas groups y direct.
Jerarquía de resolución para mensajes de grupo:
El mapa groups efectivo se determina primero: si la cuenta define sus propios groups, reemplaza completamente el mapa groups raíz (sin fusión profunda). La búsqueda de prompt se ejecuta entonces en el único mapa resultante:
- Prompt del sistema específico del grupo (
groups["<groupId>"].systemPrompt): se usa cuando la entrada específica del grupo existe en el mapa y su clavesystemPromptestá definida. SisystemPromptes una cadena vacía (""), se suprime el comodín y no se aplica ningún prompt del sistema. - Prompt del sistema comodín de grupo (
groups["*"].systemPrompt): se usa cuando la entrada específica del grupo está ausente por completo del mapa o cuando existe pero no define ninguna clavesystemPrompt.
Jerarquía de resolución para mensajes directos:
El mapa direct efectivo se determina primero: si la cuenta define su propio direct, reemplaza completamente el mapa direct raíz (sin fusión profunda). La búsqueda de prompt se ejecuta entonces en el único mapa resultante:
- Prompt del sistema específico directo (
direct["<peerId>"].systemPrompt): se usa cuando la entrada del par específico existe en el mapa y su clavesystemPromptestá definida. SisystemPromptes una cadena vacía (""), el comodín se suprime y no se aplica ningún prompt del sistema. - Prompt del sistema comodín directo (
direct["*"].systemPrompt): se usa cuando la entrada del par específico está totalmente ausente del mapa, o cuando existe pero no define ninguna clavesystemPrompt.
Diferencia respecto al comportamiento multicuenta de Telegram: En Telegram, la raíz groups se suprime intencionalmente para todas las cuentas en una configuración multicuenta, incluso para cuentas que no definen sus propios groups, para evitar que un bot reciba mensajes de grupos a los que no pertenece. WhatsApp no aplica esta protección: la raíz groups y la raíz direct siempre las heredan las cuentas que no definen ninguna sobrescritura a nivel de cuenta, independientemente de cuántas cuentas estén configuradas. En una configuración multicuenta de WhatsApp, si quieres prompts de grupo o directos por cuenta, define explícitamente el mapa completo bajo cada cuenta en lugar de depender de los valores predeterminados a nivel raíz.
Comportamiento importante:
channels.whatsapp.groupses tanto un mapa de configuración por grupo como la lista de permitidos de grupos a nivel de chat. En el ámbito raíz o de cuenta,groups["*"]significa "se admiten todos los grupos" para ese ámbito.- Añade un
systemPromptde grupo comodín solo cuando ya quieras que ese ámbito admita todos los grupos. Si aún quieres que solo sea apto un conjunto fijo de IDs de grupo, no usesgroups["*"]como valor predeterminado del prompt. En su lugar, repite el prompt en cada entrada de grupo incluida explícitamente en la lista de permitidos. - La admisión de grupos y la autorización de remitentes son comprobaciones separadas.
groups["*"]amplía el conjunto de grupos que pueden llegar al manejo de grupos, pero no autoriza por sí solo a todos los remitentes de esos grupos. El acceso de remitentes sigue controlándose por separado mediantechannels.whatsapp.groupPolicyychannels.whatsapp.groupAllowFrom. channels.whatsapp.directno tiene el mismo efecto secundario para los DM.direct["*"]solo proporciona una configuración predeterminada de chat directo después de que un DM ya haya sido admitido pordmPolicymásallowFromo por reglas del almacén de emparejamiento.
Ejemplo:
{
channels: {
whatsapp: {
groups: {
// Use only if all groups should be admitted at the root scope.
// Applies to all accounts that do not define their own groups map.
"*": { systemPrompt: "Default prompt for all groups." },
},
direct: {
// Applies to all accounts that do not define their own direct map.
"*": { systemPrompt: "Default prompt for all direct chats." },
},
accounts: {
work: {
groups: {
// This account defines its own groups, so root groups are fully
// replaced. To keep a wildcard, define "*" explicitly here too.
"[email protected]": {
requireMention: false,
systemPrompt: "Focus on project management.",
},
// Use only if all groups should be admitted in this account.
"*": { systemPrompt: "Default prompt for work groups." },
},
direct: {
// This account defines its own direct map, so root direct entries are
// fully replaced. To keep a wildcard, define "*" explicitly here too.
"+15551234567": { systemPrompt: "Prompt for a specific work direct chat." },
"*": { systemPrompt: "Default prompt for work direct chats." },
},
},
},
},
},
}
Punteros de referencia de configuración
Referencia principal:
Campos de alta señal de WhatsApp:
- acceso:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - entrega:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - multicuenta:
accounts.<id>.enabled,accounts.<id>.authDir, sobrescrituras a nivel de cuenta - operaciones:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.*,web.whatsapp.* - comportamiento de sesión:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit - prompts:
groups.<id>.systemPrompt,groups["*"].systemPrompt,direct.<id>.systemPrompt,direct["*"].systemPrompt