{
  "schemaVersion": 1,
  "key": "google-calendar",
  "name": "Google Calendar",
  "description": "Crie, atualize, cancele eventos e consulte disponibilidade no Google Calendar.",
  "category": "google",
  "vendor": "Google",
  "version": "1.0.0",
  "status": "ACTIVE",
  "credentials": [
    {
      "type": "OAUTH2",
      "permissions": [
        "Criar, editar e cancelar eventos na sua agenda",
        "Ver seus calendários e horários livres/ocupados"
      ]
    }
  ],
  "actions": [
    {
      "key": "event.update",
      "name": "Atualizar evento",
      "description": "Atualiza os dados do evento no calendario selecionado. Participantes representam a lista final do evento.",
      "inputs": [
        {
          "key": "calendarId",
          "label": "Calendario",
          "type": "RESOURCE_SELECT",
          "required": true
        },
        {
          "key": "eventId",
          "label": "ID do evento",
          "type": "TEXT",
          "required": true
        },
        {
          "key": "summary",
          "label": "Titulo",
          "type": "TEXT",
          "required": true
        },
        {
          "key": "startDateTime",
          "label": "Data e hora de inicio",
          "type": "DATETIME",
          "required": true,
          "description": "Tipo aceito: data e hora. Nao use apenas data. Se o valor nao tiver offset, preencha Fuso horario. Ex.: 2026-07-22T14:00 ou 2026-07-22T14:00:00-03:00."
        },
        {
          "key": "endDateTime",
          "label": "Data e hora de fim",
          "type": "DATETIME",
          "required": true,
          "description": "Tipo aceito: data e hora. Nao use apenas data. Se o valor nao tiver offset, preencha Fuso horario. Ex.: 2026-07-22T15:00 ou 2026-07-22T15:00:00-03:00."
        },
        {
          "key": "timeZone",
          "label": "Fuso horario",
          "type": "TIMEZONE",
          "required": false,
          "description": "Opcional quando a data/hora ja tem offset (-03:00 ou Z). Obrigatorio se usar data/hora sem offset. Ex.: America/Sao_Paulo."
        },
        {
          "key": "description",
          "label": "Descricao",
          "type": "TEXT",
          "required": false
        },
        {
          "key": "location",
          "label": "Local",
          "type": "TEXT",
          "required": false
        },
        {
          "key": "attendees",
          "label": "Participantes",
          "type": "JSON",
          "required": true,
          "description": "Tipo aceito: array de objetos do Google Calendar. Ex.: {{ solicitacao.participantes }} resolvendo para [{\"email\":\"ana@empresa.com\"}]."
        },
        {
          "key": "sendUpdates",
          "label": "Notificacoes",
          "type": "SELECT",
          "required": false
        }
      ],
      "outputs": [
        {
          "key": "id",
          "label": "Id",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "status",
          "label": "Status",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "htmlLink",
          "label": "Html Link",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "updated",
          "label": "Updated",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "attendees",
          "label": "Attendees",
          "type": "OUTPUT",
          "required": false
        }
      ]
    },
    {
      "key": "event.cancel",
      "name": "Cancelar evento",
      "description": "Cancela/remove um evento do calendario selecionado.",
      "inputs": [
        {
          "key": "calendarId",
          "label": "Calendario",
          "type": "RESOURCE_SELECT",
          "required": true
        },
        {
          "key": "eventId",
          "label": "ID do evento",
          "type": "TEXT",
          "required": true
        },
        {
          "key": "sendUpdates",
          "label": "Notificacoes",
          "type": "SELECT",
          "required": false
        }
      ],
      "outputs": []
    },
    {
      "key": "availability.query",
      "name": "Consultar disponibilidade",
      "description": "Consulta periodos ocupados para calendarios ou participantes em uma janela de tempo.",
      "inputs": [
        {
          "key": "timeMin",
          "label": "Data e hora de inicio",
          "type": "DATETIME",
          "required": true,
          "description": "Tipo aceito: data e hora. Nao use apenas data. Ex.: 2026-07-22T14:00 ou 2026-07-22T14:00:00-03:00."
        },
        {
          "key": "timeMax",
          "label": "Data e hora de fim",
          "type": "DATETIME",
          "required": true,
          "description": "Tipo aceito: data e hora. Nao use apenas data. Ex.: 2026-07-22T15:00 ou 2026-07-22T15:00:00-03:00."
        },
        {
          "key": "timeZone",
          "label": "Fuso horario",
          "type": "TIMEZONE",
          "required": false,
          "description": "Opcional. Se omitido, o Google usa o padrao da API para a resposta. Ex.: America/Sao_Paulo."
        },
        {
          "key": "items",
          "label": "Calendarios ou participantes",
          "type": "JSON",
          "required": true,
          "description": "Tipo aceito: array de objetos FreeBusy. Ex.: {{ agenda.participantes }} resolvendo para [{\"id\":\"ana@empresa.com\"}]."
        }
      ],
      "outputs": [
        {
          "key": "groups",
          "label": "Groups",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "calendars",
          "label": "Calendars",
          "type": "OUTPUT",
          "required": false
        }
      ]
    },
    {
      "key": "event.create",
      "name": "Criar evento",
      "description": "Cria um evento no calendario selecionado, incluindo os participantes informados dinamicamente.",
      "inputs": [
        {
          "key": "calendarId",
          "label": "Calendario",
          "type": "RESOURCE_SELECT",
          "required": true
        },
        {
          "key": "summary",
          "label": "Titulo",
          "type": "TEXT",
          "required": true,
          "description": "Aceita expressoes do processo, ex.: {{ process.protocol }}."
        },
        {
          "key": "startDateTime",
          "label": "Data e hora de inicio",
          "type": "DATETIME",
          "required": true,
          "description": "Tipo aceito: data e hora. Nao use apenas data. Se o valor nao tiver offset, preencha Fuso horario. Ex.: 2026-07-22T14:00 ou 2026-07-22T14:00:00-03:00."
        },
        {
          "key": "endDateTime",
          "label": "Data e hora de fim",
          "type": "DATETIME",
          "required": true,
          "description": "Tipo aceito: data e hora. Nao use apenas data. Se o valor nao tiver offset, preencha Fuso horario. Ex.: 2026-07-22T15:00 ou 2026-07-22T15:00:00-03:00."
        },
        {
          "key": "timeZone",
          "label": "Fuso horario",
          "type": "TIMEZONE",
          "required": false,
          "description": "Opcional quando a data/hora ja tem offset (-03:00 ou Z). Obrigatorio se usar data/hora sem offset. Ex.: America/Sao_Paulo."
        },
        {
          "key": "description",
          "label": "Descricao",
          "type": "TEXT",
          "required": false
        },
        {
          "key": "location",
          "label": "Local",
          "type": "TEXT",
          "required": false
        },
        {
          "key": "attendees",
          "label": "Participantes",
          "type": "JSON",
          "required": true,
          "description": "Tipo aceito: array de objetos do Google Calendar. Ex.: {{ solicitacao.participantes }} resolvendo para [{\"email\":\"ana@empresa.com\"}]."
        },
        {
          "key": "sendUpdates",
          "label": "Notificacoes",
          "type": "SELECT",
          "required": false
        }
      ],
      "outputs": [
        {
          "key": "id",
          "label": "Id",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "status",
          "label": "Status",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "htmlLink",
          "label": "Html Link",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "iCalUID",
          "label": "I Cal UID",
          "type": "OUTPUT",
          "required": false
        },
        {
          "key": "attendees",
          "label": "Attendees",
          "type": "OUTPUT",
          "required": false
        }
      ]
    }
  ],
  "triggers": [
    {
      "key": "events.changed",
      "name": "Agenda alterada",
      "description": "Dispara quando algo muda no calendário (evento criado, alterado ou removido). O Google notifica sem corpo — os dados vêm nos cabeçalhos do canal; use uma ação do Calendar em seguida para buscar o que mudou.",
      "mode": "WATCH",
      "exclusiveByConnection": false,
      "inputs": [
        {
          "key": "calendarId",
          "label": "Calendário",
          "type": "RESOURCE_SELECT",
          "required": true
        }
      ],
      "events": [
        {
          "type": "GENERIC"
        }
      ]
    }
  ]
}
