Recusar ligação no WhatsApp automaticamente e responder por mensagem (API)
Como recusar ligações no WhatsApp automaticamente pela API não oficial e responder por texto na hora, com horário comercial e link de chamada.
Sim, dá para recusar ligações no WhatsApp automaticamente e responder por mensagem na hora: com a API não oficial da WAME, o evento de chamada chega no seu webhook, você recusa com DELETE /{key}/call/{id}/{from} e envia um texto com POST /{key}/message/text dizendo como a pessoa será atendida. Em poucos segundos, uma ligação que ninguém ia atender vira uma conversa por escrito — que é onde a sua operação funciona.
Quem atende pelo WhatsApp conhece o problema: o cliente liga, ninguém pode atender, a ligação toca até cair e ele fica sem resposta. Pior ainda quando o número é de um bot ou de um sistema, sem ninguém do outro lado. Este guia mostra como montar a recusa automática com regras de horário e alternativa de chamada agendada.
Por que recusar (e não só ignorar)
Deixar tocar parece inofensivo, mas tem três custos:
- O cliente não sabe o que fazer. Ele tenta de novo, desiste ou vai para o concorrente.
- O atendente é interrompido. Se o número está num aparelho da equipe, a ligação corta o fluxo de quem está respondendo por texto.
- Números de sistema não têm quem atenda. Uma instância que só envia notificação de pedido nunca vai atender, e o cliente merece saber disso.
Recusar e responder imediatamente resolve os três: a pessoa recebe uma explicação e um caminho, e ninguém da equipe é interrompido.
Esse tipo de controle é uma das vantagens práticas da API não oficial do WhatsApp: como a instância funciona como um aparelho conectado, ela enxerga as chamadas recebidas e pode agir sobre elas. Para ir além da recusa e fazer ligações pela API, veja como fazer ligação pelo WhatsApp com a API não oficial.
Como o fluxo funciona
- Alguém liga para o número conectado na sua instância.
- A WAME envia o evento de chamada para o webhook configurado, com o identificador da chamada e quem está ligando.
- Seu código decide o que fazer (recusar, deixar tocar, recusar com link).
- Se recusar, chama
DELETE /{key}/call/{id}/{from}. - Envia a mensagem de texto para quem ligou.
Os nomes exatos dos campos do evento de chamada estão na documentação. No exemplo abaixo, a função lerChamada isola esse ponto — é o único lugar que você ajusta ao payload real.
Recusar a chamada
A recusa é um DELETE com o id da chamada e o JID de quem ligou na URL:
curl -X DELETE "https://us.api-wa.me/SUA_KEY/call/ID_DA_CHAMADA/[email protected]"E a resposta por texto, logo em seguida:
curl -X POST "https://us.api-wa.me/SUA_KEY/message/text" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999999999",
"text": "Oi! Por aqui a gente atende só por mensagem. Me conta o que você precisa que eu já te respondo 🙂"
}'Repare na ordem: primeiro recusa, depois escreve. Se a mensagem chegar enquanto o telefone ainda toca, ela passa despercebida.
Webhook completo em Node.js
Um servidor Express que recebe o evento, aplica a regra e responde:
import express from 'express';
const BASE = 'https://us.api-wa.me/SUA_KEY';
const app = express();
app.use(express.json());
// No formato meta, a chamada chega com field "call" e a lista em value.calls.
// `from` vem só com dígitos; `from_jid` traz o JID completo, que é o que
// a API usa para recusar ou atender.
function lerChamada(body) {
const change = body?.entry?.[0]?.changes?.[0];
if (change?.field !== 'call') return null;
const chamada = change.value?.calls?.[0];
if (!chamada || chamada.status !== 'offer') return null; // só a chamada chegando
return { id: chamada.id, de: chamada.from_jid ?? chamada.from, numero: chamada.from };
}
// Se from_jid terminar em "@lid" (identificador interno do WhatsApp, não
// telefone), resolva o número com POST /{key}/contacts/resolve-lids antes do texto.
async function recusar(id, de) {
await fetch(`${BASE}/call/${encodeURIComponent(id)}/${encodeURIComponent(de)}`, {
method: 'DELETE',
});
}
async function enviarTexto(to, text) {
await fetch(`${BASE}/message/text`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ to, text }),
});
}
app.post('/webhook/wame', async (req, res) => {
// 200 imediato: webhook lento é reenviado, e o cliente
// receberia a mesma mensagem duas vezes.
res.sendStatus(200);
const chamada = lerChamada(req.body);
if (!chamada) return;
await recusar(chamada.id, chamada.de);
await enviarTexto(chamada.numero, mensagemPara(new Date()));
});
app.listen(3000);Como o mesmo webhook também recebe mensagens, status e eventos de grupo, a guarda if (!chamada) return é o que impede o código de tentar recusar algo que não é ligação. E como webhooks podem ser reenviados, vale registrar os ids de chamada já tratados — detalhes em webhook em produção: assinatura, retry e idempotência.
Regras de horário comercial
A mensagem certa depende da hora. Uma função simples resolve:
function mensagemPara(agora) {
const dia = agora.getDay(); // 0 = domingo
const hora = agora.getHours();
const expediente = dia >= 1 && dia <= 5 && hora >= 9 && hora < 18;
if (expediente) {
return 'Oi! No momento não conseguimos atender ligação, mas estamos online por aqui. ' +
'Me conta o que você precisa que já te respondo.';
}
return 'Oi! Nosso horário é de segunda a sexta, das 9h às 18h. ' +
'Deixa sua mensagem que a gente responde assim que abrir.';
}Atenção ao fuso: se o servidor roda em UTC, converta para o horário de Brasília antes de comparar. É o erro mais comum nesse tipo de regra — a mensagem de "fechado" sai às 15h porque o servidor acha que são 18h.
Uma variação útil: dentro do expediente, deixar tocar e só recusar fora dele. Aí o if fica no webhook — se for horário comercial, você simplesmente não chama recusar, e um atendente atende no aparelho.
Oferecer uma ligação em outro momento
Tem cliente que realmente precisa falar por voz. Em vez de fechar a porta, ofereça um link de chamada. A API tem dois caminhos:
Gerar o link sem enviar, para montar a mensagem do seu jeito:
curl -X POST "https://us.api-wa.me/SUA_KEY/message/create-call-link" \
-H "Content-Type: application/json" \
-d '{ "type": "audio" }'Gerar e já enviar com uma legenda:
curl -X POST "https://us.api-wa.me/SUA_KEY/message/call-link" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999999999",
"type": "video",
"caption": "Vamos conversar por vídeo? Entre por este link às 15h."
}'Outra saída é mandar um convite de evento com data e hora (POST /{key}/message/event), que o WhatsApp mostra como um card de agenda. Combina bem com atendimento consultivo: o cliente liga, recebe a recusa e, na mesma hora, um horário para a conversa.
O que escrever na mensagem
A recusa automática só funciona se a mensagem for boa. Três regras:
- Curta e humana. Uma ou duas frases. Nada de "Prezado cliente, informamos que...".
- Com um próximo passo claro. "Me conta o que você precisa", "responda com o número do pedido", "clique no link para agendar".
- Sem aproveitar para vender. A pessoa ligou por um motivo. Transformar a recusa em anúncio irrita e gera denúncia — e a WAME não apoia spam em nenhuma forma.
Se quiser um toque a mais, antes do texto mande o indicador de "digitando" com POST /{key}/message/presence (status: "composing"). O guia de presença "digitando" pela API mostra como.
E o risco de bloqueio?
Recusar ligação é algo que qualquer pessoa faz no celular várias vezes por dia. Não é o que derruba número. O que derruba é comportamento de robô em escala: volume alto para quem não pediu, texto idêntico para milhares de contatos, rajadas sem pausa.
A resposta automática deste guia vai só para quem ligou — um contato que acabou de procurar você. É o cenário mais legítimo possível. Além disso, a WAME roda uma camada de proteção por trás de cada instância: identidade de dispositivo própria e coerente com o país do número, tempo de digitação e leitura com ritmo humano, limites de ritmo e reconexão espaçada. Por isso a taxa de bloqueio é muito baixa para quem usa do jeito certo — o que não significa zero, e nenhuma plataforma honesta promete isso.
Um lembrete necessário: a camada não oficial não é afiliada nem endossada pelo WhatsApp ou pela Meta, e o uso é de responsabilidade de quem envia. Se a sua operação precisa de garantia formal da Meta, compare as opções em API oficial vs não oficial.
Casos em que vale a pena
- Número de notificações (pedido, cobrança, agendamento): ninguém atende, então a recusa com explicação é obrigatória.
- Bots de atendimento: o cliente liga por hábito; a recusa o devolve ao fluxo por texto, onde o bot resolve.
- Equipes pequenas: a ligação interromperia quem está atendendo por escrito.
- Fora do expediente: a mensagem informa o horário e evita a sensação de abandono.
Conclusão
Recusar ligação automaticamente é uma daquelas automações pequenas que melhoram muito a experiência: o cliente que ligaria para o nada recebe, em segundos, uma explicação e um caminho. Com a API não oficial da WAME são duas chamadas — DELETE /{key}/call/{id}/{from} e POST /{key}/message/text — e o resto é regra de negócio: horário, tom da mensagem e, quando fizer sentido, um link de chamada para outro momento. Hospedada e gerenciada, com 99,9% de uptime e suporte 24/7 em português, a instância cuida da conexão; você cuida da conversa. Os detalhes de cada endpoint estão na documentação.
Pronto para automatizar seu WhatsApp?
Crie sua conta gratuita e comece a enviar mensagens pela API em minutos.
Começar grátisPerguntas frequentes
Dá para recusar ligação no WhatsApp automaticamente?+
Sim. Com a API não oficial da WAME, a instância recebe o evento de chamada no webhook e você recusa com DELETE /{key}/call/{id}/{from}, usando o id da chamada e quem ligou. Em seguida envia uma mensagem de texto explicando como o atendimento funciona.
Quem ligou fica sabendo que a chamada foi recusada?+
Sim, a pessoa vê a chamada encerrada, como acontece quando alguém recusa pelo celular. Por isso a mensagem automática logo em seguida é importante: ela transforma uma recusa seca em um próximo passo claro.
Posso recusar só fora do horário comercial?+
Pode. A regra fica no seu código: ao receber o evento de chamada, você verifica dia e hora e decide se recusa com mensagem de fora do expediente, se recusa oferecendo um link de chamada agendada ou se deixa tocar para um atendente atender no aparelho.
Como ofereço uma ligação em outro momento?+
Gere um link de chamada com POST /{key}/message/create-call-link (tipo audio ou video) e envie na resposta, ou use POST /{key}/message/call-link, que já gera e envia o link para o contato com uma legenda.
Recusar ligações automaticamente aumenta o risco de bloqueio?+
Não pelo simples fato de recusar. O que pesa é o comportamento geral do número. Uma resposta curta, útil e só para quem ligou é atendimento legítimo. O que não faz sentido é aproveitar a recusa para empurrar promoção: a WAME não apoia spam.
Continue lendo
Agente de voz no WhatsApp: latência, interrupção (barge-in) e silêncio
Como deixar um agente de voz no WhatsApp natural: latência, streaming, detecção de fala, interrupção (barge-in), silêncio e eco, com exemplos em Node.js.
Ligação pelo WhatsApp via API não oficial: fazer, atender e tocar áudio
Como fazer, atender, recusar e encerrar ligações de WhatsApp pela API não oficial, tocar áudio na chamada e gerar link de chamada, com exemplos em cURL.
IA para atender ligação no WhatsApp pela API: como montar um agente de voz
Como montar um agente de voz que atende ligações no WhatsApp pela API: webhook, áudio em tempo real por Socket.IO, transcrição, IA, voz sintética e handoff.