
# API dei riepiloghi

Sono disponibili due tipi di riepiloghi scritti dall'IA tramite API:

- **Riepiloghi chat** — un breve riassunto della conversazione di un contatto, generato su richiesta. È la stessa funzione del controllo di riepilogo in una chat (vedi [Riepilogo chat](../chats/chat-interface.md#chat-summary)).
- **Riepiloghi giornalieri** — il riepilogo quotidiano di tutte le tue conversazioni che [Riepiloghi giornalieri](../daily-summaries/daily-summaries.md) crea ogni mattina: statistiche, un blocco markdown per sezione ed eventuali attività create dall'IA a partire da esso.

- **URL di base** — `https://api.dmchamp.com/v1`
- **Autenticazione** — la tua chiave API (vedi [Autenticazione](authentication.md)). Una [chiave con ambito limitato](api-keys.md#scoped-keys) richiede la sezione `Summaries`.
- **Errori e paginazione** — vedi [Errori e paginazione](errors-and-pagination.md)

Tutti gli esempi seguenti mostrano il formato di query `?apiKey=` in cURL e l'intestazione `X-API-Key` in JavaScript e Python; entrambi funzionano su ogni endpoint.

---

## Genera un riepilogo chat

`POST /summaries` — invia il `phoneNumber` del contatto (con prefisso internazionale) o il `email`; uno dei due è obbligatorio.

L'IA legge la conversazione più recente **chiusa** del contatto, o quella ancora aperta se nessuna è stata ancora chiusa, e ne scrive un riassunto. Il riassunto viene salvato sul contatto (appare sotto **Riepiloghi** nel pannello del contatto nell'app) e restituito nella risposta, così puoi inoltrarlo direttamente a un CRM, un canale Slack o un'email.

**Costo:** lo stesso di una risposta IA al livello di qualità IA dell'Agente — Pro 1 credito, Max 0,25, Mini 0,15; con la tua chiave Anthropic collegata, Pro costa 0. La richiesta viene rifiutata prima di qualsiasi generazione se il saldo non è sufficiente.

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

**Risposta**

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

| Stato | Significato |
|---|---|
| `400` | Non è stato inviato né `phoneNumber` né `email`. |
| `404` | Nessun contatto corrispondente, il contatto non ha ancora conversazioni o la conversazione non ha messaggi. Il `message` del corpo indica il motivo. |
| `500` | Generazione non riuscita (ad esempio, crediti insufficienti). |

> **Ricetta di automazione: email di prenotazione con riepilogo.** In un'[automazione](../automations/automations.md) sul trigger **Appuntamento prenotato**, aggiungi un passaggio **Richiesta HTTP** che chiama questo endpoint con `${trigger.contact.phone_number}` (o l'email del contatto), quindi un passaggio **Email** che inserisce il `summary` dalla risposta del passaggio HTTP insieme a un link alla chat (l'indirizzo della tua app seguito da `/chats/` e l'ID del contatto dal trigger). Il tuo team riceve il contesto della prenotazione nella stessa email, senza dover aprire la posta in arrivo.

> **Lettura dei riepiloghi.** Non esiste un endpoint che elenca i riepiloghi chat salvati. Conserva il testo dalla risposta se ti serve in seguito, oppure generalo di nuovo (ogni chiamata viene fatturata).

### Alternativa: tramite ID contatto

`POST /summaries/chat-summary` con `{"contactId": "..."}` esegue la stessa generazione per un contatto di cui possiedi già l'ID. Conferma solo il successo (`{"success": true, "data": "Chat summary generated successfully"}`) e **non** restituisce il testo, quindi usa `POST /summaries` quando desideri il riepilogo stesso. Un membro del team la cui chiave è limitata ai contatti assegnati riceve `404` per un contatto al di fuori di tale ambito.

---

## Ottieni un riepilogo giornaliero

`GET /summaries/daily/{date}` — `date` è `YYYY-MM-DD`. Restituisce il riepilogo per quel giorno, o `null` sotto `summary` quando non ne è stato ancora generato nessuno, oltre alla configurazione della tua sezione.

**cURL**

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

**Risposta**

```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` impostato). Esegui il polling di questo endpoint dopo una rigenerazione finché non legge `completed`.
- **`sections`** — una stringa markdown per sezione, identificata dall'id della sezione. Le cinque sezioni standard sono `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` e `booked_meetings_sales`; le sezioni che aggiungi in **Configura** nella pagina Riepiloghi giornalieri ottengono un id `custom_…`. I nomi e l'ordine sono riportati in `section_configs`.
- **`contact_map`** — nome visualizzato per l'ID contatto, in modo da poter trasformare i nomi nel testo in link.
- **`auto_tasks`** / **`created_task_ids`** — gli elementi d'azione estratti dall'IA e le attività create a partire da essi (quando **Crea schede attività dagli elementi d'azione** è attivo).

| Stato | Significato |
|---|---|
| `400` | `date` non è `YYYY-MM-DD`, o è nel futuro. |
| `403` | I Riepiloghi giornalieri sono disattivati per l'account. |

> Preferisci un push invece del polling? L'evento [webhook](../integrations/webhooks.md) **Daily Summary Created** invia lo stesso payload nel momento in cui termina un riepilogo mattutino.

---

## Rigenera un riepilogo giornaliero

`POST /summaries/daily/{date}/regenerate` — avvia una nuova generazione per quel giorno in background e restituisce immediatamente `status: "generating"` e `sections` vuoto. Esegui il polling di `GET /summaries/daily/{date}` finché non viene completato. Si applicano le stesse regole del link **Riprova** nell'app.

Il corpo opzionale `{"deleteTasks": false}` mantiene le attività create dall'esecuzione precedente; per impostazione predefinita vengono eliminate e ricreate dal nuovo riepilogo. Invia un valore booleano reale: la stringa `"false"` viene ignorata e trattata come impostazione predefinita.

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

---

## Riferimento rapido

| Attività | Endpoint |
|---|---|
| Genera un riepilogo della chat e ottieni il testo | `POST /summaries` |
| Genera un riepilogo della chat per ID contatto (nessun testo restituito) | `POST /summaries/chat-summary` |
| Leggi il riepilogo di un giorno | `GET /summaries/daily/{date}` |
| Rigenera il riepilogo di un giorno | `POST /summaries/daily/{date}/regenerate` |
