OpenClaw no WhatsApp sem arriscar o seu próprio número
O canal de WhatsApp do OpenClaw vincula sua conta pelo Baileys. Veja por que ele pede um segundo número, como conseguir um e como ligar um número gerenciado por HTTP.

O essencial
- O canal de WhatsApp do OpenClaw roda no WhatsApp Web pela biblioteca Baileys e se vincula com um QR code, então a conta de WhatsApp, e qualquer banimento, é de quem é dono do número.
- As páginas de WhatsApp e de configuração do OpenClaw recomendam um segundo número dedicado, por controle de acesso e para evitar confusão com o chat consigo mesmo, e não dizem nada sobre risco de banimento, enquanto a página de ajuda do próprio WhatsApp avisa que vincular a conta por apps não oficiais pode levar ao banimento.
- Um segundo número pode ser um chip pré-pago, um eSIM ou um número gerenciado, e não encontramos nenhuma documentação do WhatsApp sobre se números virtuais conseguem se registrar, então trate-os como não confirmados.
- O canal de WhatsApp do OpenClaw não consegue usar uma API hospedada como a whasp, mas uma ponte curta pelo endpoint compatível com a OpenAI do Gateway consegue.
- Tudo o que deixa desconhecidos mandarem mensagem a um agente do OpenClaw deve ir para um agente dedicado, com uma política de ferramentas restrita, porque as mensagens deles são entrada não confiável.
O canal de WhatsApp do OpenClaw liga o seu gateway a uma conta de WhatsApp como dispositivo vinculado, usando a biblioteca Baileys e um QR code. A conta é sua, então um banimento também é seu. A documentação do OpenClaw recomenda um segundo número dedicado: um chip, um eSIM ou uma linha pré-paga. Se você prefere não ser dono desse número, um número gerenciado pode se conectar por HTTP com uma ponte curta.
Como funciona o canal de WhatsApp do OpenClaw?
O OpenClaw é um gateway auto-hospedado de código aberto (MIT) que conecta apps de chat a agentes de IA. O canal de WhatsApp dele é “production-ready via WhatsApp Web (Baileys)”, nas palavras da documentação, e o gateway é dono da sessão vinculada e do loop de reconexão. A documentação afirma que não existe um canal separado de WhatsApp pela Twilio. Os fatos deste artigo vêm da documentação e do repositório do OpenClaw lidos em 19 de outubro de 2026.
A configuração é curta:
- Instale o plugin:
openclaw plugins install @openclaw/whatsapp. - Vincule a conta:
openclaw channels login --channel whatsapp. O login é só por QR, então em um servidor sem tela você precisa de um jeito confiável de levar o QR ao vivo até o seu celular. - Inicie o gateway com
openclaw gateway.
O dmPolicy padrão é pairing. Um remetente desconhecido recebe um pedido de pareamento, e você o aprova com openclaw pairing approve whatsapp <CODE>. Os pedidos expiram depois de uma hora e cada conta comporta no máximo três. As outras políticas são allowlist (só os números em allowFrom), open e disabled. O canal trata chats diretos, grupos, imagens, vídeo, áudio e documentos, e envia presença de digitação enquanto trabalha e confirmações de leitura por padrão.
A vinculação acontece escaneando com um celular, então o número mora em um celular, e o OpenClaw vai junto como dispositivo vinculado. Esse detalhe explica a maior parte do que vem a seguir.
Por que o OpenClaw quer um segundo número?
A documentação do OpenClaw recomenda um número dedicado por motivos de controle de acesso, e as páginas do próprio WhatsApp descrevem um risco que as páginas de WhatsApp e de configuração do OpenClaw não discutem.
| Fonte | O que diz |
|---|---|
| Documentação de WhatsApp do OpenClaw | Recomenda-se um número separado: listas de permissão e roteamento mais claros, menos confusão com o chat consigo mesmo. Um número pessoal funciona no modo self-chat. |
| Guia de assistente pessoal do OpenClaw | Use um número dedicado. Pré-requisito: “A second phone number (SIM/eSIM/prepaid)”. Vincular o seu WhatsApp pessoal faz de toda mensagem enviada a você uma entrada do agente. |
| Issue 91 do OpenClaw, 2 de janeiro de 2026 | Um usuário relatou que o WhatsApp baniu o número normal que ele vinculou ao OpenClaw, e supôs que a causa foi conversar consigo mesmo. A resposta foi que o onboarding ganharia um aviso. A thread não confirma uma causa. |
| WhatsApp: dispositivos vinculados | Vincular por apps ou sites não oficiais pode resultar em banimento temporário ou permanente da conta. |
A página do WhatsApp define apps não oficiais como apps e sites falsos do WhatsApp feitos por terceiros, e não cita nem o OpenClaw nem o Baileys. O OpenClaw é um cliente de terceiros que se vincula como dispositivo, então parta do princípio de que o aviso vale para você. Um segundo número limita o estrago: se o WhatsApp banir a conta, ela é o número do assistente, e não aquele que a sua família e os seus clientes usam.
O modo com número pessoal é uma alternativa suportada. O onboarding então grava dmPolicy: "allowlist", o seu próprio número em allowFrom e selfChatMode: true, e a documentação avisa que uma checagem de funcionamento enviada ao seu próprio número pode virar entrada do agente, a menos que você defina selfChatMode: false.
Como conseguir o segundo número?
| Opção | Como funciona | O que observar |
|---|---|---|
| Chip pré-pago em um celular reserva | A configuração com dois celulares do guia do OpenClaw: registre o WhatsApp no celular reserva e escaneie dele o QR do login | Os dispositivos vinculados são desconectados se o celular ficar sem uso por mais de 14 dias, então mantenha-o carregado e o chip ativo |
| eSIM | Listado pelo OpenClaw ao lado de SIM e pré-pago | Mesma regra do chip pré-pago, em um celular compatível |
| Número virtual (VoIP ou aluguel de SMS) | Recebe o código de verificação online | Não confirmado. Não encontramos nenhuma página do WhatsApp com os tipos de número aceitos, e um número alugado pode ser tomado de volta |
| Número gerenciado | Um provedor como a whasp opera o celular e entrega uma API | Não é um canal nativo do OpenClaw, veja abaixo. A whasp custa $49 por número a cada 30 dias |
A regra dos 14 dias vem da página de dispositivos vinculados do WhatsApp, que também diz que os dispositivos vinculados funcionam sem o celular online e são desconectados depois de 30 dias de inatividade. Se você já roda o OpenClaw no seu número pessoal, adicione o assistente como uma conta nomeada em vez de reinstalar: openclaw channels login --channel whatsapp --account assistant. As contas ficam em channels.whatsapp.accounts.<id>, e cada uma guarda as próprias credenciais.
Como não ser banido usando o OpenClaw?
Nenhuma configuração está documentada como à prova de banimento, e quem decide é o WhatsApp. Estes hábitos combinam com o que a documentação e o WhatsApp dizem:
- Use uma allowlist. Defina
dmPolicy: "allowlist"eallowFromcom as pessoas que devem chegar ao agente. O modopairingpadrão já faz você aprovar remetentes desconhecidos. - Mantenha a política de ferramentas restrita. O guia do OpenClaw diz que um agente conectado pode, dependendo da política, rodar comandos, usar arquivos e mandar mensagens para pessoas em seu nome. Um agente que escreve para quem nunca escreveu para ele é abordagem fria a partir do seu número, um dos sinais que Motivos de banimento no WhatsApp: por que ele bane números cobre.
- Faça backup antes de vincular de novo. Copie
~/.openclaw/credentials/whatsapp/<accountId>, depois rodeopenclaw channels logouteopenclaw channels login, como descreve a documentação de solução de problemas. - Aqueça o número primeiro. Como aquecer um número novo de WhatsApp separa o que é sabido da prática da comunidade.
O OpenClaw pode usar um número gerenciado como a whasp?
Não pelo canal de WhatsApp. Esse canal é o WhatsApp Web pelo Baileys, e a documentação do OpenClaw não lista nenhum outro transporte de WhatsApp. A whasp é uma API HTTP: as mensagens recebidas chegam ao seu webhook e uma chamada de API responde. Então o OpenClaw não tem um jeito nativo de usar a whasp como o seu WhatsApp. Ele tem duas portas documentadas.
O endpoint compatível com a OpenAI do Gateway. O /v1/chat/completions do OpenClaw vem desativado por padrão e roda um turno normal de agente. O campo model nomeia um agente (openclaw/<agentId>), e uma string user da OpenAI dá uma sessão estável, então chamadas repetidas continuam uma única conversa. Uma ponte liga os dois lados:
import { createServer } from "node:http";
import { Webhook } from "standardwebhooks";
const wh = new Webhook(process.env.WHASP_WEBHOOK_SECRET); // whsec_... da whasp
const seen = new Set(); // deduplica pelo id do evento (use um armazenamento de verdade em produção)
async function askOpenClaw(user, text) {
const res = await fetch(`${process.env.OPENCLAW_URL}/v1/chat/completions`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OPENCLAW_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: process.env.OPENCLAW_AGENT ?? "openclaw/default",
user, // mesmo valor por conversa = mesma sessão do OpenClaw
messages: [{ role: "user", content: text }],
}),
});
if (!res.ok) throw new Error(`OpenClaw answered ${res.status}`);
const data = await res.json();
return data.choices?.[0]?.message?.content ?? "";
}
async function sendToWhasp(to, text, eventId) {
const res = await fetch("https://api.whasp.ai/v1/messages", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WHASP_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": eventId,
},
body: JSON.stringify({ to, text: text.slice(0, 4096) }),
});
if (!res.ok) throw new Error(`whasp answered ${res.status}`);
}
createServer(async (req, res) => {
if (req.method !== "POST") return res.writeHead(405).end();
const chunks = [];
for await (const chunk of req) chunks.push(chunk);
const body = Buffer.concat(chunks).toString("utf8"); // corpo bruto, antes do parse
let event;
try {
event = wh.verify(body, req.headers);
} catch {
return res.writeHead(401).end();
}
res.writeHead(204).end(); // confirma agora, trabalha depois
if (event.type !== "message.received" || seen.has(event.id)) return;
seen.add(event.id);
const { number, chat, text } = event.data.message;
if (!text || /^(STOP|UNSUBSCRIBE|OPTOUT|CANCEL|END|QUIT)$/.test(text.trim())) return; // a whasp trata o opt-out
try {
const answer = await askOpenClaw(`whasp:${number}:${chat}`, text);
if (answer) await sendToWhasp(chat, answer, event.id);
} catch (err) {
console.error(event.id, err.message);
}
}).listen(8790);
Rodamos este código contra simulações das duas APIs (stubs), montadas a partir da documentação do OpenClaw e da whasp. Não rodamos contra um gateway OpenClaw de verdade. Para usar, ative gateway.http.endpoints.chatCompletions.enabled, registre a URL HTTPS pública da ponte com PUT /v1/webhook e defina WHASP_WEBHOOK_SECRET, WHASP_API_KEY, OPENCLAW_URL (a documentação usa http://127.0.0.1:18789), OPENCLAW_TOKEN e OPENCLAW_AGENT. A checagem da assinatura e o tratamento de duplicatas estão explicados em Webhook do WhatsApp: assinatura, novas tentativas e duplicatas.
Três pontos de atenção. Primeiro, a documentação do OpenClaw chama este endpoint de acesso total de operador ao gateway: mantenha-o em loopback ou em uma rede privada, para que só a ponte consiga chamá-lo. Segundo, textos de desconhecidos são entrada não confiável, então aponte OPENCLAW_AGENT para um agente dedicado, com ferramentas restritas por você. O README do OpenClaw manda tratar as mensagens recebidas como entrada não confiável. Terceiro, o OpenClaw agora enxerga um cliente de API genérico, não um canal de WhatsApp. O pareamento, as allowlists, os grupos, as reações, a digitação e as mensagens de voz dele não se aplicam, e a whasp tem seus próprios limites: os usuários escrevem primeiro, e não há grupos, indicadores de digitação nem mensagens de voz de saída.
Um plugin de canal. A documentação do OpenClaw diz para criar um plugin de canal quando você integra uma rede de mensagens externa com entrega por webhook ou transporte de saída próprios. Isso dá roteamento e controle de acesso nativos, ao preço de escrever e manter TypeScript contra o SDK de plugins. Não construímos um.
O que fazer agora
Escolha o caminho por quem vai mandar mensagem ao agente:
- Só você. Um chip pré-pago ou um eSIM com o canal próprio do OpenClaw é uma configuração razoável, desde que você aceite que o número é o risco. Mantenha o
dmPolicyemallowlist. - Algumas pessoas que você conhece. A mesma configuração, com cada pessoa em
allowFromou aprovada pelo pareamento, e uma política de ferramentas com a qual você ficaria tranquilo se uma delas fosse descuidada. - Clientes ou desconhecidos. Ponha a conta onde um banimento não alcance o seu próprio número: um número gerenciado pela ponte acima, ou a WhatsApp Business Platform oficial, se o seu bot se qualificar.
API não oficial do WhatsApp: Baileys, WAHA e Evolution comparados mostra as contrapartidas entre as opções que você mesmo opera, e Servidor MCP para WhatsApp mostra outro jeito de dar um número a um agente.
Perguntas
O OpenClaw precisa de um segundo número de WhatsApp?
Não é obrigatório, porque o OpenClaw aceita um número pessoal no modo de chat consigo mesmo (self-chat). A documentação recomenda um número dedicado, e a página de ajuda do WhatsApp avisa que vincular uma conta por apps não oficiais pode causar um banimento temporário ou permanente.
Como o OpenClaw se conecta ao WhatsApp?
Pelo WhatsApp Web, usando a biblioteca Baileys. Você instala o plugin @openclaw/whatsapp, roda openclaw channels login --channel whatsapp e escaneia um QR code. O login é só por QR, e o gateway guarda a sessão vinculada.
O OpenClaw pode usar a API do WhatsApp Business?
Não no canal de WhatsApp descrito na documentação em 19 de outubro de 2026, que cobre o WhatsApp Web pelo Baileys e afirma que não existe um canal separado de WhatsApp pela Twilio. O OpenClaw tem um SDK de plugins para você criar o seu próprio canal.
Posso usar um número virtual como segundo número de WhatsApp do OpenClaw?
Não está confirmado. O guia do OpenClaw lista um chip, um eSIM ou um número pré-pago, e não encontramos nenhuma página do WhatsApp que diga quais tipos de número ele aceita. Um número alugado que você não pode manter é um risco à parte.
Posso conectar o OpenClaw à whasp?
Não como canal nativo. A whasp é uma API HTTP com um webhook, então você a conecta com uma ponte pequena que envia cada mensagem recebida ao endpoint compatível com a OpenAI do OpenClaw e devolve a resposta.


