Agenda · template n8n

Agendamento online (API de horários)

O cliente vê os horários livres e marca sozinho, sem trocar mensagem — a agenda do Google Calendar fica sempre certa.

O que faz

Expõe um webhook único que o formulário do seu site chama diretamente:

  • {"acao": "horarios", "dias": 7} → devolve a lista de horários livres dos próximos dias úteis configurados, já descontando o que está ocupado no Google Calendar, a duração do atendimento, o intervalo entre atendimentos, a antecedência mínima e a pausa de almoço.
  • {"acao": "agendar", "inicio": "...", "nome": "...", "telefone": "...", "servico": "..."} → revalida que o horário continua livre (anti-conflito, caso duas pessoas escolham o mesmo horário ao mesmo tempo), cria o evento no Google Calendar, responde ao site, manda a confirmação ao cliente pelo WhatsApp e avisa o responsável.

O que você precisa

  • n8n 2.x com Data Tables · Núcleo TN instalado ([TN] Núcleo · Instalação já rodado uma vez)
  • Uma conta Google com o Google Calendar da empresa
  • WhatsApp: Evolution API ou WhatsApp Cloud API (Meta) já configurados no [TN] Núcleo · Enviar WhatsApp

Cuidados (LGPD)

  • A confirmação ao cliente e o aviso ao responsável citam só nome, data/hora e serviço — sem diagnóstico, procedimento sensível ou valor de dívida.
  • O campo observacao, se o cliente preencher, vai só para a descrição do evento no Google Calendar (visto apenas por quem tem acesso à agenda da empresa) — nunca é reenviado por WhatsApp.
  • Restrinja cors_origin ao domínio do seu site em produção; deixar * facilita testes, mas qualquer site poderia chamar o seu webhook.

Limites conhecidos

  • Se o Google Calendar não responder na hora da consulta, a ação horarios devolve { ok: false, motivo: ... } (HTTP 200) em vez de uma lista vazia — o site deve mostrar o motivo e oferecer tentar de novo; a ação agendar nesse caso responde 409 com o mesmo motivo.
  • Não cancela nem remarca — é só criação de horário novo. Cancelamento/remarcação continuam manuais (ou via outro template TN).
  • Não verifica feriados: um dia de feriado dentro do expediente aparece como livre a menos que você bloqueie manualmente no Google Calendar (crie um evento cobrindo o expediente do dia).
  • A checagem de conflito olha só o calendar_id configurado; se a empresa usa mais de uma agenda para o mesmo profissional, marque todos no mesmo calendário ou rode uma cópia do template por calendário.
  • O webhook aceita qualquer origem por padrão (cors_origin = "*") até você restringir.

Quer isso rodando na sua clínica sem montar do zero?