> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ararahq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cal.com

> Configure o Brain para consultar horários livres e criar agendamentos no Cal.com pelo WhatsApp.

Ao final deste guia, o Brain consulta horários livres do Cal.com e cria o agendamento pelo WhatsApp, pela Action `CAL_COM_BOOKING`. O cliente pergunta "tem horário amanhã?", o Brain lista os horários do dia, o cliente escolhe e o Brain agenda.

## Antes de começar

* Conta [Cal.com](https://cal.com) com pelo menos um event type. A disponibilidade é a que o Cal.com enxerga, incluindo os calendários conectados a ele (Google, Outlook).
* [Brain](/brain) configurado, com plano que inclui Brain e número dedicado.

## Quando o Brain usa

Quando o cliente quer marcar consulta, visita ou reunião. O Brain é instruído a listar horários primeiro e só agendar depois que o cliente confirma um horário.

A Action tem duas operações:

| `operation` | Parâmetros | O que faz |
| - | - | - |
| `list_slots` | `date` (`YYYY-MM-DD`) | Busca os horários livres do dia e mostra até 6 |
| `book_slot` | `date`, `slot_start` (ISO com fuso), `attendee_name`, `attendee_email` (opcional) | Cria o agendamento |

## Passos

<Steps>
  <Step title="Gere uma chave de API no Cal.com">
    Em **Settings → Developer → API Keys**.
  </Step>

  <Step title="Descubra o id do event type">
    `GET https://api.cal.com/v2/event-types` lista os event types. Anote o `id` do que vai ser usado no WhatsApp.
  </Step>

  <Step title="Habilite na Arara">
    ```bash theme={null}
    curl -X POST https://api.ararahq.com/v1/brain/actions \
      -H "Authorization: Bearer $ARARA_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "actionType": "CAL_COM_BOOKING",
        "enabled": true,
        "config": {
          "apiKey": "sua_chave_calcom",
          "eventTypeId": 12345
        }
      }'
    ```

    `apiKey` e `eventTypeId` são as únicas chaves lidas.
  </Step>
</Steps>

## Fluxo

```
Cliente:   "Quero marcar uma consulta pra quarta"
  ↓
Brain:     [CAL_COM_BOOKING list_slots date=2026-09-16]
  ↓
Brain:     "Tenho esses horários em quarta 16/09: 10h00, 14h00, 16h00.
            Qual fica melhor pra você?"
  ↓
Cliente:   "10h. Meu nome é Ana, email ana@exemplo.com"
  ↓
Brain:     [CAL_COM_BOOKING book_slot slot_start=2026-09-16T10:00:00-03:00]
  ↓
Brain:     "Agendamento confirmado pra 16/09 às 10h00, Ana.
            Mandei convite pro ana@exemplo.com.
            Pra remarcar/cancelar: <link do Cal.com>"
```

## Limitações

* **Fuso de Brasília**: o dia consultado em `list_slots` e os horários mostrados usam UTC-3. O agendamento é criado com fuso `America/Sao_Paulo`.
* **Um event type por organização**: a Action lê um único `eventTypeId`.
* **Sem remarcação ou cancelamento pela Action**: o Brain envia o link de remarcação que o Cal.com devolve; a mudança é feita pelo cliente no Cal.com.
* **Email**: sem `attendee_email`, o agendamento é criado com um email interno e o cliente não recebe convite. O Brain é instruído a pedir o email antes.
* **Sem cobrança**: se o evento exige pagamento, use a Action [Stripe](/brain/actions/stripe) ou [AbacatePay](/brain/actions/abacate-pix) separadamente.

## Próximos passos

<CardGroup cols={2}>
  <Card title="AbacatePay (Pix)" icon="qrcode" href="/brain/actions/abacate-pix">
    Cobrança Pix dentro da conversa.
  </Card>

  <Card title="Voltar ao Brain" icon="brain" href="/brain">
    Configuração, Actions disponíveis e regras.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.