ZeroClaw admite dos backends de WhatsApp en la misma familia de configuración channels.whatsapp:
| Modo | Úsalo cuando | Selector requerido |
|---|---|---|
| WhatsApp Cloud API | Tienes una app de Meta Business y un ID de número de teléfono de WhatsApp Business | phone_number_id |
| WhatsApp Web | Deseas vincular una cuenta normal de WhatsApp mediante el protocolo Web | session_path |
No configure ambos selectores en el mismo canal a menos que quiera intencionadamente que el modo Cloud API prevalezca por compatibilidad con versiones anteriores.
Quién puede hablar con el agente
Los remitentes entrantes se filtran contra el conjunto de pares resuelto para el agente vinculado, obtenido de la configuración peer_groups a la que pertenece el agente. La coincidencia elimina el @ inicial y no distingue mayúsculas de minúsculas frente al identificador nativo de remitente del canal. Un conjunto vacío deniega a todos; un conjunto que contiene "*" acepta a cualquiera; en caso contrario, solo se aceptan los pares externos listados (y los agentes pares). Esto es independiente del emparejamiento de la puerta de enlace (gateway.require_pairing), que autentica clientes HTTP/WebSocket, no remitentes de canales de chat.
Un grupo de pares para whatsapp establece channel en whatsapp, enumera los remitentes permitidos en external_peers (para whatsapp, un identificador de teléfono (Cloud API) o la parte de usuario del JID (modo Web); ["*"] acepta a cualquiera), opcionalmente nombra agents pares para el despacho entre agentes, una lista de bloqueo ignore y un output_modality (mirror, voice o text). Consulta Peer Groups para la referencia de campos.
Dónde configurar esto:
Panel de control del gateway
Abra /config/peer_groups en el panel de control web.
zerocode
En el panel Config, en Peer groups.
Modo Cloud API
El modo Cloud API es la integración con Meta Business Platform. Requiere una cuenta de Meta Business, una aplicación de WhatsApp Business, un ID de número de teléfono, un token de verificación, un token de acceso y un secreto de aplicación. Es el modo adecuado para implementaciones empresariales que reciben mensajes a través de webhooks de Meta.
Los webhooks entrantes se verifican mediante firma con app_secret, y la verificación es obligatoria. Si no se configura ningún secreto de aplicación, la puerta de enlace no puede verificar una solicitud, por lo que responde con 401 y no procesa nada. Establece app_secret antes de configurar en Meta la URL de callback.
El gateway debe ser accesible por Meta para los webhooks entrantes. Configura un túnel en la sección de nivel superior [tunnel] (tunnel_provider y los bloques de proveedor relacionados, consulta la referencia de configuración), o coloca tu propio proxy inverso delante del gateway cuando desarrolles localmente.
Apunta la Callback URL de Meta al alias de la instancia [channels.whatsapp.<alias>] que debe recibirla: GET/POST https://<your-public-url>/whatsapp/<alias> (p. ej. [channels.whatsapp.work] → /whatsapp/work). Este enrutamiento por alias (#6312) permite ejecutar varios números de WhatsApp en paralelo. La ruta simple /whatsapp sigue funcionando, pero está obsoleta: se resuelve al primer alias en orden lexicográfico (determinista entre reinicios) y establece un encabezado de respuesta X-Zeroclaw-Deprecation. Un alias desconocido devuelve 404. Los despliegues de instancia única no requieren ningún cambio.
Modo web
El modo WhatsApp Web vincula una cuenta normal de WhatsApp a través del backend opcional Web. No necesita una cuenta de Meta Business. Sí necesita una compilación de ZeroClaw con la característica whatsapp-web habilitada y una ruta de base de datos de sesión persistente.
Al iniciarse por primera vez, el backend Web empareja la cuenta mediante vinculación por QR o por código de emparejamiento (pair_phone inicia la vinculación por código de emparejamiento; déjelo sin definir para usar QR). Mantenga session_path en almacenamiento persistente; eliminarlo fuerza una nueva vinculación del dispositivo. Vincule el canal a un agente a través de la lista channels de ese agente.
push_name establece el nombre para mostrar que ven los destinatarios; si no se establece, la cuenta conserva el nombre con el que se registró el teléfono. Se aplica al conectarse, solo cuando difiere del nombre que ya tiene el dispositivo vinculado, y si no se puede aplicar, se registra el error sin detener el canal. El modo Cloud API lo ignora; en ese caso, el nombre para mostrar procede del perfil de Meta Business.
La opción compartida interrupt_on_new_message se aplica tanto al modo Cloud API como al modo Web. Cuando está habilitada, un mensaje de WhatsApp más reciente del mismo remitente/chat cancela la respuesta en curso.
Comportamiento personal y empresarial
Para el modo Web, dm_policy y group_policy se aplican en ambos modos. self_chat_mode es solo personal:
| Campo | Valores | Se aplica en | Efecto |
|---|---|---|---|
dm_policy | allowlist, ignore, all | ambos modos | Controla los mensajes directos |
group_policy | allowlist, ignore, all | ambos modos | Controla los chats grupales |
self_chat_mode | true, false | solo para uso personal | Controla el chat consigo mismo del usuario |
mention_only | true, false | ambos modos | Requiere que los mensajes de grupo mencionen al bot |
passive_group_context | true, false | ambos modos | Registra los mensajes de grupo no dirigidos permitidos solo como contexto |
self_chat_mode se mantiene exclusivamente para uso personal porque la funcionalidad de chat propio está limitada a la rama personal por diseño. mode selecciona la postura de políticas de ZeroClaw, no un tipo de cuenta de WhatsApp: ambos modos utilizan la misma sesión de dispositivo vinculado.
La comprobación de fromMe también permanece dentro de la rama personal, pero no porque el modo empresarial carezca de un equivalente. El modo empresarial sigue siendo una sesión de dispositivo vinculado de WhatsApp Web, y WhatsApp replica los mensajes salientes del propio operador en los dispositivos vinculados como fromMe en cualquiera de los dos modos. La cuenta vinculada se conserva como un par autorizado, por lo que, en el modo empresarial, ese reflejo puede satisfacer la lista de permitidos y llegar al envío, que es el patrón que #6353 cerró para el modo personal. Ese comportamiento es anterior a este cambio y no se introduce aquí; se señala explícitamente en lugar de darse por descartado, y su corrección se sigue por separado.
Nota de compatibilidad para mode = "business"
El modo empresarial aceptaba anteriormente dm_policy y group_policy, pero nunca consultaba ninguno de los dos, por lo que un canal que se interpretaba como restrictivo respondía a todos los mensajes que recibía. Ahora ambas claves se aplican en el modo empresarial.
dm_policy tiene allowlist de forma predeterminada, por lo que una implementación en modo empresarial que dependiera del comportamiento permisivo anterior debe elegir una de las siguientes opciones:
- Sigue respondiendo a todos - establece
dm_policy = "all"ygroup_policy = "all"explícitamente. - Mantén la restricción: deja los valores predeterminados y asegúrate de que los remitentes a los que pretendes prestar servicio sean accesibles a través del grupo de pares del canal, mediante
[peer_groups.<name>].external_peers.
No esperes a que config validate te lo indique. En mode = "business" informa de que self_chat_mode está inerte y no dice nada sobre dm_policy ni group_policy, precisamente porque esas dos opciones ahora están activas en lugar de inertes. Por tanto, las claves cuyo comportamiento realmente ha cambiado para ti son las que el validador no mencionará. Lee esta sección antes de actualizar; ese es el único aviso que recibe un despliegue en modo empresarial.
passive_group_context = true es opcional y se aplica solo a los chats de grupo de WhatsApp Web. Los mensajes de grupo no dirigidos permitidos se almacenan en el historial de conversación con alcance de sala sin iniciar un turno del agente, enviar reacciones, descargar medios ni llamar al modelo. Más tarde, los mensajes dirigidos en el mismo grupo pueden usar ese contexto pasivo.
Restringiendo qué grupos (allowed_groups)
allowed_groups (modo web) limita el bot a un conjunto específico de chats grupales mediante JID. Es independiente de mode: se aplica tanto en el modo empresarial como en el personal, y se ejecuta antes de la política de tipo de chat. Una lista vacía no es un permiso: lo que significa lo decide group_policy. Con allowlist (el valor predeterminado) o ignore, una lista vacía no admite ningún grupo, mientras que con all admite todos los grupos. Una lista que admite todo no se puede distinguir de una lista que nadie configuró, por lo que el acceso abierto a grupos debe solicitarse explícitamente por nombre. Una lista no vacía descarta todos los mensajes de grupo cuyo JID de chat no coincida con ninguna entrada y sigue haciéndolo con cualquier política, incluida all, por lo que all amplía el valor predeterminado de la lista vacía en lugar de anular una lista explícita. Los mensajes directos siempre omiten este filtro.
Cada entrada coincide con el JID completo del grupo (123456789012345@g.us) o con la parte de usuario del JID: el segmento anterior a @ (123456789012345) — comparado exactamente, no como un prefijo de cadena (así 123 admite 123@g.us pero nunca 123999@g.us). Esto controla la identidad del grupo, que group_policy (tipo de chat) y la lista de अनुमति de remitentes (remitente) no controlan.
[channels.whatsapp.myaccount]
enabled = true
session_path = "/var/lib/zeroclaw/wa.db"
# Operar solo en estos dos grupos; todos los demás grupos se descartan.
allowed_groups = ["120363012345678901@g.us", "120363098765432109"]
Aprobación de herramientas mediante chat (approval_timeout_secs)
Cuando una herramienta necesita aprobación (está en always_ask o el perfil de riesgo no la aprueba automáticamente), el agente publica la solicitud en el chat del que provino el mensaje y espera una respuesta. Responde con el token de la indicación:
a1b2c3 yes
a1b2c3 no
a1b2c3 always
approval_timeout_secs limita esa espera. El valor predeterminado es de 300 segundos, y 0 deniega inmediatamente en lugar de deshabilitar la aprobación, por lo que cero sirve para rechazar todas las herramientas sujetas a aprobación, no para esperar indefinidamente. Cuando se agota el tiempo de espera, la solicitud se deniega y el token se descarta, por lo que una respuesta tardía no puede aprobar una llamada que ya no tiene a nadie esperando.
Quién puede responder. El token es un correlacionador, no una contraseña: viaja en texto plano al chat, por lo que en un grupo todos los miembros pueden leerlo.
Los dos modos difieren, y la diferencia es un límite de seguridad, no un detalle de implementación.
En el modo Web, una respuesta solo se acepta cuando procede del mismo chat en el que se publicó la solicitud y de un interlocutor del que este alias está autorizado a recibir instrucciones. Una respuesta que no supera cualquiera de las dos comprobaciones se registra y se ignora, y la solicitud permanece abierta para que el operador aún pueda responderla. En un grupo, la solicitud lo indica, porque, de lo contrario, no hay forma de saber por qué la respuesta de un espectador no hizo nada.
Los pares autorizados son los que el resolvedor canónico devuelve para este alias, es decir, el grupo de pares cuyo channel apunta a él:
[peer_groups.whatsapp_default]
channel = "whatsapp.personal" # solo este alias; "whatsapp" sin comillas cubre todos los alias
external_peers = ["+15550100"]
No hay ningún campo allowed_numbers que configurar. Ese era el nombre en v2, y la migración lo incorpora a un grupo de pares como el anterior, por lo que una configuración de v2 sigue funcionando y una configuración de v3 no tiene dónde colocar la clave antigua.
Consulta Grupos de pares para ver la lista completa de campos y el formato del identificador con el que se compara cada canal.
En modo Cloud API, no se aplica ninguna de las dos comprobaciones. Su entrada pendiente es un respondedor sin más, identificado por el token, sin registrar junto a ella ningún chat ni identidad, por lo que el webhook considera que poseer el token otorga autoridad. En un grupo, eso significa que cualquier miembro que pueda leer la solicitud puede responderla, incluso desde otro chat. Hasta que se refuerce esa ruta, una aprobación en modo Cloud solo demuestra que alguien poseía el token y nada más. No autentica ni el chat ni al respondedor, así que prefiere el modo Web siempre que cualquiera de los dos sea importante.
Superficies de configuración
access_token 🔑
Token de acceso de Meta Business Suite (modo Cloud API)
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.access_token.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.access_token.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.access_token # entrada enmascarada, almacenada cifrada
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__access_token=
allowed_groups
Chats grupales permitidos por JID (modo web). Una lista vacía (la predeterminada) NO admite ningún grupo salvo que group_policy = "all", que admite todos los grupos; una lista no vacía descarta todos los mensajes de grupo cuyo JID de chat no coincida con ninguna entrada. Cada entrada coincide con el JID de grupo completo (123456789012345@g.us) o con la parte de usuario del JID —el segmento anterior a @ (123456789012345)— mediante una comparación exacta, no como prefijo de cadena. Los mensajes directos omiten este filtro independientemente del contenido de la lista. Basado en el canal Matrix allowed_rooms; filtra la identidad del grupo, algo que dm_policy/group_policy (tipo de chat) y la lista de remitentes permitidos (remitente) no hacen.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/channels/whatsapp y establezca el campo channels.whatsapp.<alias>.allowed_groups.
zerocode
En el panel de Config, establece el campo channels.whatsapp.<alias>.allowed_groups.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.allowed_groups <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__allowed_groups=
app_secret 🔑
Secreto de la aplicación de Meta Business Suite (para la verificación de la firma del webhook). También se puede establecer mediante la sobrescritura genérica de la variable de entorno cualificada por alias: ZEROCLAW_channels__whatsapp__<alias>__app_secret. Solo se usa en el modo Cloud API. Es necesario para recibir webhooks. Las solicitudes entrantes se verifican mediante su firma y, si no hay ningún secreto configurado, la puerta de enlace no puede verificarlas, por lo que las rechaza con 401 en lugar de aceptarlas sin verificar.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y establece el campo channels.whatsapp.<alias>.app_secret.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.app_secret.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.app_secret # entrada enmascarada, almacenada cifrada
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__app_secret=
approval_timeout_secs
Segundos de espera para la aprobación del operador en las herramientas always_ask antes de denegar automáticamente.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.approval_timeout_secs.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.approval_timeout_secs.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.approval_timeout_secs <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__approval_timeout_secs=
dm_mention_patterns
Patrones regex para el filtrado de menciones en DM (sin distinción entre mayúsculas y minúsculas). Cuando no está vacío, solo se procesan los mensajes directos que coinciden con al menos un patrón; los fragmentos coincidentes se eliminan del contenido reenviado. Ejemplo: ["@?ZeroClaw", "\\+?15555550123"]
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.dm_mention_patterns.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.dm_mention_patterns.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.dm_mention_patterns <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__dm_mention_patterns=
dm_policy
Política para los mensajes directos, aplicada en ambos modos. “allowlist” (predeterminado) | “ignore” | “all”.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.dm_policy.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.dm_policy.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.dm_policy <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__dm_policy=
excluded_tools
Herramientas excluidas de la especificación de herramientas de este canal. Cuando se establece, estas herramientas no se exponen al modelo al responder a través de este canal.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.excluded_tools.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.excluded_tools.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.excluded_tools <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__excluded_tools=
group_mention_patterns
Patrones de expresiones regulares para el filtrado de menciones en chats grupales (sin distinción entre mayúsculas y minúsculas). Cuando no está vacío, solo se procesan los mensajes grupales que coincidan con al menos un patrón; los fragmentos coincidentes se eliminan del contenido reenviado. Ejemplo: ["@?ZeroClaw", "\\+?15555550123"]
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.group_mention_patterns.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.group_mention_patterns.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.group_mention_patterns <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__group_mention_patterns=
group_policy
Política para chats grupales, aplicada en ambos modos. “allowlist” (predeterminado) | “ignore” | “all”.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.group_policy.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.group_policy.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.group_policy <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__group_policy=
interrupt_on_new_message
Cancela una respuesta en curso de este remitente de canal cuando llega un mensaje más reciente de WhatsApp. Predeterminado: false.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.interrupt_on_new_message.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.interrupt_on_new_message.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.interrupt_on_new_message <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__interrupt_on_new_message=
mention_only
Cuando es true, solo responde a mensajes que mencionen al bot con @ en grupos (solo modo Web). Los mensajes directos siempre se procesan. La identidad del bot se resuelve desde el dispositivo wa-rs en tiempo de ejecución; pair_phone la inicializa en la primera conexión.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.mention_only.
zerocode
En el panel Config, configura el campo channels.whatsapp.<alias>.mention_only.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.mention_only <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__mention_only=
mode
Modo de uso de WhatsApp Web: “business” (predeterminado) o “personal”. dm_policy y group_policy se aplican en AMBOS modos. El modo personal aplica además self_chat_mode y el manejo de fromMe; ambos están limitados a la rama personal por diseño, no por ninguna diferencia de protocolo entre los dos modos.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.mode.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.mode.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.mode <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__mode=
pair_code
Código de emparejamiento personalizado para la vinculación (modo Web, opcional). Déjelo vacío para que WhatsApp genere uno
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.pair_code.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.pair_code.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.pair_code <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__pair_code=
pair_phone
Número de teléfono para vinculación por código de emparejamiento (modo Web, opcional) Formato: código de país + número (p. ej., “15551234567”) Si no se establece, se usará el emparejamiento por código QR
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.pair_phone.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.pair_phone.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.pair_phone <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__pair_phone=
passive_group_context
Cuando es true en los chats de grupo de WhatsApp Web, los mensajes no dirigidos que superan la autorización del remitente/chat se registran como contexto pasivo de la conversación sin iniciar un turno del agente. Predeterminado: false.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/channels/whatsapp y establezca el campo channels.whatsapp.<alias>.passive_group_context.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.passive_group_context.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.passive_group_context <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__passive_group_context=
phone_number_id
ID del número de teléfono de Meta Business API (modo Cloud API)
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.phone_number_id.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.phone_number_id.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.phone_number_id <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__phone_number_id=
proxy_url
URL de proxy por canal (http, https, socks5, socks5h). Anula la configuración global [proxy] solo para este canal.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.proxy_url.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.proxy_url.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.proxy_url <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__proxy_url=
push_name
Nombre para mostrar anunciado a los contactos (modo web, opcional) Se aplica al conectarse cuando difiere del nombre que ya tiene el dispositivo vinculado; déjalo sin establecer para conservar el nombre propio de la cuenta
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/channels/whatsapp y establezca el campo channels.whatsapp.<alias>.push_name.
zerocode
En el panel Config, configura el campo channels.whatsapp.<alias>.push_name.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.push_name <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__push_name=
reply_min_interval_secs
Límite mínimo de ritmo de salida por (canal, destinatario) en segundos. Rango: 0..=REPLY_MIN_INTERVAL_MAX_SECS (0 lo desactiva).
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/channels/whatsapp y configure el campo channels.whatsapp.<alias>.reply_min_interval_secs.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.reply_min_interval_secs.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.reply_min_interval_secs <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__reply_min_interval_secs=
reply_queue_depth_max
Profundidad de la cola de regulación de salida por (canal, destinatario). Rango: 0..=REPLY_QUEUE_DEPTH_CEILING. Cuando reply_min_interval_secs > 0 y este valor es 0, el envoltorio de regulación sustituye DEFAULT_REPLY_QUEUE_DEPTH (16). Cuando la cola está llena, se descarta el envío más reciente y se registra un WARN.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.reply_queue_depth_max.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.reply_queue_depth_max.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.reply_queue_depth_max <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__reply_queue_depth_max=
self_chat_mode
Cuando es true y mode = “personal”, siempre responde a los mensajes en el chat personal del propio usuario (Notes to Self). El valor predeterminado es false.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.self_chat_mode.
zerocode
En el panel Config, configura el campo channels.whatsapp.<alias>.self_chat_mode.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.self_chat_mode <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__self_chat_mode=
session_path
Ruta de la base de datos de sesión para el cliente de WhatsApp Web (modo Web). Cuando se establece, habilita el modo nativo de WhatsApp Web con wa-rs
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.session_path.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.session_path.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.session_path <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__session_path=
verify_token 🔑
Token de verificación del webhook (tú lo defines, Meta lo devuelve para la verificación) Solo se usa en modo Cloud API
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.verify_token.
zerocode
En el panel Config, establece el campo channels.whatsapp.<alias>.verify_token.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.verify_token # entrada enmascarada, almacenada cifrada
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__verify_token=
ws_url
Anula la URL del WebSocket de WhatsApp Web (modo Web, opcional). Se utiliza en pruebas de integración y configuraciones de proxy; déjala sin definir para usar el endpoint predeterminado incluido con wa-rs.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/channels/whatsapp y configura el campo channels.whatsapp.<alias>.ws_url.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.ws_url.
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.ws_url <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_channels__whatsapp__<alias>__ws_url=
Panel de control del gateway
Abre /config/channels/whatsapp en el panel de control web.
zerocode
En el panel Config, en Channels.
channels.whatsapp.<alias>.access_tokenes un secreto. Se almacena cifrado, nunca en texto plano enconfig.toml. Configúralo mediante una de estas opciones, que cifran al escribir:
Panel de control del gateway
Abre /config/channels/whatsapp y configura allí el campo channels.whatsapp.<alias>.access_token.
zerocode
En el panel Config, configure el campo channels.whatsapp.<alias>.access_token (la entrada está enmascarada).
zeroclaw config
zeroclaw config set channels.whatsapp.<alias>.access_token # solicita entrada enmascarada, almacena cifrado
Lo mismo aplica para verify_token y app_secret (Cloud API).
Iniciar y comprobar
Tras configurar un modo, inicia el ejecutor de canales:
sh
zeroclaw channel start
Use zeroclaw channel doctor para una primera comprobación. Para el modo Web, confirma también que el binario se compiló con whatsapp-web; para el modo Cloud API, confirma que el túnel del webhook y el token de verificación de Meta coinciden.