Este ramo tem uma particularidade que nenhum outro negócio de agenda tem: o destinatário da mensagem não é quem recebe o serviço. Você fala com a Carla, mas o combinado é sobre o Thor — e a Carla ainda tem a Mel, do antipulgas mensal, e o Bento, com reforço da antirrábica em abril. Automação construída em torno do cliente erra. A chave do fluxo é o pet.
Daí saem três buracos de caixa: o banho e tosa que fura, com banhista parado e o leva-e-traz na rua atrás de um animal que não vai sair; o retorno de vacina que ninguém remarca, porque não há agendamento — só uma data de vencimento no prontuário; e a rotina preventiva, que depende de o tutor lembrar do vermífugo sozinho. Os três se resolvem com o mesmo canal: uma API de WhatsApp chamada pelo sistema que já tem a agenda e o prontuário. O zapon expõe uma API REST — header token, JSON entrando e saindo. Abaixo, o fluxo, os endpoints em cURL e Node e o que fazer com a resposta.
A dor: o serviço é do pet, a conversa é com o tutor
Por que a agenda de banho e tosa fura tanto?
Porque banho é compromisso de baixa prioridade: o tutor marca por telefone, não anota, e no dia aparece um imprevisto. Faltar não dói para ele — o custo fica com a casa, que segurou a vaga, escalou o banhista e às vezes mandou o carro sair. Um lembrete na véspera que se responde com um toque devolve a vaga a tempo.
- O banho que fura. A vaga é nominal: sai uma, ninguém entra sem aviso. Cancelamento na véspera ainda dá tempo de chamar a fila de espera.
- A vacina que vence. Não há agendamento para lembrar, só uma data na carteira de vacinação de cada animal. Ninguém confere isso à mão depois do terceiro mês.
- A prevenção que depende de memória. Vermífugo por intervalo, antipulgas mensal, antiparasitário conforme o peso do animal. Sem lembrete, o pet volta com carrapato.
Por que o telefone do petshop não para de tocar?
Por uma pergunta repetida o dia inteiro: já posso buscar? Enquanto o tutor não sabe se a tosa acabou, ele liga, e cada ligação tira alguém do balcão ou da tesoura. Ligação também não deixa registro; a resposta pelo WhatsApp chega como evento com telefone, horário e conteúdo, e vira campo na ficha do agendamento.
O que a casa precisa ter para começar
O que preciso para avisar o tutor 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 quais pets têm banho amanhã e quais têm vacina vencendo. Não é preciso servidor próprio, conta na Meta, aprovação de template nem aplicativo instalado no celular do balcão.
- Um número. Pode ser o da fachada: a API opera o mesmo número e o balcão continua atendendo no aparelho. Nunca o celular pessoal do veterinário. Com duas lojas, uma conexão por loja.
- Uma conexão no zapon. Cada conexão é um número e tem o seu
token, credencial de todas as chamadas daquele número.
- Quem dispara. O seu sistema de gestão chama os endpoints, ou uma ferramenta de automação lê a agenda e o prontuário e chama a API por HTTP.
O meu sistema precisa ter cadastro separado de tutor e de pet?
Precisa, e provavelmente já tem: todo software do ramo guarda peso, porte e carteira de vacinação por animal. O que costuma faltar é o caminho de volta — dado o pet, achar o telefone do tutor; dado o telefone que respondeu, achar de qual pet ele fala. Se o cadastro tem só o cliente, com uma observação escrita "cachorro Thor", o trabalho começa aí, não na API.
O fluxo do petshop e da clínica, passo a passo
Como funciona o fluxo de banho, tosa e vacina ponta a ponta?
Cinco etapas: (1) o banho é agendado e o tutor recebe a confirmação com o nome do pet, o serviço e a janela do leva-e-traz; (2) na véspera sai o lembrete com botões; (3) no dia, quando o pet sai do banho, sai o aviso de pronto para retirada; (4) o tutor responde e o webhook entrega isso ao seu sistema; (5) em paralelo, a régua sanitária dispara vacina, vermífugo e antipulgas pela data do prontuário.
Os quatro primeiros nascem de um agendamento. O quinto nasce de uma data — por isso é rotina à parte.
1. O que enviar assim que o banho é agendado?
A confirmação escrita, com o nome do pet e o serviço exatamente como foi combinado: tosa na máquina, tosa higiênica, hidratação, corte de unha. Tosa entendida errada é a reclamação mais cara do ramo, e a defesa é ter o combinado por escrito no celular do tutor desde a marcação. Diga a janela do leva-e-traz e o que ele precisa separar. Se a entrega falhar aqui, você descobre hoje que o telefone está errado, não na véspera.
2. Como mandar o lembrete da véspera?
Uma rotina diária varre os agendamentos do dia seguinte e dispara um lembrete por pet. A mensagem vai para o tutor, mas nomeia o animal: "amanhã é o banho do Thor" funciona; "seu agendamento de amanhã" não diz nada a quem tem três. Com leva-e-traz, confirme endereço e janela de coleta no mesmo texto — o motorista sai antes de o tutor acordar. Botões deixam a resposta a um toque; aceite texto também.
3. Quando avisar que o pet está pronto para retirada?
No instante em que o banhista dá baixa no serviço. É o passo que mais reduz telefone tocando e o mais fácil de integrar. Diga o nome do pet, que ele está pronto, até que horas a casa espera e o valor a pagar. Entre as 13 formas de envio existe imagem, e o uso óbvio aqui é a foto do pet depois da tosa.
4. Como o tutor responde para confirmar ou remarcar?
Na conversa, tocando no botão ou escrevendo: confirma, remarca, avisa que vai buscar mais tarde ou manda uma dúvida. Isso vira um evento entregue por webhook no endereço que a casa cadastrar, com a mensagem inteira. É a peça que fecha o ciclo — e vale a regra dura do ramo: dúvida clínica nunca é respondida por automação.
5. Como a régua sanitária dispara sem agendamento?
Uma rotina separada varre o prontuário procurando datas de vencimento: reforço anual de vacina, vermífugo por intervalo, antipulgas mensal, retorno pós-cirúrgico e retirada de pontos. Cada linha encontrada é um par de pet e tipo. Antes de enviar, a rotina agrupa por tutor: quem tem três animais recebe uma mensagem, não três seguidas.
Os endpoints que a casa usa na prática
Quais endpoints da API do zapon um petshop precisa?
Três resolvem o fluxo: POST /chat/send/text para as mensagens, POST /chat/send/buttons para o lembrete com resposta em um toque e POST /user/check para conferir quais telefones do cadastro de tutores ainda têm WhatsApp. Base https://api.zapon.dev, header token. São 49 endpoints publicados, todos com schema, mas a agenda do petshop vive nesses três.
A autenticação é um header só, token, copiado da conexão no painel: não é Authorization, não é Bearer, não há OAuth. Trate-o como senha.
Como enviar a confirmação do banho 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.
confirmação de banho e tosa — cURL
curl -X POST https://api.zapon.dev/chat/send/text \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Phone": "5511999999999",
"Body": "Carla, o banho do Thor está agendado.\n\nData: 14/03 (sexta)\nServiço: banho + tosa higiênica (sem tosa na máquina)\nLeva-e-traz: passamos entre 8h e 9h na Rua das Palmeiras, 45\n\nSepare a coleira e a medicação de uso contínuo, se houver. Para remarcar, é só responder por aqui."
}'
O parêntese dizendo o que não está incluído custa uma linha e evita a discussão do balcão. A resposta traz o identificador da mensagem:
resposta da API
{
"code": 200,
"success": true,
"data": {
"Details": "Sent",
"Id": "7A31C0D45E9B22F1A88C4B7E10D3F662",
"Timestamp": "2026-03-08T10:41:17-03:00"
}
}
Guarde esse Id junto do agendamento: ele prova qual mensagem saiu e impede reenvio duplicado.
Como pedir a confirmação da véspera em botões?
O /chat/send/buttons envia botões, de rótulo curto. Cada um carrega um id definido por você, e é ele que volta no webhook. Aqui o formato importa: o id precisa carregar o agendamento e o pet, porque a mesma conversa pode ter dois lembretes abertos no mesmo dia. 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.
lembrete da véspera com botões
POST https://api.zapon.dev/chat/send/buttons
token: SEU_TOKEN
{
"Phone": "5511999999999",
"Body": "Carla, amanhã é o banho do Thor (banho + tosa higiênica). O leva-e-traz passa entre 8h e 9h na Rua das Palmeiras, 45. Podemos confirmar?",
"Footer": "Petshop Exemplo",
"Buttons": [
{ "id": "bnh4471|thor|confirmar", "text": "Confirmar" },
{ "id": "bnh4471|thor|remarcar", "text": "Remarcar" },
{ "id": "bnh4471|thor|cancelar", "text": "Cancelar" }
]
}
Para mais opções, como três janelas de horário para remarcar, o /chat/send/list entrega um menu em lista sem estourar o limite de três botões.
Como limpar os telefones antigos do cadastro de tutores?
Cadastro de petshop acumula número de dez anos atrás, telefone fixo e celular sem o nono dígito. Antes de rodar a régua de vacina, passe a lista no POST /user/check. Enviar para número morto não é só desperdício: sequência de entregas que não chegam é o padrão que um número de spam produz.
checar telefones de tutores — cURL
curl -X POST https://api.zapon.dev/user/check \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "Phone": ["5511999999999", "551133334444"] }'
// resposta
{ "code": 200, "success": true, "data": { "Users": [
{ "Query": "5511999999999", "IsInWhatsapp": true, "JID": "[email protected]" },
{ "Query": "551133334444", "IsInWhatsapp": false, "JID": "" }
] } }
São 13 formas de envio ao todo — 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 "digitando", marcar como lido e histórico. Fora do trio principal, a casa usa imagem, para a foto depois da tosa, e documento, para a carteira de vacinação em PDF.
A régua sanitária por pet: uma data no prontuário vira mensagem
Como transformar a data de vencimento da vacina em lembrete automático?
A régua sanitária não olha para a agenda, olha para o prontuário. Todo dia uma rotina busca os pets cujo reforço, vermífugo ou antipulgas vence numa janela à frente — quinze dias para vacina, três para o antipulgas mensal — e monta uma mensagem por tutor. A chave da varredura é o animal: cada pet tem a sua carteira, os seus intervalos e o seu peso.
É a diferença estrutural do ramo. No banho existe um agendamento com data e hora, e a mensagem pendura nele. Na vacina não existe nada: existe a anotação de que a antirrábica do Thor foi aplicada em 12 de abril do ano passado. Ninguém marcou o retorno, e o vencimento passa em silêncio até o dia em que o tutor precisa da carteira em dia para viajar.
Como fica a rotina de disparo da régua em Node?
Ela faz quatro coisas na ordem: varre os vencimentos, descarta quem pediu para não receber, agrupa por tutor e só então envia, guardando o Id e respirando entre um envio e outro.
régua sanitária — Node
// regua-sanitaria.js — roda todo dia às 9h
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));
// vencimentos do prontuário: vacina, vermífugo, antipulgas, retirada de pontos
const pendencias = await vencimentosDoDia();
// cada item: { tutorId, pet, tipo, vence, optOut }
// tutor com 3 pets recebe UMA mensagem, nunca três seguidas
const porTutor = new Map();
for (const p of pendencias) {
if (p.optOut) continue; // descadastro vale para toda rotina
if (!porTutor.has(p.tutorId)) porTutor.set(p.tutorId, []);
porTutor.get(p.tutorId).push(p);
}
for (const [tutorId, itens] of porTutor) {
const tutor = await buscarTutor(tutorId);
const linhas = itens.map((i) => `- ${i.pet}: ${i.tipo} vence em ${i.vence}`).join("\n");
const corpo = itens.length === 1
? `${tutor.nome}, o ${itens[0].tipo} do ${itens[0].pet} vence em ${itens[0].vence}. Reservo um horário?`
: `${tutor.nome}, os seus pets têm ${itens.length} pendências:\n\n${linhas}\n\nDá para resolver tudo na mesma visita. Reservo?`;
try {
const id = await enviarTexto(tutor.telefone, corpo);
await registrarEnvio(tutorId, "regua_sanitaria", id); // guarda o Id: evita duplicar
} catch (e) {
await registrarFalha(tutorId, "regua_sanitaria", String(e)); // vira tarefa do balcão
}
await pausa(5000); // ritmo de casa que trabalha, não de rajada
}
O registrarEnvio serve para não repetir a pendência se a rotina rodar de novo e para não cobrar a mesma vacina daqui a três dias. Vencimento não some porque o tutor ignorou a mensagem; sem marcar que já avisou, a régua vira insistência diária — o caminho mais curto para o bloqueio.
Um tutor, vários pets: como não confundir o Thor com a Mel
Como avisar um tutor que tem mais de um pet sem mandar três mensagens?
Agrupando antes de enviar. A varredura termina com pendências soltas; entre ela e o envio entra um agrupamento por tutor, e o texto muda conforme o tamanho do grupo: um pet vira uma frase, dois ou mais viram uma lista com o nome de cada animal. Três mensagens seguidas do mesmo número, no mesmo minuto, é o que o tutor denuncia.
O agrupamento resolve a saída. Falta a volta, onde a maioria das integrações quebra: o tutor toca em "Confirmar" e o seu sistema precisa saber de qual animal ele fala. Se o id do botão carregar só o agendamento, a semana em que a Carla tiver banho do Thor e retorno da Mel vai gerar a baixa errada — e o erro só aparece quando o motorista chegar na porta.
O que o id do botão precisa carregar?
Três pedaços separados por barra vertical, no formato bnh4471|thor|confirmar: o agendamento, o pet e a ação. O primeiro diz onde dar baixa, o segundo permite responder chamando o animal pelo nome e o terceiro diz o que fazer. Use o identificador interno do pet, não o nome digitado: dois cachorros chamados Thor no mesmo cadastro é questão de tempo.
E quando o tutor responde em texto, sem tocar no botão?
Aí não há id, só um telefone e uma frase. Procure o próximo compromisso daquele tutor: se ele tem um só, aplique a ação nele; se tem dois em aberto, não adivinhe — pergunte qual, listando os nomes dos animais, ou mande para a fila do balcão. Baixa errada em agenda é pior que baixa nenhuma, porque ninguém confere.
A resposta do tutor: webhook, regra e ação
Como recebo no meu sistema a resposta do tutor?
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 no 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.
O ciclo tem três partes 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 é um banho nem o que é uma dose de reforço.
Qual é o formato do evento de mensagem recebida?
O corpo traz o tipo do evento e a mensagem completa. Assim chega quem respondeu escrevendo:
webhook — mensagem recebida
{
"type": "Message",
"event": {
"Info": {
"ID": "3EB0F91C7A5D40B2E118",
"Chat": "[email protected]",
"Sender": "[email protected]",
"IsFromMe": false, "IsGroup": false,
"PushName": "Carla Menezes",
"Timestamp": "2026-03-13T19:22:05-03:00"
},
"Message": { "conversation": "pode vir buscar ele sim" }
}
}
// quando ele toca num botão, muda só o bloco Message:
"Message": { "buttonsResponseMessage": {
"selectedButtonID": "bnh4471|thor|confirmar",
"Response": { "SelectedDisplayText": "Confirmar" }
} }
Duas observações que economizam horas: o corpo pode chegar como JSON puro ou como formulário codificado, com o JSON dentro de um campo — aceite os dois. E o que o próprio número envia também gera evento, com IsFromMe igual a true: ignore, ou a atendente respondendo um tutor no aparelho aciona a sua automação.
Como dar baixa no agendamento a partir da resposta?
Descarte o que não interessa, separe agendamento e pet a partir do id, decida pela ação e responda ao tutor. Antes de tudo isso, um filtro que só existe neste ramo: o que parece sintoma sai da automação e vai para a fila da clínica.
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 a loja 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();
// sintoma nunca é respondido por automação — vai para o veterinário
const SINTOMA = /(vomit|diarrei|convuls|sangr|apatic|engasg|atropel|nao come|não come|caroco|caroço|manca)/;
if (SINTOMA.test(texto)) return filaClinica(telefone, texto, "prioridade");
const [agendaId, petId, acaoBotao] = botao.split("|"); // bnh4471 | thor | confirmar
const ag = agendaId ? await buscarAgendamento(agendaId, petId)
: await agendamentoUnicoEmAberto(telefone); // null se houver 2+
if (!ag) return filaDoBalcao(telefone, texto); // não adivinhe o pet
const acao = acaoBotao
|| (/^(1|sim|pode|confirmo|confirmado)$/.test(texto) ? "confirmar"
: /^(2|remarcar|outro dia)$/.test(texto) ? "remarcar"
: /^(3|cancelar|nao vai|não vai)$/.test(texto) ? "cancelar" : null);
if (acao === "confirmar") {
await atualizarStatus(ag.id, "confirmado");
return enviarTexto(telefone, `Confirmado. Buscamos o ${ag.pet.nome} entre ${ag.janela}.`);
}
if (acao === "cancelar") {
await atualizarStatus(ag.id, "cancelado");
await liberarVaga(ag); // avisa a fila de espera do banho
await tirarDaRota(ag); // e o motorista não sai à toa
return enviarTexto(telefone, `Banho do ${ag.pet.nome} cancelado. Quando quiser, é só chamar.`);
}
if (acao === "remarcar") {
await atualizarStatus(ag.id, "remarcar");
return enviarTexto(telefone, `Certo. O balcão te chama com os horários do ${ag.pet.nome}.`);
}
return filaDoBalcao(telefone, texto); // o resto é assunto de gente
});
E quando o tutor escreve qualquer outra coisa?
Ele vai escrever: quanto fica a tosa de um shih tzu, se tem ração sem grãos, que a Mel está coçando a orelha. As duas primeiras esperam o balcão. A terceira exige disciplina: orientação clínica, dose de medicamento e triagem de sintoma são trabalho de médico-veterinário, e nenhuma automação deve responder isso, nem com um texto pronto e prudente. O papel do fluxo é sinalizar que aquela conversa espera uma pessoa.
Consentimento, horário e uso responsável
Posso mandar lembrete de vacina para toda a base de tutores?
Depende de quem é o tutor hoje. Lembrete de reforço de um pet que é cliente da casa é comunicação sobre um serviço em curso: a vacina foi aplicada ali e o vencimento está no prontuário. A mesma mensagem para quem passou uma vez há três anos não é lembrete, é prospecção — e prospecção exige consentimento registrado e descadastro que funciona.
- Operacional. Confirmação, lembrete da véspera, janela do leva-e-traz, pet pronto, retorno pós-cirúrgico, retirada de pontos e vencimento de vacina de animal atendido na casa.
- Marketing. Promoção de ração, pacote de banho com desconto, novidade da loja. É divulgação, por mais simpático que seja o texto: pede opt-in explícito, com data e origem registradas.
- Base fria. Tutor que sumiu há anos não é público de régua sanitária. Trazê-lo de volta é campanha de reativação, com o mesmo critério do item acima.
Sobre horário: como o leva-e-traz sai cedo, o lembrete da véspera precisa sair na noite anterior, para dar tempo de tirar o pet da rota. Mas noite anterior é entre 18h e 20h, não 23h. Se a rotina falhar e só rodar tarde, segure para as 7h. A régua sanitária, que não tem urgência, cabe no meio da manhã. E o descadastro precisa ser um campo do cadastro do tutor, consultado por toda rotina — foi o que o optOut fez no exemplo em Node.
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: fale com quem já é cliente da casa, mantenha volume compatível com o tamanho do petshop, agrupe as pendências em vez de disparar uma mensagem por pet e pare na hora em que alguém pedir para sair. 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 petshop com um número?
R$ 27 por mês por número conectado, sem cobrança por mensagem: o valor não muda se a casa mandar 40 avisos por dia ou 200. O teto é de ritmo, não de preço: 300 mensagens por dia em cada número conectado, calibrado para o WhatsApp não ler a agenda de banho e de vacina como disparo em massa. 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 só depois conectar o número.
Essa previsibilidade importa aqui porque o número de mensagens por cliente é alto: confirmação, lembrete, aviso de retirada e mais a régua sanitária de cada animal. Com cobrança por mensagem, o custo cresceria junto com o movimento até alguém cortar o aviso de retirada — justamente o que mais economiza tempo do balcão.
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 faça alguém conferir no começo do expediente a lista de falhas de envio — foi o que o registrarFalha guardou.
Perguntas frequentes
Como o fluxo lida com um tutor que tem mais de um pet?
A chave de tudo é o pet, não o cliente. A varredura acha pendências por animal, agrupa por tutor antes de enviar e manda uma mensagem só, listando cada pet pelo nome. Na volta, o id do botão carrega agendamento e pet, então a baixa cai no registro certo. Quando a resposta vem em texto e o tutor tem dois compromissos em aberto, a regra não adivinha: pergunta qual ou manda para a fila do balcão.
O banho é quinzenal. Como lembrar sem virar chateação?
Cliente recorrente precisa de menos mensagem, não de mais. Para quem tem banho fixo, o lembrete da véspera basta, e a confirmação inicial pode sair só quando a data mudar. Ofereça um caminho para o tutor pedir menos avisos e respeite essa escolha em todas as rotinas. Repetição idêntica toda quinzena é o que faz alguém silenciar o número da casa.
Dá para fazer triagem de emergência veterinária por mensagem?
Não, e o fluxo deve ser construído para impedir isso. Vômito, convulsão, sangramento, engasgo, atropelamento e apatia são trabalho de médico-veterinário, e um texto automático nessa hora atrasa o atendimento. O que a automação faz é reconhecer o assunto pelo conteúdo da mensagem e colocar a conversa no topo da fila humana.
Posso mandar o resultado do exame do pet pelo WhatsApp?
Mande o aviso de que o resultado saiu e como retirá-lo, não o laudo interpretado. Enviar o PDF é possível entre as formas de envio da API, mas resultado sem leitura de um veterinário gera pânico ou falsa tranquilidade, e as duas coisas voltam como ligação. O melhor arranjo é avisar que está pronto e oferecer o retorno para explicar.
O leva-e-traz atrasou. Dá para avisar automaticamente?
Dá, e é um dos avisos mais bem recebidos. Se o sistema da rota sabe que o motorista está atrasado, ele chama a API com a nova janela e o nome do pet. Vale a mesma regra dos outros envios: uma mensagem por ocorrência, nunca uma a cada dez minutos, e sempre com o horário novo.
A casa tem loja e clínica no mesmo número. Isso atrapalha?
Não, desde que a sua regra saiba separar. O webhook entrega tudo o que chega naquele número, e cabe ao seu código decidir: resposta de botão de banho dá baixa na agenda, assunto de produto vai para a fila comercial e o que parece sintoma vai para a fila da clínica. Se o volume dos dois lados crescer muito, separe em duas conexões, cada uma com o seu token e o seu webhook.
Quanto custa, qual é o limite diário e como funciona o teste?
R$ 27 por mês por número conectado, sem cobrança por mensagem, com limite de 300 mensagens por dia em cada número conectado — proteção contra o bloqueio que atinge quem dispara em rajada. O teste é de 14 dias sem cartão e só começa a contar quando você conecta o primeiro número, então dá para preparar a integração antes de gastar dia de teste. Com dois números, são duas conexões, e cada uma tem a sua própria cota diária.