
# API de résumés

Deux types de résumés rédigés par l'IA sont disponibles via l'API :

- **Résumés de chat** — un court récapitulatif de la conversation d'un contact, généré à la demande. Il s'agit de la même chose que la commande de résumé dans un chat (voir [Résumé de chat](../chats/chat-interface.md#chat-summary)).
- **Résumés quotidiens** — le compte-rendu quotidien de toutes vos conversations que les [Résumés quotidiens](../daily-summaries/daily-summaries.md) génèrent chaque matin : statistiques, un bloc markdown par section et toutes les tâches que l'IA en a extraites.

- **URL de base** — `https://api.dmchamp.com/v1`
- **Authentification** — votre clé API (voir [Authentification](authentication.md)). Une [clé à portée limitée](api-keys.md#scoped-keys) nécessite la section `Summaries`.
- **Erreurs et pagination** — voir [Erreurs et pagination](errors-and-pagination.md)

Tous les exemples ci-dessous utilisent le format de requête `?apiKey=` en cURL et l'en-tête `X-API-Key` en JavaScript et Python — les deux fonctionnent sur chaque point de terminaison.

---

## Générer un résumé de chat

`POST /summaries` — envoyez le `phoneNumber` du contact (avec l'indicatif pays) ou son `email` ; l'un des deux est requis.

L'IA lit la conversation la plus récemment **fermée** du contact, ou celle qui est encore ouverte si aucune n'a encore été fermée, et en rédige un récapitulatif. Le récapitulatif est enregistré sur le contact (il apparaît sous **Résumés** dans le panneau du contact dans l'application) et renvoyé dans la réponse, afin que vous puissiez le transférer directement vers un CRM, un canal Slack ou un e-mail.

**Coût :** identique à celui d'une réponse IA au niveau de qualité IA de l'agent — Pro 1 crédit, Max 0,25, Mini 0,15 ; avec votre propre clé Anthropic connectée, Pro coûte 0. La requête est refusée avant toute génération si le solde ne suffit pas.

**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"])
```

**Réponse**

```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."
}
```

| Statut | Signification |
|---|---|
| `400` | Ni `phoneNumber` ni `email` n'ont été envoyés. |
| `404` | Aucun contact ne correspond, le contact n'a pas encore de conversation, ou la conversation ne contient aucun message. Le `message` du corps de la réponse précise lequel. |
| `500` | La génération a échoué (par exemple, crédits insuffisants). |

> **Recette d'automatisation : e-mail de réservation avec récapitulatif.** Dans une [automatisation](../automations/automations.md) sur le déclencheur **Rendez-vous réservé**, ajoutez une étape **Requête HTTP** qui appelle ce point de terminaison avec `${trigger.contact.phone_number}` (ou l'e-mail du contact), puis une étape **E-mail** qui insère le `summary` provenant de la réponse de l'étape HTTP, accompagné d'un lien vers le chat (l'adresse de votre application suivie de `/chats/` et de l'ID du contact provenant du déclencheur). Votre équipe obtient le contexte de la réservation dans le même e-mail, sans avoir à ouvrir la boîte de réception.

> **Lecture des résumés.** Il n'existe aucun point de terminaison permettant de lister les résumés de chat enregistrés. Conservez le texte de la réponse si vous en avez besoin plus tard, ou générez-le à nouveau (chaque appel est facturé).

### Alternative : par ID de contact

`POST /summaries/chat-summary` avec `{"contactId": "..."}` effectue la même génération pour un contact dont vous possédez déjà l'ID. Il confirme uniquement le succès (`{"success": true, "data": "Chat summary generated successfully"}`) et ne renvoie **pas** le texte ; utilisez donc `POST /summaries` lorsque vous souhaitez obtenir le récapitulatif lui-même. Un membre de l'équipe dont la clé est limitée aux contacts qui lui sont assignés recevra `404` pour un contact en dehors de ce périmètre.

---

## Obtenir un résumé quotidien

`GET /summaries/daily/{date}` — `date` est `YYYY-MM-DD`. Renvoie le résumé pour ce jour, ou `null` sous `summary` lorsqu'aucun n'a encore été généré, ainsi que votre configuration de section.

**cURL**

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

**Réponse**

```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` ou `failed` (avec `error` activé). Interrogez ce point de terminaison après une régénération jusqu'à ce qu'il indique `completed`.
- **`sections`** — une chaîne markdown par section, indexée par l'identifiant de la section. Les cinq sections standard sont `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` et `booked_meetings_sales` ; les sections que vous ajoutez sous **Configurer** sur la page des Résumés quotidiens reçoivent un identifiant `custom_…`. Les noms et l'ordre sont repris dans `section_configs`.
- **`contact_map`** — nom d'affichage vers l'identifiant de contact, afin que vous puissiez transformer les noms dans le texte en liens.
- **`auto_tasks`** / **`created_task_ids`** — les éléments d'action extraits par l'IA et les tâches créées à partir de ceux-ci (lorsque **Créer des cartes de tâches à partir des éléments d'action** est activé).

| Statut | Signification |
|---|---|
| `400` | `date` n'est pas `YYYY-MM-DD`, ou est dans le futur. |
| `403` | Les Résumés quotidiens sont désactivés pour le compte. |

> Vous préférez une notification push plutôt qu'une interrogation ? L'événement [webhook](../integrations/webhooks.md) **Résumé quotidien créé** envoie la même charge utile dès qu'un résumé du matin est terminé.

---

## Régénérer un résumé quotidien

`POST /summaries/daily/{date}/regenerate` — démarre une nouvelle génération pour ce jour en arrière-plan et renvoie immédiatement `status: "generating"` et un `sections` vide. Interrogez `GET /summaries/daily/{date}` jusqu'à ce qu'il soit terminé. Les mêmes règles s'appliquent que pour le lien **Réessayer** dans l'application.

Le corps optionnel `{"deleteTasks": false}` conserve les tâches créées lors de l'exécution précédente ; par défaut, elles sont supprimées et recréées à partir du nouveau résumé. Envoyez un booléen réel — la chaîne `"false"` est ignorée et traitée comme la valeur par défaut.

```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}'
```

---

## Référence rapide

| Tâche | Point de terminaison |
|---|---|
| Générer un résumé de chat et obtenir le texte | `POST /summaries` |
| Générer un résumé de chat par identifiant de contact (aucun texte renvoyé) | `POST /summaries/chat-summary` |
| Lire le résumé d'une journée | `GET /summaries/daily/{date}` |
| Régénérer le résumé d'une journée | `POST /summaries/daily/{date}/regenerate` |
