# Microsoft Outlook

La integración de **Microsoft Outlook** te permite gestionar completamente tu comunicación y agenda dentro de Dapta. Combina la automatización de **Correo Electrónico** con una gestión avanzada de **Calendario**, incluyendo la operación inteligente **Get Availability** para programación automatizada.

### 🚀 Capacidades Clave

#### 📧 Correo Electrónico (Email)

* **Enviar Correos**: Automatiza el envío de correos HTML enriquecidos a múltiples destinatarios.
* **Gestión de Adjuntos**: (Próximamente) Manejo automático de archivos adjuntos.

#### 📅 Calendario

* **Programación Inteligente**: Localiza espacios libres basándose en tu horario laboral usando la operación **Get Availability**.
* **Gestionar Eventos**: Crea, actualiza, lista y elimina reuniones sin esfuerzo.
* **Zona Horaria Inteligente**: Maneja automáticamente conversiones complejas de zona horaria global.
* **Reuniones Online**: Genera enlaces de Microsoft Teams con un solo interruptor.

***

### ⚙️ Requisitos Previos

Para usar esta integración, necesitas:

1. Una cuenta de **Microsoft 365** (Business o Personal).
2. *Opcional*: Un **Buzón de Outlook** activo (solo requerido si planeas usar las operaciones de Enviar Correo).

***

### 🔐 Autenticación

Dapta utiliza autenticación segura **OAuth 2.0** para conectarse a tu cuenta de Microsoft. Nunca vemos ni almacenamos tu contraseña.

#### Permisos Requeridos

Al conectar, se te pedirá conceder los siguientes permisos:

* `Calendars.ReadWrite`: Para gestionar tus eventos y verificar disponibilidad.
* `Mail.Send`: Para enviar correos automatizados en tu nombre.
* `User.Read`: Para identificar tu perfil y configuración de zona horaria.

#### Pasos de Conexión

**Opción 1: Conexión Rápida (Recomendada)**

1. Añade el nodo de **Microsoft Outlook** a tu lienzo de flujo.
2. Ubica el desplegable **Credential** en el panel de configuración.
3. Haz clic en el botón **+ (Más)** junto al desplegable.
4. Sigue los pasos de inicio de sesión de Microsoft para autorizar el acceso.
5. Tu credencial se guardará y seleccionará automáticamente.

**Opción 2: Menú de Configuración**

