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çãojá 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_originao 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
horariosdevolve{ ok: false, motivo: ... }(HTTP 200) em vez de uma lista vazia — o site deve mostrar o motivo e oferecer tentar de novo; a açãoagendarnesse 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
expedienteaparece 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_idconfigurado; 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.