Mainstream messaging
Status: pronto para produção via WhatsApp Web (Baileys). O Gateway gerencia a(s) sessão(ões) vinculada(s).
Instalação (sob demanda)
- O onboarding (
openclaw onboard) eopenclaw channels add --channel whatsappsolicitam a instalação do plugin do WhatsApp na primeira vez que você o seleciona. openclaw channels login --channel whatsapptambém oferece o fluxo de instalação quando o plugin ainda não está presente.- Canal de desenvolvimento + checkout git: usa por padrão o caminho do plugin local.
- Estável/Beta: usa o pacote npm
@openclaw/whatsappna tag de lançamento oficial atual.
A instalação manual continua disponível:
openclaw plugins install @openclaw/whatsapp
Use o pacote sem versão para acompanhar a tag de lançamento oficial atual. Fixe uma versão exata somente quando precisar de uma instalação reproduzível.
No Windows, o plugin do WhatsApp precisa do Git no PATH durante a instalação npm porque
uma de suas dependências Baileys/libsignal é obtida de uma URL git. Instale o
Git for Windows, depois reinicie o shell e execute novamente a instalação:
winget install --id Git.Git -e
O Portable Git também funciona se seu diretório bin estiver no PATH.
A política padrão de DM é pareamento para remetentes desconhecidos.
Diagnósticos entre canais e playbooks de reparo.
Padrões e exemplos completos de configuração de canais.
Configuração rápida
Configurar a política de acesso do WhatsApp
{
channels: {
whatsapp: {
dmPolicy: "pairing",
allowFrom: ["+15551234567"],
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
},
},
}
Vincular o WhatsApp (QR)
openclaw channels login --channel whatsapp
Para uma conta específica:
openclaw channels login --channel whatsapp --account work
Para anexar um diretório de autenticação existente/personalizado do WhatsApp Web antes do login:
openclaw channels add --channel whatsapp --account work --auth-dir /path/to/wa-auth
openclaw channels login --channel whatsapp --account work
Iniciar o gateway
openclaw gateway
Aprovar a primeira solicitação de pareamento (se estiver usando o modo de pareamento)
openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
As solicitações de pareamento expiram após 1 hora. Solicitações pendentes são limitadas a 3 por canal.
Padrões de implantação
Número dedicado (recomendado)
Este é o modo operacional mais limpo:
- identidade do WhatsApp separada para a OpenClaw
- listas de permissão de DM e limites de roteamento mais claros
- menor chance de confusão com conversa consigo mesmo
Padrão mínimo de política:
{
channels: {
whatsapp: {
dmPolicy: "allowlist",
allowFrom: ["+15551234567"],
},
},
}
Fallback de número pessoal
O onboarding é compatível com o modo de número pessoal e grava uma base amigável para conversa consigo mesmo:
dmPolicy: "allowlist"allowFrominclui seu número pessoalselfChatMode: true
Em runtime, as proteções de conversa consigo mesmo usam como chave o número próprio vinculado e allowFrom.
Escopo do canal somente WhatsApp Web
O canal da plataforma de mensagens é baseado no WhatsApp Web (Baileys) na arquitetura atual de canais da OpenClaw.
Não há um canal separado de mensagens WhatsApp via Twilio no registro integrado de canais de chat.
Modelo de runtime
- O Gateway gerencia o socket do WhatsApp e o loop de reconexão.
- O watchdog de reconexão usa a atividade de transporte do WhatsApp Web, não apenas o volume de mensagens de aplicativo recebidas, portanto uma sessão silenciosa de dispositivo vinculado não é reiniciada apenas porque ninguém enviou uma mensagem recentemente. Um limite maior de silêncio de aplicação ainda força uma reconexão se frames de transporte continuarem chegando, mas nenhuma mensagem de aplicação for processada durante a janela do watchdog; após uma reconexão transitória para uma sessão recentemente ativa, essa verificação de silêncio de aplicação usa o timeout normal de mensagens para a primeira janela de recuperação.
- Os tempos do socket Baileys são explícitos em
web.whatsapp.*:keepAliveIntervalMscontrola pings de aplicação do WhatsApp Web,connectTimeoutMscontrola o timeout do handshake de abertura, edefaultQueryTimeoutMscontrola timeouts de consultas do Baileys. - Envios de saída exigem um listener ativo do WhatsApp para a conta de destino.
- Envios em grupo anexam metadados nativos de menção para tokens
@+<digits>e@<digits>em texto e legendas de mídia quando o token corresponde aos metadados atuais de participantes do WhatsApp, incluindo grupos apoiados por LID. - Chats de status e broadcast são ignorados (
@status,@broadcast). - O watchdog de reconexão acompanha a atividade de transporte do WhatsApp Web, não apenas o volume de mensagens de aplicativo recebidas: sessões silenciosas de dispositivo vinculado permanecem ativas enquanto frames de transporte continuam, mas uma interrupção de transporte força reconexão bem antes do caminho posterior de desconexão remota.
- Chats diretos usam regras de sessão de DM (
session.dmScope; o padrãomainconsolida DMs na sessão principal do agente). - Sessões de grupo são isoladas (
agent:<agentId>:whatsapp:group:<jid>). - Canais/Newsletters do WhatsApp podem ser destinos explícitos de saída com seu JID nativo
@newsletter. Envios de newsletter de saída usam metadados de sessão de canal (agent:<agentId>:whatsapp:channel:<jid>) em vez da semântica de sessão de DM. - O transporte do WhatsApp Web respeita variáveis de ambiente padrão de proxy no host do gateway (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ variantes em minúsculas). Prefira configuração de proxy em nível de host em vez de configurações de proxy específicas do canal WhatsApp. - Quando
messages.removeAckAfterReplyestá ativado, a OpenClaw limpa a reação de confirmação do WhatsApp após uma resposta visível ser entregue.
Hooks de plugin e privacidade
Mensagens recebidas do WhatsApp podem conter conteúdo pessoal de mensagens, números de telefone,
identificadores de grupo, nomes de remetentes e campos de correlação de sessão. Por esse motivo,
o WhatsApp não transmite payloads de hook message_received recebidos para plugins
a menos que você aceite explicitamente:
{
channels: {
whatsapp: {
pluginHooks: {
messageReceived: true,
},
},
},
}
Você pode limitar a aceitação a uma conta:
{
channels: {
whatsapp: {
accounts: {
work: {
pluginHooks: {
messageReceived: true,
},
},
},
},
},
}
Ative isso apenas para plugins nos quais você confia para receber conteúdo e identificadores de mensagens recebidas do WhatsApp.
Controle de acesso e ativação
Política de DM
channels.whatsapp.dmPolicy controla o acesso a chats diretos:
pairing(padrão)allowlistopen(exige queallowFrominclua"*")disabled
allowFrom aceita números no estilo E.164 (normalizados internamente).
allowFrom é uma lista de controle de acesso de remetentes de DM. Ela não bloqueia envios explícitos de saída para JIDs de grupos do WhatsApp ou JIDs de canais @newsletter.
Sobrescrita multi-conta: channels.whatsapp.accounts.<id>.dmPolicy (e allowFrom) têm precedência sobre os padrões em nível de canal para essa conta.
Detalhes de comportamento em runtime:
- pareamentos são persistidos no armazenamento de permissões do canal e mesclados com
allowFromconfigurado - automação agendada e fallback de destinatário de Heartbeat usam destinos explícitos de entrega ou
allowFromconfigurado; aprovações de pareamento de DM não são destinatários implícitos de Cron ou Heartbeat - se nenhuma lista de permissão estiver configurada, o número próprio vinculado é permitido por padrão
- a OpenClaw nunca faz pareamento automático de DMs de saída
fromMe(mensagens que você envia para si mesmo a partir do dispositivo vinculado)
Política de grupos + listas de permissão
O acesso a grupos tem duas camadas:
-
Lista de permissão de participação em grupos (
channels.whatsapp.groups)- se
groupsfor omitido, todos os grupos são elegíveis - se
groupsestiver presente, atua como uma lista de permissão de grupos ("*"permitido)
- se
-
Política de remetentes de grupo (
channels.whatsapp.groupPolicy+groupAllowFrom)open: lista de permissão de remetentes ignoradaallowlist: o remetente deve corresponder agroupAllowFrom(ou*)disabled: bloqueia todas as entradas de grupos
Fallback da lista de permissão de remetentes:
- se
groupAllowFromnão estiver definido, o runtime recorre aallowFromquando disponível - listas de permissão de remetentes são avaliadas antes da ativação por menção/resposta
Observação: se nenhum bloco channels.whatsapp existir, o fallback de política de grupo em runtime é allowlist (com um log de aviso), mesmo se channels.defaults.groupPolicy estiver definido.
Menções + /activation
Respostas em grupo exigem menção por padrão.
A detecção de menção inclui:
- menções explícitas do WhatsApp à identidade do bot
- padrões regex de menção configurados (
agents.list[].groupChat.mentionPatterns, fallbackmessages.groupChat.mentionPatterns) - transcrições de notas de voz recebidas para mensagens de grupo autorizadas
- detecção implícita de resposta ao bot (remetente da resposta corresponde à identidade do bot)
Nota de segurança:
- citação/resposta apenas satisfaz o bloqueio por menção; ela não concede autorização ao remetente
- com
groupPolicy: "allowlist", remetentes fora da lista de permissão continuam bloqueados mesmo que respondam à mensagem de um usuário na lista de permissão
Comando de ativação em nível de sessão:
/activation mention/activation always
activation atualiza o estado da sessão (não a configuração global). Ele é restrito ao proprietário.
Comportamento de número pessoal e conversa consigo mesmo
Quando o número próprio vinculado também está presente em allowFrom, as proteções de conversa consigo mesmo do WhatsApp são ativadas:
- ignorar recibos de leitura para turnos de conversa consigo mesmo
- ignorar comportamento de acionamento automático por JID de menção que, caso contrário, faria ping em você mesmo
- se
messages.responsePrefixnão estiver definido, respostas de conversa consigo mesmo usam por padrão[{identity.name}]ou[openclaw]
Normalização de mensagens e contexto
Envelope de entrada + contexto de resposta
Mensagens recebidas do WhatsApp são encapsuladas no envelope de entrada compartilhado.
Se existir uma resposta citada, o contexto é anexado nesta forma:
[Replying to <sender> id:<stanzaId>]
<quoted body or media placeholder>
[/Replying]
Campos de metadados de resposta também são preenchidos quando disponíveis (ReplyToId, ReplyToBody, ReplyToSender, JID/E.164 do remetente).
Quando o destino da resposta citada é mídia baixável, a OpenClaw a salva pelo
armazenamento normal de mídia recebida e a expõe como MediaPath/MediaType para que
o agente possa inspecionar a imagem referenciada em vez de ver apenas
<media:image>.
Placeholders de mídia e extração de localização/contato
Mensagens recebidas somente com mídia são normalizadas com placeholders como:
<media:image><media:video><media:audio><media:document><media:sticker>
Notas de voz de grupos autorizados são transcritas antes do bloqueio por menção quando o
corpo é apenas <media:audio>, então dizer a menção do bot na nota de voz pode
acionar a resposta. Se a transcrição ainda não mencionar o bot, a
transcrição é mantida no histórico pendente do grupo em vez do placeholder bruto.
Corpos de localização usam texto conciso de coordenadas. Rótulos/comentários de localização e detalhes de contato/vCard são renderizados como metadados não confiáveis em bloco delimitado, não como texto inline de prompt.
Injeção de histórico pendente de grupo
Para grupos, mensagens não processadas podem ser armazenadas em buffer e injetadas como contexto quando o bot finalmente for acionado.
- limite padrão:
50 - config:
channels.whatsapp.historyLimit - fallback:
messages.groupChat.historyLimit 0desativa
Marcadores de injeção:
[Chat messages since your last reply - for context][Current message - respond to this]
Read receipts
As confirmações de leitura são ativadas por padrão para mensagens recebidas aceitas do WhatsApp.
Desativar globalmente:
{
channels: {
whatsapp: {
sendReadReceipts: false,
},
},
}
Substituição por conta:
{
channels: {
whatsapp: {
accounts: {
work: {
sendReadReceipts: false,
},
},
},
},
}
Turnos de conversa consigo mesmo ignoram confirmações de leitura, mesmo quando ativadas globalmente.
Entrega, fragmentação e mídia
Text chunking
- limite padrão de fragmento:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- o modo
newlineprefere limites de parágrafo (linhas em branco) e, em seguida, recorre à fragmentação segura por comprimento
Outbound media behavior
- oferece suporte a payloads de imagem, vídeo, áudio (nota de voz PTT) e documento
- mídia de áudio é enviada pelo payload
audiodo Baileys comptt: true, então os clientes do WhatsApp a renderizam como uma nota de voz push-to-talk - payloads de resposta preservam
audioAsVoice; a saída de nota de voz TTS para WhatsApp permanece nesse caminho PTT mesmo quando o provedor retorna MP3 ou WebM - áudio Ogg/Opus nativo é enviado como
audio/ogg; codecs=opuspara compatibilidade com notas de voz - áudio não Ogg, incluindo saída MP3/WebM do Microsoft Edge TTS, é transcodificado com
ffmpegpara Ogg/Opus mono de 48 kHz antes da entrega PTT /tts latestenvia a resposta mais recente do assistente como uma nota de voz e suprime envios repetidos para a mesma resposta;/tts chat on|off|defaultcontrola o TTS automático para a conversa atual do WhatsApp- reprodução de GIF animado é compatível via
gifPlayback: trueem envios de vídeo - legendas são aplicadas ao primeiro item de mídia ao enviar payloads de resposta com várias mídias, exceto notas de voz PTT, que enviam o áudio primeiro e o texto visível separadamente porque os clientes do WhatsApp não renderizam legendas de notas de voz de forma consistente
- a origem da mídia pode ser HTTP(S),
file://ou caminhos locais
Media size limits and fallback behavior
- limite de salvamento de mídia recebida:
channels.whatsapp.mediaMaxMb(padrão50) - limite de envio de mídia de saída:
channels.whatsapp.mediaMaxMb(padrão50) - substituições por conta usam
channels.whatsapp.accounts.<accountId>.mediaMaxMb - imagens são otimizadas automaticamente (redimensionamento/varredura de qualidade) para caber nos limites
- em caso de falha no envio de mídia, o fallback do primeiro item envia um aviso em texto em vez de descartar a resposta silenciosamente
Citação de resposta
O WhatsApp oferece suporte à citação nativa de respostas, em que respostas de saída citam visivelmente a mensagem recebida. Controle isso com channels.whatsapp.replyToMode.
| Valor | Comportamento |
|---|---|
"off" |
Nunca citar; enviar como uma mensagem simples |
"first" |
Citar apenas o primeiro fragmento da resposta de saída |
"all" |
Citar todos os fragmentos da resposta de saída |
"batched" |
Citar respostas em lote enfileiradas, deixando respostas imediatas sem citação |
O padrão é "off". Substituições por conta usam channels.whatsapp.accounts.<id>.replyToMode.
{
channels: {
whatsapp: {
replyToMode: "first",
},
},
}
Nível de reação
channels.whatsapp.reactionLevel controla quão amplamente o agente usa reações com emoji no WhatsApp:
| Nível | Reações de confirmação | Reações iniciadas pelo agente | Descrição |
|---|---|---|---|
"off" |
Não | Não | Nenhuma reação |
"ack" |
Sim | Não | Apenas reações de confirmação (recebimento antes da resposta) |
"minimal" |
Sim | Sim (conservador) | Confirmação + reações do agente com orientação conservadora |
"extensive" |
Sim | Sim (incentivado) | Confirmação + reações do agente com orientação incentivada |
Padrão: "minimal".
Substituições por conta usam channels.whatsapp.accounts.<id>.reactionLevel.
{
channels: {
whatsapp: {
reactionLevel: "ack",
},
},
}
Reações de confirmação
O WhatsApp oferece suporte a reações de confirmação imediatas no recebimento de entrada via channels.whatsapp.ackReaction.
Reações de confirmação são controladas por reactionLevel — elas são suprimidas quando reactionLevel é "off".
{
channels: {
whatsapp: {
ackReaction: {
emoji: "👀",
direct: true,
group: "mentions", // always | mentions | never
},
},
},
}
Notas de comportamento:
- enviadas imediatamente depois que a entrada é aceita (antes da resposta)
- falhas são registradas, mas não bloqueiam a entrega normal da resposta
- o modo de grupo
mentionsreage em turnos acionados por menção; a ativação de grupoalwaysatua como desvio para essa verificação - WhatsApp usa
channels.whatsapp.ackReaction(o legadomessages.ackReactionnão é usado aqui)
Múltiplas contas e credenciais
Account selection and defaults
- ids de conta vêm de
channels.whatsapp.accounts - seleção de conta padrão:
defaultse presente; caso contrário, o primeiro id de conta configurado (ordenado) - ids de conta são normalizados internamente para consulta
Credential paths and legacy compatibility
- caminho de autenticação atual:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - arquivo de backup:
creds.json.bak - autenticação padrão legada em
~/.openclaw/credentials/ainda é reconhecida/migrada para fluxos de conta padrão
Logout behavior
openclaw channels logout --channel whatsapp [--account <id>] limpa o estado de autenticação do WhatsApp para essa conta.
Quando um Gateway está acessível, o logout primeiro interrompe o listener ativo do WhatsApp para a conta selecionada, para que a sessão vinculada não continue recebendo mensagens até a próxima reinicialização. openclaw channels remove --channel whatsapp também interrompe o listener ativo antes de desativar ou excluir a configuração da conta.
Em diretórios de autenticação legados, oauth.json é preservado enquanto os arquivos de autenticação do Baileys são removidos.
Ferramentas, ações e gravações de configuração
- O suporte a ferramentas do agente inclui a ação de reação do WhatsApp (
react). - Portões de ação:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Gravações de configuração iniciadas pelo canal são ativadas por padrão (desative via
channels.whatsapp.configWrites=false).
Solução de problemas
Not linked (QR required)
Sintoma: o status do canal informa que não está vinculado.
Correção:
openclaw channels login --channel whatsapp
openclaw channels status
Linked but disconnected / reconnect loop
Sintoma: conta vinculada com desconexões repetidas ou tentativas de reconexão.
Contas silenciosas podem permanecer conectadas além do tempo limite normal de mensagens; o watchdog reinicia quando a atividade de transporte do WhatsApp Web para, o socket fecha ou a atividade no nível da aplicação permanece silenciosa além da janela de segurança mais longa.
Se os logs mostrarem status=408 Request Time-out Connection was lost repetido, ajuste
os tempos de socket do Baileys em web.whatsapp. Comece encurtando
keepAliveIntervalMs para abaixo do tempo limite de inatividade da sua rede e aumentando
connectTimeoutMs em links lentos ou com perda:
{
web: {
whatsapp: {
keepAliveIntervalMs: 15000,
connectTimeoutMs: 60000,
defaultQueryTimeoutMs: 60000,
},
},
}
Correção:
openclaw doctor
openclaw logs --follow
Se ~/.openclaw/logs/whatsapp-health.log disser Gateway inactive, mas
openclaw gateway status e openclaw channels status --probe mostrarem que o
Gateway e o WhatsApp estão saudáveis, execute openclaw doctor. No Linux, o doctor
avisa sobre entradas de crontab legadas que ainda invocam
~/.openclaw/bin/ensure-whatsapp.sh; remova essas entradas obsoletas com
crontab -e, porque o cron pode não ter o ambiente de barramento de usuário do systemd e
fazer esse script antigo informar incorretamente a integridade do Gateway.
Se necessário, vincule novamente com channels login.
QR login times out behind a proxy
Sintoma: openclaw channels login --channel whatsapp falha antes de mostrar um código QR utilizável com status=408 Request Time-out ou uma desconexão de socket TLS.
O login do WhatsApp Web usa o ambiente de proxy padrão do host do Gateway (HTTPS_PROXY, HTTP_PROXY, variantes em minúsculas e NO_PROXY). Verifique se o processo do Gateway herda o ambiente de proxy e se NO_PROXY não corresponde a mmg.whatsapp.net.
No active listener when sending
Envios de saída falham rapidamente quando não existe um listener ativo do Gateway para a conta de destino.
Certifique-se de que o Gateway está em execução e que a conta está vinculada.
Reply appears in transcript but not in WhatsApp
Linhas da transcrição registram o que o agente gerou. A entrega do WhatsApp é verificada separadamente: o OpenClaw só trata uma resposta automática como enviada depois que o Baileys retorna um id de mensagem de saída para pelo menos um envio visível de texto ou mídia.
Reações de confirmação são recebimentos independentes antes da resposta. Uma reação bem-sucedida não prova que a resposta posterior de texto ou mídia foi aceita pelo WhatsApp.
Verifique os logs do Gateway por auto-reply delivery failed ou auto-reply was not accepted by WhatsApp provider.
Group messages unexpectedly ignored
Verifique nesta ordem:
groupPolicygroupAllowFrom/allowFrom- entradas de lista de permissões de
groups - controle por menção (
requireMention+ padrões de menção) - chaves duplicadas em
openclaw.json(JSON5): entradas posteriores substituem as anteriores, então mantenha um únicogroupPolicypor escopo
Bun runtime warning
O runtime do Gateway do WhatsApp deve usar Node. Bun é sinalizado como incompatível para operação estável do Gateway do WhatsApp/Telegram.
Prompts do sistema
O WhatsApp oferece suporte a prompts do sistema no estilo Telegram para grupos e conversas diretas via mapas groups e direct.
Hierarquia de resolução para mensagens de grupo:
O mapa groups efetivo é determinado primeiro: se a conta definir seus próprios groups, ele substitui totalmente o mapa groups raiz (sem mesclagem profunda). A consulta de prompt então é executada no mapa único resultante:
- Prompt do sistema específico do grupo (
groups["<groupId>"].systemPrompt): usado quando a entrada do grupo específico existe no mapa e sua chavesystemPromptestá definida. SesystemPromptfor uma string vazia (""), o curinga é suprimido e nenhum prompt do sistema é aplicado. - Prompt do sistema curinga de grupo (
groups["*"].systemPrompt): usado quando a entrada do grupo específico está totalmente ausente do mapa ou quando ela existe, mas não define uma chavesystemPrompt.
Hierarquia de resolução para mensagens diretas:
O mapa direct efetivo é determinado primeiro: se a conta definir seu próprio direct, ele substitui totalmente o mapa direct raiz (sem mesclagem profunda). A consulta de prompt então é executada no mapa único resultante:
- Prompt de sistema específico de direct (
direct["<peerId>"].systemPrompt): usado quando a entrada do par específico existe no mapa e sua chavesystemPromptestá definida. SesystemPromptfor uma string vazia (""), o curinga será suprimido e nenhum prompt de sistema será aplicado. - Prompt de sistema curinga de direct (
direct["*"].systemPrompt): usado quando a entrada do par específico está totalmente ausente do mapa, ou quando ela existe, mas não define nenhuma chavesystemPrompt.
Diferença em relação ao comportamento multi-account do Telegram: No Telegram, groups na raiz é intencionalmente suprimido para todas as contas em uma configuração multi-account — mesmo contas que não definem groups próprias — para impedir que um bot receba mensagens de grupos aos quais ele não pertence. O WhatsApp não aplica essa proteção: groups na raiz e direct na raiz são sempre herdados por contas que não definem uma substituição no nível da conta, independentemente de quantas contas estejam configuradas. Em uma configuração multi-account do WhatsApp, se você quiser prompts de grupo ou direct por conta, defina o mapa completo explicitamente em cada conta em vez de depender dos padrões no nível da raiz.
Comportamento importante:
channels.whatsapp.groupsé ao mesmo tempo um mapa de configuração por grupo e a allowlist de grupos no nível do chat. No escopo raiz ou no escopo da conta,groups["*"]significa "todos os grupos são admitidos" para esse escopo.- Adicione um
systemPromptde grupo curinga somente quando você já quiser que esse escopo admita todos os grupos. Se você ainda quiser que apenas um conjunto fixo de IDs de grupo seja elegível, não usegroups["*"]como padrão de prompt. Em vez disso, repita o prompt em cada entrada de grupo explicitamente permitida. - A admissão de grupos e a autorização de remetentes são verificações separadas.
groups["*"]amplia o conjunto de grupos que podem chegar ao tratamento de grupos, mas por si só não autoriza todos os remetentes nesses grupos. O acesso do remetente ainda é controlado separadamente porchannels.whatsapp.groupPolicyechannels.whatsapp.groupAllowFrom. channels.whatsapp.directnão tem o mesmo efeito colateral para DMs.direct["*"]fornece apenas uma configuração padrão de chat direct depois que uma DM já foi admitida pordmPolicymaisallowFromou regras do armazenamento de pareamento.
Exemplo:
{
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." },
},
},
},
},
},
}
Ponteiros da referência de configuração
Referência principal:
Campos do WhatsApp de alto sinal:
- acesso:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - entrega:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - multi-account:
accounts.<id>.enabled,accounts.<id>.authDir, substituições no nível da conta - operações:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.*,web.whatsapp.* - comportamento da sessão:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit - prompts:
groups.<id>.systemPrompt,groups["*"].systemPrompt,direct.<id>.systemPrompt,direct["*"].systemPrompt