Atualizado em 25/10/2026
No agendamento automático com IA no WhatsApp, o cliente escreve em linguagem natural (“tem horário quinta à tarde?”), um agente de IA consulta a agenda real por meio de ferramentas, oferece os horários livres, reserva o escolhido e confirma na conversa. Depois, o sistema envia lembretes e pedidos de confirmação por templates de utilidade e trata reagendamentos e cancelamentos pelo mesmo caminho. Quem decide se um horário existe é a agenda, nunca o modelo de linguagem.
Este artigo foca no que é específico do agendamento: as ferramentas que o agente usa, como evitar dois clientes no mesmo horário, a régua de confirmação e lembrete e as regras da Meta que valem para cada mensagem. A infraestrutura geral (webhook, fila, handoff) está no guia de chatbot com IA no WhatsApp.
Chatbot genérico x agente de agendamento
Um chatbot de atendimento responde perguntas. Um agente de agendamento executa uma transação com efeito no mundo real: ele ocupa um horário de uma pessoa ou de uma sala. Isso muda o desenho:
| Aspecto | Chatbot de atendimento | Agente de agendamento |
|---|---|---|
| Fonte da verdade | Base de conhecimento | Agenda (Google Agenda, sistema da clínica, ERP) |
| Ação principal | Responder | Consultar, reservar, remarcar, cancelar |
| Risco principal | Resposta errada | Horário duplicado ou inexistente |
| Mensagens fora da janela | Raras | Lembrete e confirmação, por template |
| Fim da conversa | Dúvida resolvida | Reserva gravada e confirmada |
Como o fluxo funciona
- Cliente pede. “Quero marcar uma limpeza de pele na semana que vem.” A mensagem abre a janela de 24 horas.
- Agente entende. O modelo extrai serviço, período e preferências e, se faltar algo, pergunta.
- Agente consulta. Chama a ferramenta
buscar_horarioscom serviço e intervalo de datas. A ferramenta lê a agenda e devolve até três ou quatro opções. - Cliente escolhe. As opções vão como botões ou lista, não como texto livre para o cliente copiar.
- Agente reserva. Chama
criar_agendamento, que grava o horário com trava para não haver duplicidade. - Confirmação. O agente responde com data, hora, endereço e como remarcar.
- Lembrete. Na véspera, o sistema envia um template de utilidade com botões “Confirmo” e “Remarcar”.
- Remarcação ou cancelamento. O botão volta para o agente, que repete os passos 3 a 6.
As ferramentas do agente
O modelo não deve “saber” a agenda. Ele chama funções do seu backend e recebe o resultado. Quatro ferramentas cobrem a maioria dos casos:
| Ferramenta | Entrada | Saída |
|---|---|---|
buscar_horarios | serviço, data inicial, data final, profissional (opcional) | lista de horários livres com ID |
criar_agendamento | ID do horário, nome, telefone | ID da reserva ou erro “horário ocupado” |
remarcar_agendamento | ID da reserva, novo ID de horário | reserva atualizada |
cancelar_agendamento | ID da reserva, motivo | confirmação |
Definição da ferramenta de busca com os parâmetros em JSON Schema. O nome do campo que envolve o esquema (input_schema, parameters) muda de um provedor de LLM para outro:
{
"name": "buscar_horarios",
"description": "Lista horários livres para um serviço. Use sempre antes de oferecer horários ao cliente.",
"input_schema": {
"type": "object",
"properties": {
"servico_id": { "type": "string", "description": "ID do serviço no catálogo interno" },
"data_inicio": { "type": "string", "format": "date" },
"data_fim": { "type": "string", "format": "date" },
"profissional_id": { "type": "string" }
},
"required": ["servico_id", "data_inicio", "data_fim"]
}
}
Se a agenda está no Google Agenda, a ferramenta pode usar a consulta de disponibilidade (POST https://www.googleapis.com/calendar/v3/freeBusy, com timeMin, timeMax e a lista de agendas), segundo a documentação do Google, e depois aplicar as regras do negócio: duração do serviço, intervalo entre atendimentos e horário de funcionamento.
Instruções que o prompt de sistema precisa ter:
- Nunca ofereça um horário que não veio de
buscar_horarios. - Nunca diga “agendado” antes de
criar_agendamentoretornar sucesso. - Datas relativas (“quinta”, “amanhã”) são resolvidas no fuso do negócio, informado no prompt junto com a data atual.
- Se o cliente pedir algo fora do escopo (diagnóstico, preço negociado, reclamação), passe para uma pessoa.
Evitando dois clientes no mesmo horário
Dois clientes podem ver o mesmo horário livre e escolher ao mesmo tempo. A reserva precisa ser atômica no banco, e não uma checagem seguida de gravação:
// Reserva atômica: só grava se o horário ainda estiver livre.
export async function criarAgendamento(db, { slotId, nome, waId }) {
const r = await db.query(
`UPDATE horarios
SET status = 'reservado', cliente_wa_id = $2, cliente_nome = $3, reservado_em = now()
WHERE id = $1 AND status = 'livre'
RETURNING id, inicio, profissional_id`,
[slotId, waId, nome]
);
if (r.rowCount === 0) return { ok: false, erro: 'horario_ocupado' };
return { ok: true, reserva: r.rows[0] };
}
Quando a ferramenta devolve horario_ocupado, o agente pede desculpas, chama buscar_horarios de novo e oferece outras opções. Se a agenda oficial é externa (Google Agenda, sistema de gestão), grave primeiro no seu banco com a trava e sincronize depois, ou use o mecanismo de concorrência que o sistema externo oferecer.
Oferecendo horários com botões
Com até três opções, botões de resposta rápida funcionam bem. Com mais, use uma lista. O id de cada opção carrega o ID do horário, então a escolha volta sem ambiguidade:
{
"messaging_product": "whatsapp",
"to": "5584999999999",
"type": "interactive",
"interactive": {
"type": "button",
"body": { "text": "Tenho estes horários para limpeza de pele com a Dra. Ana:" },
"action": { "buttons": [
{ "type": "reply", "reply": { "id": "slot_88213", "title": "Qui 30/10 14h" } },
{ "type": "reply", "reply": { "id": "slot_88214", "title": "Qui 30/10 16h" } },
{ "type": "reply", "reply": { "id": "slot_88301", "title": "Sex 31/10 10h" } }
] }
}
}
O título de cada botão tem limite curto de caracteres, então use datas abreviadas. Para agendas com muitos campos (convênio, unidade, profissional), um formulário com WhatsApp Flows pode coletar tudo num formulário dentro da conversa.
Confirmação, lembrete e reagendamento
A confirmação logo após a reserva acontece dentro da janela de 24 horas, então pode ser uma mensagem livre. O lembrete da véspera geralmente cai fora da janela e precisa de template.
A Meta usa como exemplo de template de utilidade a confirmação de uma reserva com data, hora e número de pessoas (templates de utilidade). Um lembrete de agendamento segue a mesma lógica: dados do compromisso do cliente, sem oferta.
| Mensagem | Momento | Categoria provável |
|---|---|---|
| “Seu horário de {{1}} está marcado para {{2}} às {{3}}.” | Logo após reservar | Mensagem livre (dentro da janela) |
| “Lembrete: {{1}} amanhã, {{2}}, às {{3}}. Confirma?” com botões “Confirmo” e “Remarcar” | Véspera | Utilidade |
| “Seu horário de {{1}} foi cancelado a pedido. Para marcar de novo, responda esta mensagem.” | Após cancelar | Utilidade |
| “Faz 6 meses da sua última consulta, que tal agendar?” | Sem gatilho do cliente | Marketing |
A mensagem de “volte a agendar” é promoção de serviço e cai em marketing, com opt-in de ofertas. Veja os critérios em como a Meta classifica seu template.
Quando o cliente toca em “Remarcar”, o webhook traz o botão e abre uma nova janela de 24 horas. O agente recebe o contexto da reserva e conduz a remarcação com as mesmas ferramentas. Quando toca em “Confirmo”, basta registrar a confirmação; não precisa chamar o modelo.
Sobre custo: desde 1º de outubro de 2026, templates de utilidade enviados dentro da janela passaram a ser cobrados, e respostas livres têm franquia de 1.000 mensagens de serviço por número por mês (página de preços). Por isso, a confirmação imediata deve ser mensagem livre, e o template fica para o que de fato está fora da janela. Veja mensagens de utilidade na janela de atendimento.
O que pode dar errado
- Fuso horário. Grave tudo em UTC e converta para o fuso do negócio na hora de mostrar. Um erro aqui manda cliente no horário errado.
- Áudio. Muita gente pede horário por áudio. Transcreva antes de passar ao agente ou responda pedindo texto.
- Pedidos ambíguos. “Depois do almoço” precisa virar um intervalo. O agente deve confirmar antes de reservar.
- Agenda desatualizada. Se a recepção marca horários por telefone, o sistema precisa refletir isso em tempo real.
- Assuntos sensíveis. Em saúde, o agente agenda, mas não orienta tratamento. A Política de Mensagens do WhatsApp Business também traz restrições sobre informações de saúde quando a lei local as exige. Veja WhatsApp para clínicas.
- Handoff. A política exige caminhos claros para falar com uma pessoa. Inclua essa opção em toda conversa.
Os termos da Meta proíbem usar a plataforma para oferecer assistentes de IA de uso geral como produto principal. Um agente que agenda horários do próprio negócio usa a IA como ferramenta do atendimento, que é o uso que os termos não miram; o guia de chatbot com IA detalha a cláusula.
Como fazer isso com a Vectalk
A Vectalk dá acesso à WhatsApp Cloud API oficial com os mesmos payloads e webhooks da Meta: o agente envia botões, listas e templates para https://apis.vectalk.com.br/api/messages e recebe as respostas no seu webhook. Os templates de lembrete são criados pelo endpoint de templates, e os botões interativos seguem a página de botões de resposta. Com a coexistência, a recepção continua usando o app WhatsApp Business no mesmo número. Crie sua conta em apps.vectalk.com.br/register e veja o guia da API oficial do WhatsApp.
Perguntas frequentes
Preciso de IA para ter agendamento automático no WhatsApp?
Não. Um fluxo com botões e listas já agenda sem IA. O agente de IA ajuda quando os pedidos chegam em linguagem livre, com datas relativas, dúvidas e mudanças no meio da conversa.
O agente pode mandar o lembrete por conta própria?
O lembrete da véspera costuma cair fora da janela de 24 horas e precisa de template aprovado. Ele é disparado pelo seu agendador de tarefas, não gerado pelo modelo.
Como evito que a IA invente horários?
Proíba no prompt qualquer horário que não venha da ferramenta de busca e valide no backend: a reserva só existe se criar_agendamento retornar sucesso.
O cliente pode remarcar sozinho?
Sim. O botão “Remarcar” no lembrete leva de volta ao agente, que consulta a agenda e troca o horário com as mesmas ferramentas.
Funciona com várias unidades e profissionais?
Sim, desde que a ferramenta de busca receba unidade e profissional como parâmetros e a agenda de cada um esteja no sistema. Com muitos atendentes humanos no mesmo número, veja multiatendimento.
Fontes oficiais consultadas em 25/10/2026: Templates de utilidade, Categorização de templates, Preços, Política de Mensagens do WhatsApp Business, Termos da Meta para a Plataforma do WhatsApp Business, Google Calendar API: freeBusy, Documentação da Vectalk.
