> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Cal.com

## Descripción general

Conecta tus agentes de IA de ElevenLabs con [Cal.com](https://cal.com) para gestionar la programación y las reservas de calendario. Esta integración permite a tus agentes consultar la disponibilidad, reservar citas, cancelar o reprogramar reuniones y buscar reservas existentes mediante conversaciones naturales.

## Funcionalidades

| Funcionalidad                     | Compatibilidad                                  |
| --------------------------------- | ----------------------------------------------- |
| Modo de retención cero (ZRM)      | No compatible                                   |
| Archivos adjuntos en herramientas | No compatible: las herramientas solo usan texto |

## Configuración

Esta integración usa una **clave de API de Cal.com** para la autenticación (no una aplicación OAuth).

#### Genera una clave de API en Cal.com

Ve a **Settings > Developer > API Keys** en tu cuenta de Cal.com y haz clic en **New**. Copia la clave generada de inmediato, ya que no volverá a mostrarse.

#### Usa una clave de producción

Cal.com genera dos tipos de claves: claves de prueba (que empiezan por `cal_`) y claves de producción (que empiezan por `cal_live_`). Usa una **clave de producción** para que tu agente pueda acceder a datos reales del calendario.

#### Conéctalo en ElevenLabs

En la configuración de integración de ElevenLabs, pega tu clave de API de Cal.com en el campo **API Key**.

## Demostración

> **Note**
>
> Esta demostración usa herramientas de webhook heredadas. Si utilizas la integración nativa de Cal.com, las herramientas se
> configuran automáticamente; no necesitas configurar webhooks manualmente.

## Cómo funciona

El agente programa reuniones mediante llamadas a herramientas que recorren el proceso de reserva. Las pestañas siguientes muestran un resumen de alto nivel y el prompt de sistema detallado.

#### Resumen general

#### Consulta inicial y detalles de la reunión

El agente pregunta por el propósito de la reunión, la fecha y hora preferidas, y la duración para recopilar la información de programación.

#### Consulta la disponibilidad del calendario

El agente consulta la disponibilidad del calendario de la siguiente manera:

* Usa la herramienta `get_available_slots` para obtener franjas horarias disponibles.
* Comprueba si la hora solicitada está disponible.
* Sugiere alternativas si la hora solicitada no está disponible.
* Confirma la hora seleccionada con quien llama.

#### Recopilación de información de contacto

Cuando se acuerda una hora, el agente:

* Recopila y valida el nombre completo del asistente.
* Comprueba que la dirección de correo electrónico sea correcta.
* Confirma la información de zona horaria.
* Recopila cualquier campo adicional necesario para el tipo de evento de Cal.com.

#### Creación de la reunión

El agente:

* Llama a la herramienta `book_meeting` después de verificar toda la información.
* Sigue la estructura de la plantilla de reserva.
* Confirma la creación de la reunión con el asistente.
* Le informa de que recibirá una invitación de calendario.

#### Prompt de sistema detallado

```
You are a helpful receptionist responsible for scheduling meetings using the Cal.com integration. Be friendly, precise, and concise.

Begin by briefly asking for the purpose of the meeting and the caller's preferred date and time.
Then, ask about the desired meeting duration (15, 30, or 60 minutes), and wait for the user's response before proceeding.

Once you have the meeting details, say you will check calendar availability:
- Call get_available_slots with the appropriate date range
- Verify if the requested time slot is available
- If not available, suggest alternative times from the available slots
- Continue until a suitable time is agreed upon

After confirming a time slot, gather the following contact details:
- The attendee's full name
- A valid email address. Note that the email address is transcribed from voice, so ensure it is formatted correctly.
- The attendee's time zone (in 'Continent/City' format like 'America/New_York')
- Read the email back to the caller to confirm accuracy

Once all details are confirmed, explain that you will create the meeting.
Create the meeting by using the book_meeting tool with the following parameters:
- start: The agreed meeting time in ISO 8601 format
- eventTypeId: The appropriate ID based on the meeting duration (15min: 1351800, 30min: 1351801, 60min: 1351802)
- attendee: An object containing the name, email, and timeZone

Thank the attendee and inform them they will receive a calendar invitation shortly.

Clarifications:
- Do not inform the user that you are formatting the email; simply do it.
- If the caller asks you to proceed with booking, do so with the existing information.

Guardrails:
- Do not share any internal IDs or API details with the caller.
- If booking fails, check for formatting issues in the email or time conflicts.
```

## Configuración manual de webhooks

> **Note**
>
> Si utilizas la integración nativa de Cal.com, las herramientas se configuran automáticamente. Los pasos siguientes
> solo se aplican a la configuración manual de webhooks.

#### Guarda tu secreto de Cal.com

Guarda tu clave de API de forma segura antes de realizar solicitudes autenticadas. Genera una nueva [clave de API de Cal.com](https://cal.com/docs/api-reference/v1/introduction#get-your-api-keys) si aún no lo has hecho.

La API de Cal.com espera el siguiente encabezado de autenticación:

**`Estructura del encabezado de solicitud de Cal`**

```plaintext Estructura del encabezado de solicitud de Cal
'Authorization': 'Bearer YOUR_API_KEY'
```

Guarda la clave en el almacenamiento de secretos del agente para mantenerla segura y accesible al realizar solicitudes.

> **Warning**
>
> Para ajustarte a la estructura de autenticación esperada por Cal.com, recuerda añadir `Bearer ` antes de la clave de API al crear el secreto.

![Secretos de herramientas](/docs/_fern-img/5ffae070945a86b74975cd9b56679c2bb76f0ce70d05fe7b10e8e5dff6ddd630.webp)

#### Añade herramientas al agente

Activa las reservas de calendario creando dos herramientas:

1. **`get_available_slots`**: Cuando un usuario pregunta *"¿Louis está libre el martes a las 10:30?"*, el agente usa la [ruta «Get available slots» de Cal.com](https://cal.com/docs/api-reference/v2/slots/find-out-when-is-an-event-type-ready-to-be-booked) para comprobar las franjas horarias disponibles.

2. **`book_meeting`**: Después de identificar una hora adecuada, el agente reserva la reunión mediante la [ruta «Create a booking» de Cal.com](https://cal.com/docs/api-reference/v2/bookings/create-a-booking#create-a-booking).

Ve a la sección **Tools** del panel y selecciona **Add Tool**. Elige **Webhook** como tipo de herramienta y, a continuación, rellena las secciones siguientes:

#### Herramienta 1: get_available_slots

#### Configuración

Metadatos que usa el agente para determinar cuándo debe llamar a la herramienta:

| Campo       | Valor                                                                                       |
| ----------- | ------------------------------------------------------------------------------------------- |
| Nombre      | get_available_slots                                                                         |
| Descripción | Esta herramienta comprueba si una franja horaria concreta está disponible en el calendario. |
| Método      | GET                                                                                         |
| URL         | [https://api.cal.com/v2/slots](https://api.cal.com/v2/slots)                                |

#### Encabezados

Coincide con los encabezados de solicitud definidos [aquí](https://cal.com/docs/api-reference/v2/slots/get-available-slots#get-available-slots):

| Tipo    | Nombre          | Valor                                            |
| ------- | --------------- | ------------------------------------------------ |
| Secreto | Authorization   | Selecciona la clave secreta creada anteriormente |
| Cadena  | cal-api-version | 2024-09-04                                       |

#### Parámetros de consulta

Coincide con los parámetros de consulta de solicitud definidos [aquí](https://cal.com/docs/api-reference/v2/slots/get-available-slots#get-available-slots):

| Tipo de datos | Identificador | Obligatorio | Descripción                                                                                                                                 |
| ------------- | ------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| cadena        | start         | Sí          | Fecha/hora de inicio (UTC) desde la que obtener franjas, p. ej., '2024-08-13T09:00:00Z'.                                                    |
| cadena        | end           | Sí          | Fecha/hora de fin (UTC) hasta la que obtener franjas, p. ej., '2024-08-13T17:00:00Z'.                                                       |
| cadena        | eventTypeId   | Sí          | El ID del tipo de evento que se reserva. Si son 15 minutos, devuelve abc. Si son 30 minutos, devuelve def. Si son 60 minutos, devuelve xyz. |

#### Herramienta 2: book_meeting

#### Configuración

Metadatos que usa el agente para determinar cuándo debe llamar a la herramienta:

| Campo       | Valor                                                                             |
| ----------- | --------------------------------------------------------------------------------- |
| Nombre      | book_meeting                                                                      |
| Descripción | Esta herramienta reserva una reunión en el calendario cuando se acuerda una hora. |
| Método      | POST                                                                              |
| URL         | [https://api.cal.com/v2/bookings](https://api.cal.com/v2/bookings)                |

#### Encabezados

Coincide con los encabezados de solicitud definidos [aquí](https://cal.com/docs/api-reference/v2/bookings/create-a-booking#create-a-booking):

| Tipo    | Nombre          | Valor                                            |
| ------- | --------------- | ------------------------------------------------ |
| Secreto | Authorization   | Selecciona la clave secreta creada anteriormente |
| Cadena  | cal-api-version | 2024-08-13                                       |

#### Parámetros del cuerpo

Coincide con los parámetros del cuerpo de la solicitud definidos [aquí](https://cal.com/docs/api-reference/v2/bookings/create-a-booking#create-a-booking):

| Identificador | Tipo de datos | Obligatorio | Descripción                                                                                                                                 |
| ------------- | ------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| start         | Cadena        | Sí          | La hora de inicio de la reserva en formato ISO 8601 y zona horaria UTC, p. ej., '2024-08-13T09:00:00Z'.                                     |
| eventTypeId   | Número        | Sí          | El ID del tipo de evento que se reserva. Si son 15 minutos, devuelve abc. Si son 30 minutos, devuelve def. Si son 60 minutos, devuelve xyz. |
| attendee      | Objeto        | Sí          | Los datos del asistente. Debes recopilar estos campos del usuario.                                                                          |

> **Note**
>
> El `eventTypeId` debe corresponder a los tipos de evento que tienes disponibles en Cal. Llama a
> [esta](https://cal.com/docs/api-reference/v1/event-types/find-all-event-types#find-all-event-types)
> ruta para obtener una lista de los tipos de evento de tu cuenta (o crea otra herramienta que lo haga
> automáticamente).

**Objeto attendee:**

| Identificador | Tipo de datos | Obligatorio | Descripción                                                                                                           |
| ------------- | ------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| name          | Cadena        | Sí          | El nombre completo de la persona que reserva la reunión.                                                              |
| email         | Cadena        | Sí          | La dirección de correo electrónico de la persona que reserva la reunión.                                              |
| timeZone      | Cadena        | Sí          | La zona horaria de quien llama. Debe tener el formato 'Continente/Ciudad', como 'Europe/London' o 'America/New_York'. |

> **Success**
>
> Prueba el agente pulsando el botón **Test AI agent**. Ajusta el prompt de sistema según sea necesario.

#### Añade información de fecha y hora

De forma predeterminada, el agente no conoce la fecha ni la hora actuales. Usa uno de los siguientes enfoques:

1. **Crea una herramienta para obtener la hora**: Añade una herramienta que obtenga la fecha y hora actuales.

2. **Overrides**: Usa la función [overrides](/docs/es/eleven-agents/customization/personalization/overrides) para insertar la fecha y hora actuales en el prompt de sistema al inicio de cada conversación.

## Consideraciones de seguridad

* Usa rutas HTTPS para todas las llamadas de webhook.
* Guarda los valores sensibles como secretos con el gestor de secretos de ElevenLabs.
* Valida que todos los encabezados de autorización sigan el formato requerido (`Bearer YOUR_API_KEY`).
* No expongas nunca los ID de tipos de evento ni los detalles de la API a quienes llaman.

## Enlaces útiles

* [Documentación de la API de Cal.com](https://cal.com/docs/api-reference/v2/introduction)
* [Guía de claves de API de Cal.com](https://cal.com/blog/where-is-my-api-key-and-what-can-it-do)
* [Descripción general de las herramientas de ElevenLabs](/docs/es/eleven-agents/customization/tools/server-tools)