1. Navega a la [**Página de Credenciales**](https://app.dapta.ai/settings/oauth) en tu panel de Dapta.
2. Haz clic en **Add Credential** y selecciona **Microsoft Outlook**.
3. Haz clic en **Connect** e inicia sesión con tu cuenta de **Microsoft 365**.
4. Revisa los permisos solicitados y haz clic en **Yes/Accept**.

***

### 🛠️ Operaciones de Calendario

#### 1. Get Availability

Esta función escanea tu calendario y devuelve una lista de espacios "libres", respetando estrictamente tu horario laboral y reuniones existentes.

**Parámetros**

* **Calendar ID** *(Texto, Opcional)* El ID del calendario a revisar. Por defecto usa tu calendario principal.
* **From Date** *(Fecha, Requerido)* Fecha de inicio de la búsqueda (Formato: `YYYY-MM-DD`, ej. `2024-01-01`).
* **To Date** *(Fecha, Requerido)* Fecha de fin de la búsqueda (Formato: `YYYY-MM-DD`).
* **Start Time** *(Texto, Opcional)* Hora de inicio de jornada laboral (ej. `09:00`). Por defecto: `08:00`.
* **End Time** *(Texto, Opcional)* Hora de fin de jornada laboral (ej. `17:00`).
* **Slot Duration** *(Número, Opcional)* Duración de cada espacio en minutos (ej. `30`).
* **Buffer Time** *(Número, Opcional)* Minutos de margen para dejar libres entre reuniones (ej. `15`).
* **Exclude Weekends** *(Booleano, Opcional)* Si es `true`, los sábados y domingos se excluyen de la disponibilidad.
* **Timezone** *(Texto, Opcional)* La zona horaria para el cálculo (ej. `America/New_York`).

**Ejemplo de Respuesta**

```json
{
  "success": true,
  "date_range": { "from": "2024-01-01", "to": "2024-01-02" },
  "slots": {
    "2024-01-01": [
      { "start": "09:00", "end": "09:30" },
      { "start": "09:30", "end": "10:00" }
    ]
  },
  "summary": { "total_slots": 5, "first_available": "2024-01-01T09:00:00" }
}
```

***

#### 2. List Calendars

Recupera una lista de todos los calendarios asociados a tu cuenta.

**Ejemplo de Respuesta**

```json
{
  "value": [
    {
      "id": "AAMkAGI...",
      "name": "Calendar",
      "color": "auto",
      "changeKey": "..."
    }
  ]
}
```

***

#### 3. Get Calendar

Recupera información detallada sobre un calendario específico.

**Parámetros**

* **Calendar ID** *(Texto, Requerido)* El identificador único del calendario.

**Ejemplo de Respuesta**

```json
{
  "success": true,
  "calendar": {
    "id": "AAMkAGI...",
    "name": "Trabajo",
    "canEdit": true
  }
}
```

***

#### 4. List Events

Busca reuniones próximas dentro de un rango de fechas específico.

**Parámetros**

* **From Date** *(Fecha, Requerido)* Inicio del rango de fechas.
* **To Date** *(Fecha, Requerido)* Fin del rango de fechas.
* **Timezone** *(Texto, Opcional)* Si se proporciona, convierte todas las horas de eventos a esta zona en la salida.

**Ejemplo de Respuesta**

```json
{
  "success": true,
  "events": [
    {
      "id": "AAMkAGI...",
      "subject": "Sincronización de Equipo",
      "start": { "dateTime": "2024-01-01T10:00:00", "timeZone": "UTC" },
      "end": { "dateTime": "2024-01-01T11:00:00", "timeZone": "UTC" }
    }
  ]
}
```

***

#### 5. Get Event

Recupera detalles de un solo evento usando su ID.

**Parámetros**

* **Event ID** *(Texto, Requerido)* El identificador único del evento.

**Ejemplo de Respuesta**

```json
{
  "success": true,
  "event": {
    "id": "AAMkAGI...",
    "subject": "Almuerzo",
    "location": { "displayName": "Cafetería" }
  }
}
```

***

#### 6. Create Event

Programa una nueva reunión en tu calendario.

**Parámetros**

* **Title** *(Texto, Requerido)* El asunto del evento.
* **Start Date/Time** *(Fecha, Requerido)* Cuándo inicia el evento. **Debe estar en formato ISO 8601** (ej. `2024-12-31T14:30:00`).
* **End Date/Time** *(Fecha, Requerido)* Cuándo termina el evento. **Debe estar en formato ISO 8601** (ej. `2024-12-31T15:30:00`).
* **Attendees** *(Lista, Opcional)* Correos electrónicos separados por coma (ej. `bob@test.com, alice@test.com`).
* **Online Meeting** *(Booleano, Opcional)* Si es `true`, añade automáticamente un enlace de Microsoft Teams al evento.
* **Description** *(Texto, Opcional)* Detalles o agenda para el cuerpo del evento.
* **Location** *(Texto, Opcional)* Ubicación física o nombre de sala.
* **Reminder Minutes** *(Número, Opcional)* Minutos antes del evento para mostrar una notificación.
* **Timezone** *(Texto, Opcional)* Zona horaria específica para las horas de inicio/fin proporcionadas.

**Ejemplo de Respuesta**

```json
{
  "success": true,
  "event": {
    "id": "AAMkAGI...",
    "subject": "Lanzamiento de Proyecto",
    "webLink": "https://outlook.office365.com/..."
  }
}
```

***

#### 7. Update Event

Modifica detalles de un evento existente.

**Parámetros**

* **Event ID** *(Texto, Requerido)* El identificador único del evento a actualizar.
* **Title** *(Texto, Opcional)* Nuevo asunto para el evento.
* **Start Date/Time** *(Fecha, Opcional)* Nueva hora de inicio (ISO 8601).
* **End Date/Time** *(Fecha, Opcional)* Nueva hora de fin (ISO 8601).
* **Description** *(Texto, Opcional)* Nueva descripción.
* **Location** *(Texto, Opcional)* Nueva ubicación.

***

#### 8. Delete Event

Elimina un evento del calendario.

**Parámetros**

* **Event ID** *(Texto, Requerido)* El identificador único del evento a eliminar.

**Ejemplo de Respuesta**

```json
{
  "success": true,
  "message": "Event deleted successfully",
  "event_id": "AAMkAGI..."
}
```

***

### 📧 Operaciones de Email

#### 9. Send Email

Envía correos automatizados directamente desde tu cuenta de Outlook.

**Parámetros**

* **To** *(Lista, Requerido)* Destinatarios (separados por coma).
* **Subject** *(Texto, Requerido)* Asunto del correo.
* **Body Format** *(Selección, Requerido)* Elige entre `Text` o `HTML`.
* **Body / HTML** *(Texto, Requerido)* El contenido del mensaje.
* **CC / BCC** *(Lista, Opcional)* Copias opcionales.

**Ejemplo de Respuesta**

```json
{
  "success": true,
  "message": "Email sent successfully"
}
```

***

### 🚧 Límites de Uso y Cuotas

Microsoft impone límites de uso en la API para prevenir abusos.

* **Envío de Correos**: Los límites varían según el tipo de cuenta (ej. \~10,000 destinatarios/día para cuentas Business).
* **Límites de Velocidad**: Solicitudes excesivas en poco tiempo pueden resultar en `429 Too Many Requests`.
* **Consejo**: Si estás enviando correos en un bucle, añade un nodo **Wait** (Espera) de 1-2 segundos dentro del bucle para asegurar una entrega fluida.

***

### ❓ Solución de Problemas

| Problema                 | Causa             | Solución                                                                         |
| ------------------------ | ----------------- | -------------------------------------------------------------------------------- |
| **"Invalid Timezone"**   | Error tipográfico | Usa nombres IANA estándar como `America/Bogota` o `Europe/Madrid`.               |
| **"Time Range Too Big"** | Límite de API     | Mantén el rango de `List Events` bajo 31 días para mejor rendimiento.            |
| **"Access Denied"**      | Permisos          | Reconecta tu credencial y asegúrate de aceptar todos los permisos solicitados.   |
| **Horas incorrectas**    | UTC vs Local      | Revisa el parámetro `Timezone`. Si está vacío, Dapta suele usar UTC por defecto. |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dapta.ai/dapta-docs-es/integraciones/microsoft-outlook.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
