Administração de condomínio é comunicação repetida com um público que não escolheu ser seu público. O morador não assinou nada para receber aviso de manutenção; ele comprou ou alugou um apartamento. Isso muda tudo na hora de escrever e de disparar: o canal precisa ser útil, previsível e discreto, ou vira incômodo — e incômodo, no WhatsApp, vira bloqueio.
O que a API resolve é a parte mecânica: enviar para cada unidade o que hoje se envia para o prédio inteiro no quadro de avisos, e trazer a resposta de volta para dentro do sistema. É uma API REST comum — header token, JSON entrando e saindo, base https://api.zapon.dev —, chamada pelo software da administradora ou por uma rotina que lê a base de unidades. Abaixo estão o fluxo, os endpoints em cURL e Node, o evento que chega quando o morador responde e as regras de conduta que separam um canal aceito de um número denunciado.
A dor: o aviso que morre no quadro do elevador
Por que o morador sempre diz que não recebeu o comunicado?
Porque o comunicado foi publicado, não entregue. Papel no elevador é visto por quem passa e olha; e-mail de administradora cai em uma caixa que muita gente não abre; boleto no escaninho depende de o morador descer até a portaria. Nenhum desses caminhos gera prova de que a mensagem chegou àquela unidade. O WhatsApp gera: o envio tem identificador, a resposta tem horário, e o que a pessoa respondeu fica registrado.
Na prática, a administradora convive com três buracos ao mesmo tempo:
- A taxa que vence sem aviso. Boa parte do atraso não é falta de dinheiro: é esquecimento de uma conta que não tem cara de conta, porque o boleto ficou na portaria. Um aviso três dias antes, com o PDF junto, elimina esse tipo de atraso — e não tem nada de cobrança nele.
- O comunicado que ninguém leu. Corte de água programado, elevador parado no sábado, dedetização na quinta. Quando o aviso não chega, a portaria passa o dia explicando e o zelador vira porta-voz.
- A assembleia sem quórum. O edital foi afixado e enviado, mas o síndico chega ao dia sem a menor ideia de quantos vão aparecer — e descobre a falta de quórum com as cadeiras já montadas.
Por que a síndica acaba virando central de atendimento no celular pessoal?
Porque o canal oficial é lento e o morador é prático: ele manda no número que tem. Aí a conversa de condomínio entra no celular particular de uma pessoa que não é funcionária, sem registro, sem horário e sem quem cubra as férias. Passar os avisos para um número institucional da administradora não elimina o contato direto, mas tira do celular pessoal aquilo que é processo: cobrança, comunicado, convocação e confirmação.
Por que enviar unidade por unidade à mão não se sustenta?
Um prédio de 90 unidades tem 90 boletos por mês. Fazer isso na mão significa alguém abrindo conversa, anexando PDF e conferindo nome noventa vezes, todo mês, em cada prédio da carteira — e errando em algum. Para a API é a mesma chamada repetida em laço, com pausa entre uma e outra, e um registro do que saiu para cada unidade.
O que a administradora precisa ter para começar
O que preciso para avisar morador por WhatsApp automaticamente?
Um número de WhatsApp que o condomínio ou a administradora controle, uma conexão no zapon com esse número (por QR Code ou código de pareamento) e uma base de unidades com o telefone do responsável por cada uma. Do lado de quem dispara, basta algo capaz de fazer uma requisição HTTP: o sistema da administradora, uma rotina própria ou uma ferramenta de automação lendo a base.
- Um número institucional. Nunca o celular pessoal do síndico ou do zelador: quando a pessoa sai, a conversa e o histórico saem junto. Se o condomínio já divulga um número da portaria, ele serve — a API opera o mesmo número, não o substitui, e a portaria continua atendendo no aparelho.
- Uma conexão por número. Cada conexão tem o seu
token, que é a credencial de todas as chamadas daquele número. É o header token, copiado do painel: não é Authorization, não é Bearer, não há OAuth.
- Cadastro por unidade, não por pessoa solta. A chave do envio é a unidade (bloco, torre, apartamento) com o telefone de quem responde por ela. Sem essa amarração, a régua de taxa manda o boleto errado para a pessoa errada — e esse erro não tem conserto elegante.
Um número por condomínio ou um número para a administradora inteira?
Depende de quem é o remetente na cabeça do morador. Se o prédio tem identidade própria e portaria própria, um número por condomínio faz o aviso parecer o que é: comunicação daquele prédio. Se a administradora atende dezenas de prédios pequenos, um número por administradora concentra a operação e a equipe. A conta muda: cada número conectado é R$ 27 por mês, independentemente de quantas unidades ele atende. Trocar de remetente no código é trocar o header token da chamada.
De onde saem os dados das unidades e dos boletos?
Do sistema que a administradora já usa. Se ele tem área de integração, o próprio sistema chama a API quando gera a cobrança do mês. Se é fechado, o caminho é exportar — relatório, banco, planilha de posição — e disparar dali. A API não precisa saber o que é uma taxa condominial: ela recebe telefone, texto e, quando for o caso, um arquivo.
O ciclo da taxa e do comunicado, passo a passo
Como funciona o fluxo do condomínio do começo ao fim?
Cinco etapas: (1) alguns dias antes do vencimento, cada unidade recebe o aviso com o boleto em PDF; (2) no dia do vencimento sai uma mensagem curta com o meio de pagamento; (3) quando a baixa entra no financeiro, a régua para para aquela unidade; (4) o que continua em aberto entra numa régua de atraso espaçada, discreta e com fim; (5) em paralelo, comunicados e o edital de assembleia saem por unidade, com confirmação de presença em botões que volta por webhook e vira a lista de quórum do síndico.
Cada passo tem um objetivo próprio. Repetir a mesma mensagem quatro vezes é o jeito mais rápido de ensinar o morador a ignorar o canal.
1. O que enviar antes do vencimento da taxa condominial?
Um aviso de conveniência, não uma cobrança — a taxa nem venceu. Três dias costumam ser suficientes: tempo de pagar sem correria, perto o bastante para não esquecer. Conteúdo: identificação da unidade, mês de competência, data de vencimento e o boleto anexado em PDF. É aqui que o envio de documento resolve o problema do escaninho: o morador recebe o arquivo no mesmo lugar onde lê tudo o resto.
Duas coisas que não entram: valor em destaque com tom de alerta e qualquer referência à situação de outros meses. Este envio é operacional e neutro.
2. Como é o aviso no dia do vencimento?
Curto. Uma linha lembrando a data de hoje e o meio de pagamento — a linha digitável ou o código para copiar. Nada de reenviar o PDF: quem quer o arquivo já tem, e repetir anexo pesa a conversa. Se o condomínio aceita mais de uma forma de pagamento, diga as duas em uma frase, sem explicação longa.
3. Como confirmar a baixa e não cobrar quem já pagou?
A confirmação é a mensagem que compra credibilidade para todas as outras: quem paga e recebe um "recebemos" para de duvidar do canal. Ela é disparada pela baixa no financeiro, não por um horário fixo.
E daqui sai a regra mais importante da página: a rotina lê o status de cada unidade no momento do envio, nunca uma lista montada no dia anterior. Cobrar quem já pagou é o erro que faz o síndico mandar desligar o sistema — e ele acontece sempre que alguém gera a lista de manhã e dispara à tarde.
4. Como montar a régua de atraso da taxa sem constranger o morador?
Espaçada, discreta e com fim. Um aviso poucos dias depois do vencimento, outro mais adiante, e ponto: depois disso o assunto sai da automação e vira tarefa de uma pessoa da administradora, que trata caso a caso. Cada mensagem precisa oferecer um caminho — segunda via e o contato do financeiro — e nenhuma delas precisa de adjetivo. O tom é o de quem avisa, não o de quem pressiona.
O que não entra em nenhuma hipótese: menção a consequência, comparação com outras unidades, texto em letras maiúsculas e envio repetido no mesmo dia. Multa e encargo são o que estiver na convenção do condomínio — assunto para a administradora explicar, não para a mensagem automática afirmar.
5. Como enviar o edital de assembleia e estimar o quórum?
O edital vai em PDF, unidade por unidade, com uma mensagem curta dizendo data, horário, local (ou o formato, quando for por vídeo) e a pauta em uma linha. Junto, um pedido de confirmação em botões: participo, não participo, participo por procuração. Cada toque volta pelo webhook com o identificador que você colocou no botão, e o sistema monta uma contagem por unidade.
Essa contagem não é o quórum — quórum se apura na assembleia, com a lista de presença e as procurações válidas. Ela é uma estimativa que permite ao síndico agir antes: reforçar o convite, remarcar ou preparar a segunda convocação. Diga isso na própria mensagem, para ninguém confundir uma confirmação por WhatsApp com voto.
Os endpoints que a administradora usa na prática
Quais endpoints da API do zapon uma administradora precisa?
Quatro dão conta do ciclo inteiro: POST /chat/send/text para os avisos, POST /chat/send/document para boleto e edital em PDF, POST /chat/send/buttons para a confirmação de presença e POST /user/check para conferir se o telefone do cadastro ainda tem WhatsApp. São 49 endpoints publicados com schema — 23 de /chat, 18 de /group e 8 de /user —, mas o dia a dia do condomínio vive nesses quatro.
Todas as chamadas usam a base https://api.zapon.dev e o header token. Trate o token como senha: quem o tem envia mensagem em nome do condomínio.
Como enviar o aviso da taxa pela API?
Um POST em /chat/send/text com dois campos: Phone, o número em formato internacional só com dígitos, e Body, o texto.
aviso antes do vencimento — cURL
curl -X POST https://api.zapon.dev/chat/send/text \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Phone": "5511999999999",
"Body": "Condomínio Alameda das Palmeiras — unidade 42, bloco B.\n\nA taxa de março vence em 10/03 (terça). O boleto vai na próxima mensagem.\n\nQualquer dúvida, é só responder por aqui que a administradora retorna em horário comercial."
}'
A resposta traz o identificador da mensagem no WhatsApp:
resposta da API
{
"code": 200,
"success": true,
"data": {
"Details": "Sent",
"Id": "90B2F8B13FAC8A9CF6B06E99C7834DC5",
"Timestamp": "2026-03-07T09:12:08-03:00"
}
}
Guarde esse Id ligado à unidade e à competência. É ele que responde à pergunta "vocês avisaram a minha unidade?" com data e hora, e é ele que impede o mesmo aviso de sair duas vezes se a rotina rodar de novo.
Como disparar a rotina de vencimento sem cobrar quem já pagou?
Uma rotina diária varre as unidades por faixa de dias em relação ao vencimento e decide o que cada uma recebe — sempre consultando a posição financeira imediatamente antes de enviar.
rotina diária da taxa — Node
// taxas.js — roda todo dia útil às 9h
const API = "https://api.zapon.dev";
const TOKEN = process.env.ZAPON_TOKEN_ALAMEDA;
async function enviarTexto(phone, body) {
const r = await fetch(`${API}/chat/send/text`, {
method: "POST",
headers: { "token": TOKEN, "Content-Type": "application/json" },
body: JSON.stringify({ Phone: phone, Body: body })
});
const json = await r.json();
if (!r.ok || !json.success) throw new Error(json.error || `HTTP ${r.status}`);
return json.data.Id;
}
const pausa = (ms) => new Promise((r) => setTimeout(r, ms));
for (const u of await unidadesDoCondominio()) {
const t = await posicaoDaTaxa(u.id); // lida AGORA, não ontem
if (t.pago || u.optOut) continue; // pagou ou pediu para sair: fora
const etapa = t.diasParaVencer === 3 ? "pre"
: t.diasParaVencer === 0 ? "dia"
: t.diasEmAtraso === 5 ? "atraso1"
: t.diasEmAtraso === 15 ? "atraso2" : null;
if (!etapa) continue; // a régua acaba aqui: o resto é com a equipe
if (await jaEnviado(u.id, t.competencia, etapa)) continue;
try {
const id = await enviarTexto(u.telefoneResponsavel, textoDa(etapa, u, t));
await registrarEnvio(u.id, t.competencia, etapa, id);
} catch (e) {
await registrarFalha(u.id, etapa, String(e)); // vira tarefa da administradora
}
await pausa(5000); // 90 unidades não saem no mesmo minuto
}
Quatro detalhes desse laço são o que separa uma régua que dura de uma que gera reclamação na próxima assembleia. A leitura da posição dentro do laço evita cobrar quem pagou de manhã. O optOut respeita quem pediu para sair. O jaEnviado impede repetição quando a rotina roda duas vezes. E a pausa fraciona o disparo: uma torre inteira saindo no mesmo instante é exatamente o comportamento que um número humano nunca tem.
Como mandar o boleto e o edital de convocação em PDF?
O POST /chat/send/document recebe o arquivo em Document, como data URI em base64, mais FileName e um Caption opcional. O nome do arquivo importa mais do que parece: é o que o morador vê na conversa e o que ele vai procurar seis meses depois.
edital de assembleia — cURL
curl -X POST https://api.zapon.dev/chat/send/document \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Phone": "5511999999999",
"Document": "data:application/pdf;base64,JVBERi0xLjQKJcfs...",
"FileName": "edital-agv-2027-03.pdf",
"Caption": "Edital de convocação — assembleia geral em 22/03, às 19h30, no salão de festas. Pauta: previsão orçamentária e obra da fachada."
}'
O mesmo endpoint entrega o boleto da competência (taxa-03-2027-unidade-42B.pdf) e a prestação de contas do mês. Entre as 13 formas de envio da API há ainda imagem, localização, lista e enquete — a imagem serve bem para a foto de um aviso da portaria, e a localização, para o endereço de uma assembleia fora do prédio.
Como perguntar quem vai à assembleia usando botões?
O POST /chat/send/buttons envia botões de resposta rápida, cada um com um id que você define e um text curto — o rótulo cabe em cerca de 20 caracteres. Coloque a unidade e a assembleia dentro do id: a resposta volta amarrada ao registro certo, sem depender de interpretar texto. Além da resposta rápida, o mesmo endpoint monta botão que abre um link ("type": "cta_url"), botão que abre o discador ("type": "cta_call") e botão que copia um código ("type": "copy") — e os tipos convivem na mesma mensagem. O toque em resposta rápida volta no webhook; os outros três agem no aparelho de quem recebe.
confirmação de presença — botões
POST https://api.zapon.dev/chat/send/buttons
token: SEU_TOKEN
{
"Phone": "5511999999999",
"Body": "Unidade 42B — assembleia geral em 22/03, às 19h30, no salão de festas. Você pretende participar? A resposta ajuda a estimar a presença; a lista oficial é assinada na hora.",
"Footer": "Condomínio Alameda das Palmeiras",
"Buttons": [
{ "id": "agv2703|42B|sim", "text": "Vou participar" },
{ "id": "agv2703|42B|nao", "text": "Não vou" },
{ "id": "agv2703|42B|procuracao", "text": "Por procuração" }
]
}
Como conferir se o telefone do cadastro ainda tem WhatsApp?
Cadastro de condomínio envelhece rápido: inquilino que saiu, proprietário que trocou de número, unidade vendida. O POST /user/check recebe uma lista de telefones e diz quais têm conta no WhatsApp — é o jeito de limpar a base antes do primeiro disparo e de gerar a lista de unidades cujo contato precisa ser atualizado na portaria.
checar telefones das unidades — cURL
curl -X POST https://api.zapon.dev/user/check \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "Phone": ["5511999999999", "5511888888888"] }'
// resposta
{ "code": 200, "success": true, "data": { "Users": [
{ "Query": "5511999999999", "IsInWhatsapp": true, "JID": "[email protected]" },
{ "Query": "5511888888888", "IsInWhatsapp": false, "JID": "" }
] } }
A resposta do morador: webhook, regra e ação
Como as respostas dos moradores chegam ao sistema da administradora?
Cada conexão tem o seu webhook: você cadastra no painel a URL do seu sistema e escolhe quais eventos quer receber. A partir daí, toda mensagem que chega naquele número vira um POST nessa URL, com o conteúdo inteiro no corpo — telefone, identificador, horário, texto e, quando é resposta de botão, o id que você definiu. Não existe polling: não há nada para ficar consultando.
São três peças que não se misturam: o webhook entrega o evento, a sua regra interpreta e a ação acontece no seu sistema. A API não sabe o que é uma unidade nem o que é quórum; ela sabe que chegou uma mensagem.
Qual é o formato do evento de mensagem recebida?
O corpo traz o tipo do evento e a mensagem completa. Assim chega o morador que respondeu por escrito:
webhook — mensagem recebida
{
"type": "Message",
"event": {
"Info": {
"ID": "3EB0C767D26A1B5F7C83",
"Chat": "[email protected]",
"Sender": "[email protected]",
"IsFromMe": false, "IsGroup": false,
"PushName": "Marcos — 42B",
"Timestamp": "2026-03-11T18:04:22-03:00"
},
"Message": { "conversation": "já paguei ontem" }
}
}
// quando ele toca num botão, muda só o bloco Message:
"Message": { "buttonsResponseMessage": {
"selectedButtonID": "agv2703|42B|sim",
"Response": { "SelectedDisplayText": "Vou participar" }
} }
Duas observações que evitam retrabalho: o corpo pode chegar como JSON puro ou como formulário codificado, com o JSON dentro de um campo — aceite os dois formatos. E o que o próprio número envia também gera evento, com IsFromMe igual a true: ignore, ou a portaria respondendo um morador dispara a sua automação.
Como transformar a resposta em lista de quórum e em tarefa?
Responda 200 primeiro, processe depois; descarte o que não interessa; identifique a unidade pelo id do botão ou pelo telefone; e devolva uma confirmação ao morador, para ele não ficar na dúvida se a resposta valeu.
receptor do webhook — Node/Express
app.post("/condominio/eventos", express.json(), async (req, res) => {
res.sendStatus(200); // responda primeiro, processe depois
const ev = req.body?.event ?? req.body, info = ev?.Info ?? {};
if (info.IsFromMe || info.IsGroup) return; // eco da portaria e grupos, fora
if (await jaProcessado(info.ID)) return; // o mesmo evento pode chegar 2x
const telefone = String(info.Chat || "").split("@")[0];
const botao = ev?.Message?.buttonsResponseMessage?.selectedButtonID ?? "";
const texto = (ev?.Message?.conversation ??
ev?.Message?.extendedTextMessage?.text ?? "").trim().toLowerCase();
if (botao) {
const [assembleia, unidade, resposta] = botao.split("|");
await registrarPresenca(assembleia, unidade, resposta); // estimativa, não quórum
return enviarTexto(telefone, resposta === "nao"
? "Anotado, obrigado por responder."
: "Anotado. A lista de presença é assinada no dia, no local.");
}
const un = await unidadePorTelefone(telefone);
if (!un) return filaDaAdministradora(telefone, texto); // número desconhecido
if (/^(ja paguei|já paguei|paguei|comprovante)/.test(texto)) {
await pausarRegua(un.id, 3); // segura a régua até a conciliação
await filaDoFinanceiro(un.id, texto);
return enviarTexto(telefone, "Obrigado. O financeiro confere a baixa e confirma por aqui.");
}
if (/(segunda via|boleto|2a via)/.test(texto)) return enviarSegundaVia(un);
if (/(parar|nao quero|descadastr)/.test(texto)) {
await marcarOptOut(un.id);
return enviarTexto(telefone, "Certo, não enviaremos mais avisos por aqui.");
}
return filaDaAdministradora(un.id, texto); // o resto é assunto de gente
});
Repare no pausarRegua: quando o morador diz que pagou, a régua para antes de a conciliação confirmar. É uma decisão deliberada — é melhor atrasar um aviso legítimo do que insistir com alguém que já pagou.
E quando o morador responde reclamando de barulho ou pedindo manutenção?
Ele vai responder isso, e no dia seguinte ao primeiro comunicado. "O portão está batendo", "o vizinho de cima arrasta móvel de madrugada", "quando conserta a bomba?". Nada disso é para a automação resolver: o papel dela é reconhecer que a conversa espera resposta e colocá-la numa fila que alguém da administradora abre todo dia. Ocorrência entre vizinhos, então, nunca deveria ser tratada por texto automático — é caso de registro formal e de conversa com o síndico.
Comunicado coletivo sem expor o vizinho
O que pode ir para todos os moradores e o que é só da unidade?
Vai para todo mundo o que afeta todo mundo: manutenção programada, corte de água, elevador parado, dedetização, mudança de horário de área comum, edital de assembleia, prestação de contas. É da unidade — e só dela — tudo que identifica a situação de uma pessoa: taxa em atraso, valor devido, acordo, multa por descumprimento de regimento e ocorrência registrada. Misturar as duas coisas é o erro que transforma um aviso em constrangimento.
A linha é simples de aplicar: se a informação, lida por um vizinho, expuser alguém, ela não é comunicado — é assunto de unidade. Nunca cite número de apartamento inadimplente em texto coletivo, nem em lista afixada, nem em nota de prestação de contas com identificação. A posição da unidade é informação da unidade e do condomínio, não do prédio.
Devo usar o grupo de WhatsApp do prédio para os avisos oficiais?
A API tem 18 endpoints de grupo, então tecnicamente dá. Na prática, o grupo do prédio é um canal de conversa entre vizinhos: qualquer aviso oficial cai no meio de piada, foto de cachorro perdido e discussão sobre vaga de garagem, e some. Pior: mensagem de cobrança em grupo expõe quem está em atraso na frente de todo mundo, e não existe forma elegante de consertar isso depois.
O caminho é o inverso — envio individual por unidade. É trabalhoso para uma pessoa e trivial para a API: é o mesmo laço, com uma chamada por unidade e uma pausa entre elas. Deixe o grupo para o que ele é bom: conversa. E se a administradora quiser um canal de mão única para avisos, mantenha-o separado do canal de cobrança.
Quem responde pela unidade: o proprietário ou o inquilino?
Depende do assunto, e o cadastro precisa refletir isso. Comunicado de manutenção e aviso de área comum interessam a quem mora — o inquilino. Taxa, rateio de obra e convocação de assembleia costumam ser assunto do proprietário, salvo o que a convenção e o contrato de locação disserem. Guarde os dois telefones com papéis distintos e escolha o destinatário pelo tipo de mensagem, em vez de manter um campo único chamado "contato".
Quando a unidade troca de morador, o cadastro fica errado em silêncio: o antigo inquilino continua recebendo aviso do prédio onde não mora mais. Duas defesas práticas: uma rodada de /user/check antes de campanhas de envio, e um pedido explícito de atualização na primeira mensagem de cada competência — "se você não é mais o responsável por esta unidade, responda AVISO para pararmos".
Consentimento, horário e uso responsável
Posso mandar mensagem para todos os moradores cadastrados?
Para o que é administração do condomínio, sim: quem mora ou é dono de uma unidade tem relação com o condomínio e espera receber aviso de taxa, manutenção e assembleia. O que essa relação não autoriza é qualquer outra coisa — propaganda de fornecedor parceiro, campanha de empresa amiga, pesquisa que não é do prédio. Usar a base de moradores para isso é o caminho mais curto para o número ser denunciado.
- Só o que é do condomínio. Taxa, boleto, manutenção, assembleia, prestação de contas, aviso de portaria. Convênio de academia, seguro e oferta de fornecedor são divulgação: exigem consentimento registrado, com data, e um caminho de saída.
- Horário civilizado. Aviso de condomínio em horário comercial, comunicado até o começo da noite. Emergência real — falta de água, incêndio, vazamento, portão travado — justifica mensagem de madrugada, e nesse caso o texto tem que ser objetivo e útil, sem rodeio. Se a rotina falhar e só for rodar às 23h, segure para o dia seguinte.
- Descadastro que funciona de verdade. Quem pede para não receber precisa parar de receber, em todas as rotinas — foi o que o
optOut do exemplo em Node fez. Vale uma ressalva honesta: convocação de assembleia e cobrança têm formalidades próprias, e sair do WhatsApp não elimina o aviso pelos meios que o condomínio já usa. Registre o pedido, pare o envio e continue avisando pelo canal formal — não force o morador a permanecer no WhatsApp.
- Ritmo compatível com um prédio. Fracione o disparo. Trezentas unidades saindo em três minutos é um padrão que nenhum número humano produz, e é assim que a conta chama atenção.
Sobre bloqueio de número, sem promessa mágica. Mensagem que o morador não quer aumenta o risco: quando muita gente bloqueia ou denuncia um número, o WhatsApp age. Esse risco existe em qualquer API — inclusive na oficial da Meta — e não pode ser eliminado, só reduzido: fale apenas de assunto do condomínio, mantenha volume e ritmo compatíveis com o tamanho do prédio, responda quem responde, pare com quem pediu para sair e nunca use a base de moradores para divulgação de terceiro. Quem promete que o número nunca será bloqueado não está sendo honesto.
Preço, conexão e o que esperar do painel
Quanto custa para uma administradora com vários prédios?
R$ 27 por mês por número conectado, sem cobrança por mensagem. A conta é por número, não por unidade nem por mensagem: um número que atende um prédio de 300 unidades custa o mesmo que um que atende um de 20. Cada número envia até 300 mensagens por dia — dá para avisar um prédio inteiro numa tacada, e o teto existe para a administradora não perder o número num comunicado disparado sem ritmo. O teste é de 14 dias sem cartão e só começa na primeira conexão — dá para criar a conta, integrar com calma e conectar o número depois.
É essa previsibilidade que torna o fluxo viável em condomínio, onde o volume é alto e concentrado em poucos dias do mês: aviso, boleto, vencimento, comunicado e edital somam facilmente cinco ou seis mensagens por unidade em uma competência. Com cobrança por mensagem, alguém acabaria cortando justamente o aviso preventivo — o mais barato e o mais útil de todos.
Como sei que a conexão do condomínio continua de pé?
O painel mostra o estado de cada conexão e atualiza a cada 10 segundos enquanto a página está aberta. Para não depender de alguém olhar a tela, assine os eventos de conexão no webhook: Disconnected avisa a queda e LoggedOut avisa que o número precisa reler o QR Code. E toda falha de envio deve virar registro numa lista visível — foi o papel do registrarFalha no exemplo — com alguém da administradora conferindo essa lista todo dia. Boleto que não saiu precisa virar tarefa, não silêncio.
Perguntas frequentes
Funciona com o sistema que a administradora já usa?
Funciona sempre que esse sistema conseguir fazer uma chamada HTTP ou exportar a posição das unidades. Se ele tem área de integração, chama a API direto quando gera a cobrança do mês. Se é fechado, leia os dados por fora — relatório, banco, planilha — e dispare com uma rotina própria ou uma ferramenta de automação no meio.
Preciso de um número para cada condomínio da carteira?
Não é obrigatório, é uma escolha de remetente. Um número por prédio faz o aviso chegar com a identidade daquele condomínio e separa as conversas; um número único da administradora concentra a operação e a equipe. Cada número conectado custa R$ 27 por mês, e trocar de remetente no código é trocar o header token da chamada.
Dá para mandar o boleto da taxa em PDF pelo WhatsApp?
Dá: o endpoint de envio de documento recebe o arquivo em base64, com nome e legenda. Use um nome de arquivo que o morador entenda meses depois, como taxa-03-2027-unidade-42B.pdf, e mande o PDF só uma vez por competência — no aviso anterior ao vencimento. Repetir o anexo em cada mensagem só pesa a conversa.
É melhor usar o grupo do prédio ou mandar unidade por unidade?
Unidade por unidade. O grupo é conversa entre vizinhos: o aviso oficial se perde no meio e, pior, qualquer assunto de cobrança exposto ali constrange quem está em atraso. O envio individual é trabalhoso para uma pessoa e trivial para a API — é o mesmo laço, com uma chamada por unidade e uma pausa entre elas.
Como evito cobrar um morador que já pagou?
Lendo a posição da unidade no momento do envio, dentro do laço, nunca de uma lista montada no dia anterior. Some a isso duas proteções: registrar o que já foi enviado para aquela unidade e competência, para não repetir, e pausar a régua assim que o morador responde que pagou, deixando a conferência para o financeiro.
O que fazer quando o morador responde pedindo manutenção ou reclamando do vizinho?
Isso vira tarefa, não resposta automática. A regra reconhece o que é previsível — segunda via, aviso de pagamento, confirmação de presença — e manda todo o resto para uma fila que alguém da administradora abre todo dia. Ocorrência entre vizinhos precisa de registro formal e de conversa com o síndico, nunca de texto automático.
O WhatsApp pode bloquear o número do condomínio?
Pode — em qualquer API, inclusive na oficial da Meta. O risco não é eliminável, é gerenciável: fale só de assunto do condomínio, fracione os disparos em vez de mandar todas as unidades no mesmo minuto, responda quem responde e pare de enviar para quem pediu para sair. O que dispara bloqueio é mensagem indesejada em massa, não o uso de API.
Como cadastrar proprietário e inquilino da mesma unidade?
Com papéis distintos no cadastro, e escolhendo o destinatário pelo tipo de mensagem: comunicado de manutenção e área comum interessam a quem mora, enquanto taxa, rateio e convocação costumam ser do proprietário, conforme a convenção e o contrato de locação. Quando a unidade troca de morador, o cadastro fica errado em silêncio — vale conferir os telefones periodicamente e pedir atualização na primeira mensagem de cada competência.