Academia, estúdio e personal convivem com três perdas que a grade de horários não resolve sozinha. A aula que cai de última hora, quando o professor adoece e a turma das 7h precisa saber antes de sair de casa. A vaga fantasma, quando alguém desiste da aula e não avisa, deixando um aparelho parado enquanto há gente na lista de espera daquele horário. E o aluno que parou de aparecer: ninguém cancela o plano, a pessoa simplesmente some por três semanas e cancela no vencimento, quando já não há o que fazer.
As três têm a mesma causa: a informação existe no sistema, mas depende de alguém abrir o WhatsApp e digitar. É aí que entra uma API de WhatsApp. O zapon expõe uma API REST direta — header token, JSON entrando e saindo — que o seu sistema de gestão de alunos, ou o seu fluxo de automação, chama como chamaria qualquer serviço. Abaixo estão o fluxo da turma passo a passo, os endpoints em cURL e Node, o evento que chega quando o aluno responde e o que fazer com ele.
As três perdas do estúdio que a grade de horários não enxerga
Por que avisar a turma de uma mudança de última hora não cabe no celular da recepção?
Porque a mudança quase sempre acontece fora do horário comercial. O professor avisa às 5h40 que não dará a aula das 7h, e alguém precisa abrir seis conversas, digitar seis vezes e conferir quem leu, com a recepção ainda fechada. Uma chamada de API percorre os matriculados daquele horário, envia com pausa entre os disparos e devolve a lista de quem não recebeu.
Os três buracos são diferentes e pedem tratamentos diferentes:
- A aula remarcada ou cancelada. É urgente e coletiva: precisa sair para a turma inteira, rápido, e ainda assim com ritmo — seis, doze ou trinta mensagens disparadas no mesmo segundo não parecem coisa de estúdio, parecem coisa de robô.
- A vaga que ninguém avisou. É silenciosa. A recepção só descobre quando a aula começa e sobra um reformer livre. O que falta não é lembrete: é um caminho de um toque para o aluno dizer que hoje não vai.
- O aluno que sumiu. É lenta e cara. A frequência cai antes da mensalidade, e quem para de vir por um mês já decidiu sair — só ainda não escreveu. Quem enxerga a queda de frequência no dia certo tem uma conversa possível; quem só vê o cancelamento tem um boleto a menos.
Por que uma vaga vazia numa turma de seis pesa tanto?
Porque a receita daquele horário é dividida por poucas cabeças e o custo não cai: o professor está lá, a sala está aberta, o aparelho foi reservado. Numa turma de seis, uma ausência não avisada é um sexto do horário perdido, e ela costuma vir acompanhada de uma segunda perda invisível — o aluno da lista de espera que teria vindo se soubesse a tempo. O prejuízo não é a cadeira vazia, é a cadeira vazia com fila do lado de fora.
Por que a recepção descobre tarde que o aluno abandonou o treino?
Porque ninguém tem tarefa de olhar ausência. O check-in acontece, o dado fica gravado e nenhuma tela grita quando um nome some. A conta só fecha no vencimento, e aí a conversa já não é sobre voltar a treinar, é sobre cancelar. Uma régua de frequência inverte a ordem: quem passou de um número combinado de aulas seguidas sem aparecer recebe uma mensagem enquanto ainda é assunto de treino, não de contrato.
O que a academia precisa ter para começar
O que preciso para avisar aluno por WhatsApp automaticamente?
Três coisas: um número de WhatsApp, uma conta no zapon com esse número conectado por QR Code ou código de pareamento, e um sistema que saiba quem está matriculado em cada horário. Não é preciso servidor próprio, conta na Meta, aprovação de template nem aplicativo instalado no celular do estúdio.
- Um número. Pode ser o mesmo que já está na fachada e no perfil do estúdio: a API opera esse número, não o substitui, e a recepção continua atendendo no aparelho. Com duas unidades ou duas marcas, é uma conexão para cada.
- Uma conexão no zapon. Cada conexão corresponde a um número e tem o seu
token, que é a credencial de todas as chamadas daquele número. A conexão se faz lendo o QR Code no painel, em Aparelhos conectados, ou por código de pareamento.
- Quem dispara. Ou o seu sistema de gestão chama os endpoints, ou uma ferramenta de automação lê a grade e a lista de check-ins e chama a API por HTTP.
Preciso trocar o número que o estúdio já divulga?
Não, e trocar é o pior caminho. O aluno responde para o número que ele conhece, e tudo o que a automação não trata continua visível na conversa, no aparelho do estúdio, para uma pessoa responder. A única regra é usar um número da empresa — nunca o celular pessoal do professor, que sai junto com ele no dia em que a parceria acabar.
E se o meu sistema de gestão de alunos for fechado?
Ainda funciona, só muda de onde vêm os dados. Se o sistema roda código ou tem área de integrações, ele chama a API direto no momento da matrícula e numa rotina diária. Se é fechado, leia por fora o que você já consegue exportar — relatório de turmas, lista de check-ins, planilha de frequência — e dispare a partir dali. O que a API precisa receber é sempre o mesmo par: telefone e texto.
O fluxo da turma, passo a passo
Como funciona o aviso de aula pelo WhatsApp do início ao fim?
Cinco etapas: (1) o aluno se matricula na turma e recebe o combinado da semana — dias, horário, professor e regra de reposição; (2) antes da aula sai um lembrete curto com botões, e o botão que importa é o de ausência; (3) quando alguém avisa que não vai, a vaga abre e a lista de espera daquele horário é chamada; (4) quando a aula cai ou troca de professor, o aviso sai para a turma inteira, com ritmo; (5) quem some por várias aulas seguidas entra numa régua de frequência com uma mensagem só.
Repare que o compromisso aqui é recorrente, e não pontual. Isso muda cada uma das cinco etapas.
1. O que enviar quando o aluno se matricula numa turma?
A mensagem de matrícula registra o combinado da semana inteira, não de uma data. Ela precisa dizer os dias, o horário fixo, o professor responsável e — a parte que evita quase toda discussão futura — a regra da casa sobre reposição e desmarcação: com quanta antecedência avisar, quantas reposições cabem no mês, até quando elas valem. Esse texto vale como referência para o resto do plano, e ainda serve de teste do canal: se a entrega falhar aqui, você descobre hoje que o cadastro tem telefone errado, não na manhã em que a aula cair.
2. Como é o lembrete da aula com botões?
Curto, na véspera à noite ou algumas horas antes, com três botões. E aqui está a inversão que diferencia este fluxo de qualquer agenda: o botão que interessa é o de ausência. Confirmar presença é bônus, porque o aluno de horário fixo já é presença esperada por padrão; a informação que muda alguma coisa no seu dia é a de quem não vem, porque é ela que abre a vaga a tempo. Ofereça também um caminho para reposição, que é o pedido natural de quem acabou de avisar a falta. 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.
3. O que acontece quando uma vaga abre?
Assim que a ausência chega, o horário passa a ter um lugar disponível e a lista de espera daquele dia e horário é chamada — em ordem de entrada e em lotes pequenos, nunca a lista inteira de uma vez. A vaga é uma só: chamar quinze pessoas para um lugar produz quatorze frustrações e uma reclamação na recepção. Quem responde primeiro fica com o lugar; quem responde depois recebe um aviso de que a vaga foi preenchida e continua na fila.
4. Como avisar a turma inteira de aula cancelada ou de professor substituto?
Uma rotina busca os matriculados naquele horário, pula quem tem opt-out registrado, envia um por um com pausa entre os disparos e guarda o identificador de cada mensagem. Quem falhar entra numa lista para a recepção ligar. O horário do disparo é parte da regra: se a aula é às 6h, o aviso útil é o da noite anterior ou o das 5h30 no limite — e às 5h30 só quando a alternativa é a pessoa sair de casa à toa.
5. Como falar com o aluno que parou de aparecer?
Com uma mensagem só, e ela é a mais difícil da operação inteira. Não pode soar cobrança, não pode soar culpa e não pode soar campanha de retenção. O que funciona é uma pergunta curta, com um caminho fácil de resposta e uma saída igualmente fácil para quem já decidiu parar. O gatilho é objetivo: um número combinado de aulas seguidas sem check-in. O texto, não: ele é escrito uma vez, com cuidado, e revisto por quem atende no balcão.
A vaga que abre: a economia da turma pequena
Por que o botão de ausência vale mais que o de confirmação?
Porque numa turma de horário fixo a presença é o padrão e a ausência é a novidade. Confirmação não muda nada no seu dia: o aluno já estava contado. A ausência, sim — ela libera um lugar que, avisado com algumas horas, vira aula para quem está na fila e receita que ia evaporar. É a única resposta que tem valor operacional imediato, e por isso deve ser o botão mais fácil de tocar.
Turma pequena tem uma aritmética própria. Num estúdio de pilates com seis lugares por horário, cada ausência não avisada custa um sexto do horário e, pior, esconde uma demanda real que não foi atendida. Quando a ausência é avisada, o mesmo evento vira duas notícias boas: o professor ajusta o plano da aula para cinco pessoas e alguém da lista de espera treina hoje.
Como chamar a lista de espera sem criar frustração em série?
Chamando em lote pequeno e com prazo curto. A mecânica que funciona é simples: convide as duas primeiras pessoas da fila daquele horário, dê um prazo explícito na mensagem, e só chame o próximo lote se ninguém responder dentro dele. Quem responder depois de a vaga ter sido preenchida precisa receber um aviso claro — não silêncio. Frustra menos ficar sabendo em uma frase que a vaga foi ocupada do que ir até o estúdio achando que conseguiu.
E se o aluno avisar quinze minutos antes da aula?
Aí a vaga não é mais chamável, e insistir em chamá-la é criar problema. Defina uma janela de corte no seu código — abaixo de um certo tempo para o início, a ausência é registrada, a vaga não é oferecida e ninguém da fila é acionado. Vale registrar assim mesmo: a série de avisos de cima da hora do mesmo aluno é justamente o dado que a recepção precisa para conversar com ele antes de a matrícula virar cancelamento.
A reposição precisa ser marcada na hora?
Não, e tentar resolver reposição por mensagem automática costuma dar errado, porque a resposta depende de haver lugar em outro horário. O caminho seguro é transformar o pedido em tarefa: o aluno toca no botão de reposição, o sistema registra o crédito conforme a regra do plano e a recepção devolve as opções de horário. A automação garante que o pedido não se perca; a escolha continua sendo de gente.
Os endpoints que o estúdio usa na prática
Quais endpoints da API do zapon uma academia precisa?
Três resolvem o fluxo inteiro: POST /chat/send/text para as mensagens escritas, POST /chat/send/buttons para o lembrete com resposta em um toque e POST /user/check para conferir quais telefones do cadastro têm WhatsApp. Todos usam a base https://api.zapon.dev e o header token. São 49 endpoints publicados, todos com schema, mas a operação de turma vive nesses três.
A autenticação é um header só, chamado token, copiado da conexão no painel: não é Authorization, não é Bearer, não há OAuth. Trate-o como a chave do estúdio — quem tem o token envia mensagens em nome da academia.
Como enviar a confirmação de matrícula na turma?
Um POST em /chat/send/text com dois campos obrigatórios: Phone, o número em formato internacional só com dígitos, e Body, o texto.
matrícula na turma — cURL
curl -X POST https://api.zapon.dev/chat/send/text \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Phone": "5511999999999",
"Body": "Marina, sua matrícula no Pilates Solo está confirmada.\n\nTurma: terças e quintas, 7h\nProfessora: Camila\nInício: 10/03\n\nPara desmarcar sem perder a aula, avise até 3 horas antes por aqui. Você tem 2 reposições por mês, para usar dentro do próprio mês."
}'
A resposta traz o identificador da mensagem no WhatsApp:
resposta da API
{
"code": 200,
"success": true,
"data": {
"Details": "Sent",
"Id": "7C41A0D9E2B34F16A8D5E90C1B77F203",
"Timestamp": "2026-03-05T19:40:11-03:00"
}
}
Guarde esse Id junto da matrícula e de cada aula: é ele que prova qual mensagem saiu e impede que uma rotina rodada duas vezes avise a mesma turma duas vezes.
Como mandar o lembrete da aula com botões?
O endpoint /chat/send/buttons envia botões de resposta rápida. Cada botão carrega um id definido por você, e é esse identificador que volta no webhook quando o aluno toca. Coloque o número da aula ali dentro: a resposta chega amarrada ao horário certo, sem depender de interpretar texto e sem confundir a terça com a quinta.
lembrete da aula com botões
POST https://api.zapon.dev/chat/send/buttons
token: SEU_TOKEN
{
"Phone": "5511999999999",
"Body": "Marina, sua aula de Pilates Solo é amanhã, 7h, com a Camila. Se não puder vir, avise agora que a gente chama alguém da lista de espera.",
"Footer": "Estúdio Exemplo",
"Buttons": [
{ "id": "aula8802|confirmar", "text": "Confirmo" },
{ "id": "aula8802|falta", "text": "Não vou hoje" },
{ "id": "aula8802|repor", "text": "Quero repor" }
]
}
O rótulo de cada botão é curto por natureza do WhatsApp, uma ou duas palavras. Se precisar oferecer uma escolha maior, como os horários possíveis de reposição na semana, o /chat/send/list entrega um menu em lista.
Como avisar a turma inteira de um cancelamento?
Com um laço, e não com uma lista de transmissão. O laço busca os matriculados naquele horário, pula quem pediu para não receber, respeita o responsável quando o aluno é menor de idade, dá uma pausa entre um envio e outro e registra as falhas.
aviso de aula cancelada — Node
// cancelamento.js — avisa a turma de um horário que não vai acontecer
const API = "https://api.zapon.dev";
const TOKEN = process.env.ZAPON_TOKEN;
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));
async function avisarTurma(aulaId, motivo) {
const aula = await buscarAula(aulaId);
const alunos = await matriculadosNoHorario(aula.turmaId); // quem tem horário fixo nesse dia
const falhas = [];
for (const aluno of alunos) {
if (aluno.optOut) continue; // pediu para sair: fora de toda rotina
const destino = aluno.menorDeIdade ? aluno.responsavel.telefone : aluno.telefone;
try {
const id = await enviarTexto(destino,
`${aluno.nome}, a aula de ${aula.modalidade} de hoje às ${aula.hora} não vai acontecer: ${motivo}.\n\n` +
`Sua reposição já está liberada. Responda por aqui o dia que prefere.`);
await registrarEnvio(aula.id, aluno.id, "cancelamento", id); // guarda o Id: não duplica
} catch (e) {
falhas.push({ aluno: aluno.nome, telefone: destino, erro: String(e) });
}
await pausa(5000 + Math.floor(Math.random() * 3000)); // ritmo humano entre os envios
}
if (falhas.length) await tarefaDaRecepcao("ligar para quem não recebeu", falhas);
}
Cada linha desse laço existe por um motivo. O continue respeita quem pediu para sair. O destino manda para o responsável quando o aluno é menor de idade. O registrarEnvio guarda o Id, então rodar a rotina de novo não repete o aviso. A pausa com uma variação aleatória evita a rajada de mensagens idênticas no mesmo instante. E a lista de falhas vira tarefa: quem não recebeu a mensagem precisa receber uma ligação, ou vai sair de casa às 6h para uma aula que não existe.
Como conferir se o telefone do aluno tem WhatsApp?
Base de academia acumula cadastro antigo: telefone fixo, número sem o nono dígito, aluno que trocou de operadora há dois anos. Antes de rodar a primeira régua de frequência em cima desse histórico, passe a lista pelo POST /user/check, que diz quais números têm conta no WhatsApp.
checar a base antes da primeira régua — 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": "" }
] } }
Rodar essa checagem antes economiza uma rodada de erros e, principalmente, evita começar a operação com um monte de falhas de entrega. Ao todo são 13 formas de envio — texto, imagem, áudio, vídeo, documento, sticker, localização, contato, enquete, lista, botões, template e edição de mensagem já enviada —, mais reação, presença de digitação, marcar como lido e histórico. Fora do trio principal, os mais úteis para o estúdio são documento, para mandar a ficha de treino em PDF depois da avaliação física, e imagem, para a grade de horários do mês.
A resposta do aluno: webhook, regra e ação
Como a resposta do aluno chega ao meu sistema?
Cada conexão tem um webhook próprio: você cadastra no painel a URL do seu sistema e escolhe os eventos. A partir daí, toda mensagem que chega naquele número é entregue como 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 há nada para ficar consultando de tempos em tempos.
O ciclo tem três partes que não se confundem: 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 turma nem o que é uma vaga; ela sabe que uma mensagem chegou.
Qual é o formato do evento de mensagem recebida?
O corpo traz o tipo do evento e a mensagem completa. Assim chega quem escreveu que não vai hoje:
webhook — mensagem recebida
{
"type": "Message",
"event": {
"Info": {
"ID": "3EB0F41C8A9D2077B6E1",
"Chat": "[email protected]",
"Sender": "[email protected]",
"IsFromMe": false, "IsGroup": false,
"PushName": "Marina Prado",
"Timestamp": "2026-03-09T21:14:03-03:00"
},
"Message": { "conversation": "hoje não vou" }
}
}
// quando o aluno toca num botão, muda só o bloco Message:
"Message": { "buttonsResponseMessage": {
"selectedButtonID": "aula8802|falta",
"Response": { "SelectedDisplayText": "Não vou hoje" }
} }
Duas observações que economizam horas de depuração: o corpo pode chegar como JSON puro ou como formulário codificado, com o JSON dentro de um campo, então 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 recepção respondendo um aluno vai acionar a sua automação.
Como transformar a ausência em vaga aberta?
Descarte o que não interessa, identifique a aula pelo identificador do botão, decida pela intenção e responda ao aluno dizendo o que aconteceu. É essa última parte que evita o clássico avisei e não sei se valeu.
receptor do webhook — Node/Express
app.post("/whatsapp/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; // o que o estúdio enviou, 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 (/^(sair|parar|para de mandar)$/.test(texto)) // descadastro pedido em texto
return registrarOptOut(telefone);
const aula = botao ? await buscarAula(botao.split("|")[0])
: await proximaAulaPorTelefone(telefone);
if (!aula) return filaDaRecepcao(telefone, texto);
const acao = botao ? botao.split("|")[1]
: /^(1|confirmo|vou)$/.test(texto) ? "confirmar"
: /^(2|nao vou|hoje nao vou|falta)$/.test(texto) ? "falta"
: /^(3|repor|reposicao)$/.test(texto) ? "repor" : null;
if (acao === "confirmar") {
await marcarPresencaEsperada(aula.id, telefone);
return enviarTexto(telefone, `Anotado. Até amanhã às ${aula.hora}.`);
}
if (acao === "falta") {
await marcarAusencia(aula.id, telefone);
await abrirVaga(aula.id); // chama a fila em lotes de 2
return enviarTexto(telefone, "Obrigado por avisar. Sua vaga de hoje foi liberada.");
}
if (acao === "repor") {
await criarPedidoDeReposicao(aula.id, telefone);
return enviarTexto(telefone, "Certo. A recepção manda os horários com vaga hoje mesmo.");
}
return filaDaRecepcao(telefone, texto); // o resto é assunto de gente
});
O abrirVaga é onde mora a regra do seu estúdio: quantos convites por lote, qual o prazo de resposta, qual a janela mínima antes da aula para ainda valer a pena convidar e o que dizer para quem respondeu tarde. Nada disso é da API — a API entrega o evento e envia as mensagens que a sua regra decidir.
E quando o aluno escreve outra coisa?
Ele vai escrever, e muito: pergunta se pode levar uma amiga, se tem aula no feriado, se dá para congelar o plano no mês da viagem, se o personal atende em dupla. Não tente responder tudo automaticamente. O que a regra não reconhece vira pendência para uma pessoa tratar, e a conversa já está no WhatsApp do estúdio, no aparelho de sempre. O papel da automação é sinalizar quais conversas esperam resposta. E há um limite claro: dor, lesão, restrição médica e adaptação de exercício são conversa de professor, nunca de mensagem automática.
O aluno que parou de aparecer: quando avisar e quando calar
Dá para automatizar a régua de frequência sem parecer cobrança?
Dá, com três limites. O gatilho é o dado de check-in, não a data do vencimento — o assunto é treino, não boleto. A régua manda uma mensagem, não uma sequência. E o texto precisa oferecer uma saída fácil, porque quem já decidiu sair e recebe insistência não responde: denuncia o número.
A régua de frequência é a parte da operação em que automação e bom senso mais se atritam. O que ela pode dizer é pouco, e é justamente esse pouco que funciona: que a pessoa não aparece há um tempo, que o estúdio notou e que ela pode responder em uma palavra. O que ela não pode fazer é diagnosticar, insinuar desleixo ou emendar um argumento de venda no fim.
Quantas aulas seguidas sem check-in antes de mandar a mensagem?
Isso depende da frequência contratada, e é por isso que contar em aulas perdidas funciona melhor do que contar em dias. Quem tem duas aulas por semana e some por quatro seguidas ficou duas semanas fora; quem tem uma por semana precisa de mais tempo para o mesmo sinal significar a mesma coisa. Escolha um número por plano, deixe explícito no código e não mande a mensagem no dia seguinte a um cancelamento avisado, a uma reposição já marcada ou a um congelamento — três situações em que o silêncio é combinado.
E se a pessoa não responder à mensagem de frequência?
Aí acabou. Não existe segunda régua, não existe lembrete da régua, não existe promoção de reativação três dias depois. Quem não respondeu está dizendo alguma coisa, e insistir com quem já decidiu sair só produz denúncia — que custa o número inteiro, aquele que a academia usa para falar com todo mundo. Registre a tentativa, deixe para a recepção decidir se vale uma ligação e siga.
E quando o aluno é menor de idade?
A comunicação vai para o responsável cadastrado, não para o adolescente. Isso muda o cadastro antes de mudar o código: cada aluno precisa de um campo de responsável com telefone próprio, e toda rotina — lembrete, cancelamento, régua de frequência — precisa escolher o destino a partir dele. É a mesma linha do exemplo em Node que decide o destino. O texto também muda de tom, porque quem lê é quem paga, leva e busca.
Consentimento, horário e uso responsável
Posso mandar qualquer mensagem para a base de alunos?
Não. Aviso sobre a aula em que o aluno está matriculado é comunicação de serviço, esperada — ele deu o telefone para isso. Chamada de lista de espera exige que ele tenha pedido para entrar naquela fila. Régua de frequência é fronteira: uma mensagem, com saída fácil. E promoção de plano anual, desafio de verão ou campanha de indicação é marketing, com consentimento registrado e descadastro que funciona.
Vale separar as quatro categorias antes de escrever a primeira linha de código, porque elas têm regras diferentes:
- Serviço. Confirmação de matrícula, lembrete da aula, cancelamento, troca de professor, aviso de vaga. O aluno espera, e é sobre o que ele contratou.
- Lista de espera. Só para quem pediu para entrar na fila daquele horário, e só sobre aquela vaga. Entrar na fila é um consentimento específico, com data de pedido registrada — e sair dela precisa ser tão fácil quanto entrar.
- Frequência. Uma mensagem, com um caminho curto de resposta e uma saída explícita. Nunca uma sequência, nunca com tom de cobrança de mensalidade.
- Marketing. Plano anual, aula experimental, desafio, indicação. Exige opt-in registrado, com data, e descadastro que realmente para o envio em todas as rotinas.
O horário importa mais aqui do que na maioria dos ramos, porque a operação começa cedo. A turma das 6h precisa saber na noite anterior: aviso às 5h30 chega com a pessoa já de tênis no pé, e às vezes já no carro. No outro extremo, nada de mensagem depois das 21h — quem treina às 6h dorme cedo, e mensagem que acorda alguém vira bloqueio. Se a rotina falhar e só for rodar de madrugada, segure o disparo e mande de manhã, com o texto ajustado.
O opt-out precisa ser consultado por toda rotina, sem exceção, e não só pela de marketing. Guarde num campo do cadastro, como o optOut do exemplo, e lembre que o pedido chega em qualquer palavra: para de mandar, não quero mais, me tira daqui. Alguém precisa olhar a fila de exceções todo dia e marcar esses casos à mão.
Sobre bloqueio de número, sem promessa mágica. Mensagem não solicitada aumenta o risco: quando muita gente denuncia ou bloqueia 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 com boas práticas: falar com quem está matriculado, manter volume e ritmo compatíveis com o tamanho do estúdio, responder quem responde e parar na hora com quem pediu para sair. Uma campanha de plano anual disparada para toda a base antiga num sábado de manhã é o caminho mais rápido para perder o número que a academia usa para tudo. 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 um estúdio com um número?
R$ 27 por mês por número conectado, sem cobrança por mensagem: o valor não muda se o estúdio mandar 80 ou 4.000 mensagens no mês. Cada número conectado tem cota de 300 mensagens por dia, folga larga para a agenda de um estúdio e um freio que evita o disparo em rajada que faz o WhatsApp bloquear o número. O teste é de 14 dias sem cartão e a contagem só começa na primeira conexão — dá para criar a conta, escrever a integração com calma e conectar o número só quando estiver pronto.
Essa previsibilidade é o que torna o fluxo viável para estúdio pequeno e para personal. Some as mensagens de uma semana: lembrete de cada aula de cada aluno, avisos de vaga, chamadas de lista de espera. Com cobrança por mensagem, o lembrete diário seria a primeira coisa a ser cortada — e é justamente ele que abre a vaga. Com duas unidades, é uma conexão por unidade, e o seu código escolhe de qual número a mensagem sai trocando o header token.
Como sei que a conexão 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 seu webhook: Disconnected avisa a queda e LoggedOut avisa que o número precisa reler o QR Code. E quando uma chamada de envio falhar, registre numa lista visível — foi o que a lista de falhas fez no exemplo — e faça alguém olhar essa lista todo dia, de preferência antes da primeira aula. Aviso de cancelamento que não saiu precisa virar ligação, não silêncio.
Perguntas frequentes
Meu estúdio trabalha com turma fixa, não com aula agendada. Muda alguma coisa?
Muda o começo e o fim do fluxo. Na turma fixa, a confirmação é da matrícula e vale para a semana inteira: dias, horário, professor e regra de reposição. O lembrete de cada aula existe para capturar a exceção, ou seja, a ausência, e não para confirmar o que já está combinado. E a régua de frequência substitui o controle de faltas isoladas, porque o que interessa é a sequência de aulas perdidas, não uma falta.
E o aluno que toca em Confirmo e mesmo assim não aparece?
A confirmação nunca foi garantia, e tratá-la como garantia é o erro. O valor do botão está na ausência avisada, que abre a vaga a tempo. Para quem confirma e falta com frequência, o dado útil é a série: registre cada confirmação e cada check-in e deixe visível quem tem muitas confirmações sem presença, para a recepção conversar. Regra de multa ou de desconto de reposição é decisão da casa, não da automação.
Vale a pena para um personal com poucos alunos?
Vale quando os horários são disputados e as trocas são frequentes, que é o caso normal de personal. Com dez alunos, o ganho não está no volume, e sim em não perder um horário porque o aviso de remarcação ficou sem resposta no meio de outras conversas. Como o preço é por número conectado e não por mensagem, o custo é o mesmo com dez ou com cem alunos.
Posso avisar o vencimento da mensalidade por aqui?
Pode, tratando como comunicação de serviço: um aviso objetivo com valor, data e a forma de pagar, sem sequência de cobrança e sem repetição diária. Mantenha essa rotina separada da régua de frequência, com um texto próprio, e nunca use o dado de ausência para fazer cobrança. Quem pediu para não receber avisos de rotina precisa ser respeitado também aqui, com a informação disponível de outro jeito.
Como aviso a turma inteira sem virar lista de transmissão?
Enviando um a um, por código, com pausa entre os disparos e consulta ao opt-out antes de cada envio. A diferença prática é grande: a lista de transmissão só chega a quem tem o número salvo, manda tudo de uma vez e não devolve informação nenhuma. O laço com pausa fala com quem realmente está matriculado naquele horário, respeita quem pediu para sair, guarda o identificador de cada mensagem e entrega a lista de quem não recebeu, para a recepção ligar.
O aluno é menor de idade. Para quem vai a mensagem?
Para o responsável cadastrado. Isso exige um campo de responsável com telefone próprio no cadastro do aluno e uma escolha de destino em toda rotina, do lembrete de aula até a régua de frequência. O tom do texto também muda, porque quem lê é quem paga e organiza a rotina do adolescente. Quando a matrícula é do responsável, o consentimento de qualquer comunicação de divulgação é dele.
Quanto custa e existe limite diário de mensagens?
R$ 27 por mês por número conectado, sem cobrança por mensagem. A cota é de 300 mensagens por dia por número, o suficiente para os avisos de turma de um estúdio cheio, e ela existe para segurar o ritmo de envio que derruba número no WhatsApp. O teste é de 14 dias sem cartão e só começa a contar quando você conecta o primeiro número, o que permite montar a integração antes de gastar o período de avaliação.