
# API de resúmenes

Hay dos tipos de resúmenes escritos por IA disponibles a través de la API:

- **Resúmenes de chat**: un breve resumen de la conversación de un contacto, generado bajo demanda. Es lo mismo que el control de resumen en un chat (consulta [Resumen de chat](../chats/chat-interface.md#chat-summary)).
- **Resúmenes diarios**: el resumen diario de todas tus conversaciones que [Resúmenes diarios](../daily-summaries/daily-summaries.md) genera cada mañana: estadísticas, un bloque de markdown por sección y cualquier tarea que la IA haya creado a partir de él.

- **URL base** — `https://api.dmchamp.com/v1`
- **Autenticación** — tu clave de API (consulta [Autenticación](authentication.md)). Una [clave con alcance limitado](api-keys.md#scoped-keys) necesita la sección `Summaries`.
- **Errores y paginación** — consulta [Errores y paginación](errors-and-pagination.md)

Todos los ejemplos a continuación muestran la forma de consulta `?apiKey=` en cURL y el encabezado `X-API-Key` en JavaScript y Python; cualquiera de los dos funciona en todos los endpoints.

---

## Generar un resumen de chat

`POST /summaries` — envía el `phoneNumber` del contacto (con código de país) o su `email`; uno de los dos es obligatorio.

La IA lee la conversación **cerrada** más reciente del contacto, o la que sigue abierta si aún no se ha cerrado ninguna, y redacta un resumen de la misma. El resumen se guarda en el contacto (aparece en **Resúmenes** en el panel de contacto de la aplicación) y se devuelve en la respuesta, por lo que puedes enviarlo directamente a un CRM, un canal de Slack o un correo electrónico.

**Coste:** el mismo que una respuesta de IA en el nivel de calidad de IA del agente: Pro 1 crédito, Max 0.25, Mini 0.15; con tu propia clave de Anthropic conectada, Pro cuesta 0. La solicitud se rechaza antes de generar nada si el saldo no es suficiente.

**cURL**

```bash
curl -X POST "https://api.dmchamp.com/v1/summaries?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phoneNumber": "+31612345678"}'
```

**JavaScript**

```javascript
const res = await fetch("https://api.dmchamp.com/v1/summaries", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ email: "jane@example.com" }),
});
const { summary } = await res.json();
```

**Python**

```python
import requests

r = requests.post(
    "https://api.dmchamp.com/v1/summaries",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"phoneNumber": "+31612345678"},
)
print(r.json()["summary"])
```

**Respuesta**

```json
{
  "success": true,
  "message": "Chat summary generated successfully",
  "summary": "Jane asked about the 10-session package for her two children (ages 6 and 9) and preferred Saturday mornings. She booked a trial lesson for Saturday at 10:00 and wants to know whether siblings get a discount."
}
```

| Estado | Significado |
|---|---|
| `400` | No se envió ni `phoneNumber` ni `email`. |
| `404` | No hay ningún contacto que coincida, el contacto aún no tiene conversaciones o la conversación no tiene mensajes. El `message` del cuerpo indica cuál es el motivo. |
| `500` | La generación falló (por ejemplo, por falta de créditos). |

> **Receta de automatización: correo electrónico de reserva con un resumen.** En una [automatización](../automations/automations.md) con el activador **Cita reservada**, añade un paso de **Solicitud HTTP** que llame a este endpoint con `${trigger.contact.phone_number}` (o el correo electrónico del contacto), y luego un paso de **Correo electrónico** que inserte el `summary` de la respuesta del paso HTTP junto con un enlace al chat (la dirección de tu aplicación seguida de `/chats/` y el ID de contacto del activador). Tu equipo obtiene el contexto de la reserva en el mismo correo, sin necesidad de abrir la bandeja de entrada.

> **Lectura de resúmenes anteriores.** No existe un endpoint que enumere los resúmenes de chat almacenados. Guarda el texto de la respuesta si lo necesitas más tarde, o genéralo de nuevo (cada llamada se factura).

### Alternativa: por ID de contacto

`POST /summaries/chat-summary` con `{"contactId": "..."}` realiza la misma generación para un contacto del que ya tienes el ID. Solo confirma el éxito (`{"success": true, "data": "Chat summary generated successfully"}`) y **no** devuelve el texto, así que usa `POST /summaries` cuando quieras el resumen en sí. Un miembro del equipo cuya clave esté limitada a sus contactos asignados recibirá `404` para un contacto fuera de ese alcance.

---

## Obtener un resumen diario

`GET /summaries/daily/{date}` — `date` es `YYYY-MM-DD`. Devuelve el resumen de ese día, o `null` bajo `summary` cuando aún no se ha generado ninguno, además de la configuración de tus secciones.

**cURL**

```bash
curl "https://api.dmchamp.com/v1/summaries/daily/2026-09-08?apiKey=YOUR_API_KEY"
```

**Respuesta**

```json
{
  "success": true,
  "data": {
    "summary": {
      "date": "2026-09-08",
      "status": "completed",
      "generated_at": "2026-09-09T05:02:11.000Z",
      "stats": {
        "total_conversations": 42,
        "total_messages_sent": 310,
        "total_messages_received": 268,
        "human_alerts": 3,
        "bookings": 5,
        "new_contacts": 11,
        "sales": 2
      },
      "sections": {
        "wins_losses_improvements": "## Wins\n- ...",
        "tasks_action_items": "- Call Jane back about the sibling discount",
        "human_alerts_reviews": "...",
        "sentiment_analysis": "...",
        "booked_meetings_sales": "..."
      },
      "contact_map": { "Jane Doe": "uid_whatsapp_31612345678" },
      "auto_tasks": [],
      "created_task_ids": []
    },
    "section_configs": [
      { "id": "wins_losses_improvements", "name": "Wins, Losses & Improvements", "enabled": true, "position": 0 }
    ]
  }
}
```

- **`status`** — `pending`, `generating`, `completed` o `failed` (con `error` activado). Realice sondeos en este endpoint después de una regeneración hasta que aparezca `completed`.
- **`sections`** — una cadena de markdown por sección, identificada por el ID de la sección. Las cinco secciones estándar son `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` y `booked_meetings_sales`; las secciones que añada en **Configurar** en la página de Resúmenes diarios obtienen un ID `custom_…`. Los nombres y el orden se reflejan en `section_configs`.
- **`contact_map`** — nombre para mostrar a ID de contacto, para que pueda convertir los nombres en el texto en enlaces.
- **`auto_tasks`** / **`created_task_ids`** — los elementos de acción que la IA extrajo y las tareas que creó a partir de ellos (cuando **Crear tarjetas de tarea a partir de elementos de acción** está activado).

| Estado | Significado |
|---|---|
| `400` | `date` no está `YYYY-MM-DD`, o es para una fecha futura. |
| `403` | Los Resúmenes diarios están desactivados para la cuenta. |

> ¿Prefiere una notificación push en lugar de realizar sondeos? El [evento de webhook](../integrations/webhooks.md) **Resumen diario creado** entrega la misma carga útil en el momento en que termina un resumen matutino.

---

## Regenerar un resumen diario

`POST /summaries/daily/{date}/regenerate` — inicia una nueva generación para ese día en segundo plano y devuelve inmediatamente `status: "generating"` y un `sections` vacío. Realice sondeos en `GET /summaries/daily/{date}` hasta que se complete. Se aplican las mismas reglas que para el enlace **Intentar de nuevo** en la aplicación.

El cuerpo opcional `{"deleteTasks": false}` mantiene las tareas creadas en la ejecución anterior; por defecto, se eliminan y se vuelven a crear a partir del nuevo resumen. Envíe un booleano real: la cadena `"false"` se ignora y se trata como el valor predeterminado.

```bash
curl -X POST "https://api.dmchamp.com/v1/summaries/daily/2026-09-08/regenerate?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deleteTasks": false}'
```

---

## Referencia rápida

| Tarea | Endpoint |
|---|---|
| Generar un resumen de chat y obtener el texto | `POST /summaries` |
| Generar un resumen de chat por ID de contacto (no se devuelve texto) | `POST /summaries/chat-summary` |
| Leer el resumen de un día | `GET /summaries/daily/{date}` |
| Regenerar el resumen de un día | `POST /summaries/daily/{date}/regenerate` |
