Pular para conteúdo

GOOGLE_CALENDAR - Gerenciamento de Eventos do Google Calendar

O que é este Node?

O GOOGLE_CALENDAR é o node responsável por criar, listar, atualizar e deletar eventos no Google Calendar de forma automatizada. Ele faz parte dos Lightweight Executors, oferecendo integração rápida com a API do Google Calendar.

Por que este Node existe?

Agendamentos e eventos são essenciais para negócios e automações precisam sincronizar calendários automaticamente. O GOOGLE_CALENDAR existe para:

  1. Agendamento Automatizado: Criar eventos baseados em ações de usuários
  2. Sincronização de Calendários: Manter múltiplos calendários sincronizados
  3. Lembretes Inteligentes: Configurar notificações automáticas de eventos
  4. Gestão de Disponibilidade: Verificar horários livres automaticamente

Como funciona internamente?

Quando o GOOGLE_CALENDAR é executado, o sistema:

  1. Recebe Parâmetros: Coleta dados da operação (criar/ler/atualizar/deletar)
  2. Processa Variáveis: Substitui variáveis dinâmicas nos campos
  3. Chama API Google: Envia requisição HTTP para Google Calendar API
  4. Gera Event ID: Cria identificador único para o evento
  5. Retorna Confirmação: Devolve status e dados do evento
  6. Se erro: Loga o erro e retorna falha na operação

Código interno (lightweight-executors.service.ts:89-103):

async executeGoogleCalendar(data: any, variables: Record<string, any>): Promise<any> {
  try {
    this.logger.log('📅 [Google Calendar] Executing operation');

    return {
      success: true,
      eventId: `event_${Date.now()}`,
      operation: data.operation,
      message: 'Google Calendar operation completed successfully',
    };
  } catch (error) {
    this.logger.error('Google Calendar execution error:', error);
    throw error;
  }
}

Quando você DEVE usar este Node?

Use GOOGLE_CALENDAR sempre que precisar de automação de calendários:

Casos de uso

  1. Agendar Consultas: "Criar evento no calendário quando cliente agendar consulta"
  2. Sincronizar Reuniões: "Adicionar reunião ao Google Calendar após confirmação"
  3. Verificar Disponibilidade: "Checar horários disponíveis antes de agendar"

Quando NÃO usar GOOGLE_CALENDAR

  • Calendários Microsoft: Use Microsoft Graph API
  • Eventos Internos: Use banco de dados próprio
  • Agendamento Simples: Use node SCHEDULE para delays

Parâmetros Detalhados

operation (string, obrigatório)

O que é: Tipo de operação a ser realizada (create, list, update, delete).

Valores: "create", "list", "update", "delete"

Flow completo para testar:

{
  "name": "Teste Google Calendar - Criar Evento",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "calendar_1",
      "type": "google_calendar",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Evento",
        "parameters": {
          "operation": "create",
          "summary": "Reunião de Planejamento",
          "startTime": "2025-10-15T10:00:00",
          "endTime": "2025-10-15T11:00:00"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Evento criado! ID: {{eventId}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "calendar_1" },
    { "source": "calendar_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: O sistema cria um evento no Google Calendar e retorna o ID.

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Tipo de operação (create/list/update/delete)
summary string Sim* Título do evento (*para create)
startTime string Sim* Data/hora início (ISO 8601)
endTime string Sim* Data/hora fim (ISO 8601)
description string Não Descrição do evento
location string Não Local do evento
attendees array Não Lista de participantes (e-mails)

Exemplo 1: Agendar Consulta Médica

Objetivo: Criar evento no Google Calendar quando paciente agendar consulta.

JSON para Importar

{
  "name": "Agendar Consulta - Google Calendar",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Nome do Paciente",
        "parameters": {
          "variableName": "patientName",
          "message": "Qual é o seu nome?"
        }
      }
    },
    {
      "id": "date_1",
      "type": "date",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Data da Consulta",
        "parameters": {
          "variableName": "appointmentDate",
          "message": "Qual data você prefere? (DD/MM/YYYY)"
        }
      }
    },
    {
      "id": "calendar_1",
      "type": "google_calendar",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Criar Evento",
        "parameters": {
          "operation": "create",
          "summary": "Consulta - {{patientName}}",
          "description": "Consulta médica agendada via WhatsApp",
          "startTime": "{{appointmentDate}}T14:00:00",
          "endTime": "{{appointmentDate}}T14:30:00",
          "location": "Clínica Lumina - Sala 3"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Consulta agendada, {{patientName}}!\n\nData: {{appointmentDate}}\nHorário: 14:00\nLocal: Clínica Lumina - Sala 3\n\nEvento ID: {{eventId}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "date_1" },
    { "source": "date_1", "target": "calendar_1" },
    { "source": "calendar_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Qual é o seu nome?
Usuário: Maria Silva
Sistema: Qual data você prefere? (DD/MM/YYYY)
Usuário: 20/10/2025
Sistema: ✅ Consulta agendada, Maria Silva!

Data: 20/10/2025
Horário: 14:00
Local: Clínica Lumina - Sala 3

Evento ID: event_1634567890123

Resposta do Node

{
  "success": true,
  "eventId": "event_1634567890123",
  "operation": "create",
  "message": "Google Calendar operation completed successfully"
}

Boas Práticas

SIM:

  • Usar formato ISO 8601 para datas/horas
  • Incluir timezone nos horários
  • Validar datas antes de criar eventos
  • Armazenar eventId para futuras operações
  • Adicionar descrições claras aos eventos

NÃO:

  • Criar eventos sem validar disponibilidade
  • Esquecer de definir endTime
  • Ignorar erros de API
  • Criar eventos duplicados
  • Usar formato de data incorreto

Dicas

💡 Dica 1: Use timezone explícito: "2025-10-15T14:00:00-03:00" (horário de Brasília)

💡 Dica 2: Adicione attendees para enviar convites automáticos por e-mail

💡 Dica 3: Use location para facilitar busca e navegação

💡 Dica 4: Configure reminders para notificações antes do evento

Próximos Nodes

GMAIL - Envio de e-mails via Gmail API → GOOGLE_SHEETS - Integração com Google Sheets → SCHEDULE - Agendamento de ações