
# Summaries API

Två typer av AI-genererade sammanfattningar finns tillgängliga via API:et:

- **Chattsammanfattningar** — en kort återblick av en kontakts konversation, genererad på begäran. Samma sak som sammanfattningskontrollen i en chatt (se [Chattsammanfattning](../chats/chat-interface.md#chat-summary)).
- **Dagliga sammanfattningar** — den dagliga sammanställningen av alla dina konversationer som [Dagliga sammanfattningar](../daily-summaries/daily-summaries.md) skapar varje morgon: statistik, ett markdown-block per sektion och eventuella uppgifter som AI:n skapat utifrån den.

- **Bas-URL** — `https://api.dmchamp.com/v1`
- **Autentisering** — din API-nyckel (se [Autentisering](authentication.md)). En [begränsad nyckel](api-keys.md#scoped-keys) behöver sektionen `Summaries`.
- **Fel & paginering** — se [Fel & Paginering](errors-and-pagination.md)

Alla exempel nedan visar frågeformuläret `?apiKey=` i cURL och headern `X-API-Key` i JavaScript och Python — båda fungerar på alla slutpunkter.

---

## Generera en chattsammanfattning

`POST /summaries` — skicka kontaktens `phoneNumber` (med landsnummer) eller `email`; en av de två krävs.

AI:n läser kontaktens senast **avslutade** konversation, eller den som fortfarande är öppen om ingen har avslutats än, och skriver en återblick av den. Återblicken lagras på kontakten (den visas under **Sammanfattningar** i kontaktpanelen i appen) och returneras i svaret, så att du kan skicka den vidare direkt till ett CRM, en Slack-kanal eller ett e-postmeddelande.

**Kostnad:** samma som ett AI-svar på agentens AI-kvalitetsnivå — Pro 1 kredit, Max 0,25, Mini 0,15; med din egen Anthropic-nyckel ansluten kostar Pro 0. Förfrågan nekas innan något genereras om saldot inte täcker kostnaden.

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

**Svar**

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

| Status | Betydelse |
|---|---|
| `400` | Varken `phoneNumber` eller `email` skickades. |
| `404` | Ingen kontakt matchar, kontakten har ingen konversation än, eller konversationen har inga meddelanden. Kroppens `message` anger vilket. |
| `500` | Genereringen misslyckades (till exempel på grund av otillräckliga krediter). |

> **Automatiseringsrecept: boknings-e-post med återblick.** I en [automatisering](../automations/automations.md) för utlösaren **Tid bokad**, lägg till ett **HTTP-förfrågningssteg** som anropar denna slutpunkt med `${trigger.contact.phone_number}` (eller kontaktens e-post), följt av ett **E-poststeg** som infogar `summary` från HTTP-stegets svar tillsammans med en länk till chatten (din apps adress följt av `/chats/` och kontakt-ID:t från utlösaren). Ditt team får kontexten för bokningen i samma e-postmeddelande, utan att behöva öppna inkorgen.

> **Läsa sammanfattningar i efterhand.** Det finns ingen slutpunkt som listar lagrade chattsammanfattningar. Spara texten från svaret om du behöver den senare, eller generera den igen (varje anrop debiteras).

### Alternativ: via kontakt-ID

`POST /summaries/chat-summary` med `{"contactId": "..."}` utför samma generering för en kontakt vars ID du redan har. Den bekräftar endast framgång (`{"success": true, "data": "Chat summary generated successfully"}`) och returnerar **inte** texten, så använd `POST /summaries` när du vill ha själva återblicken. En teammedlem vars nyckel är begränsad till sina tilldelade kontakter får `404` för en kontakt utanför det omfånget.

---

## Hämta en daglig sammanfattning

`GET /summaries/daily/{date}` — `date` är `YYYY-MM-DD`. Returnerar sammanfattningen för den dagen, eller `null` under `summary` när ingen har genererats än, plus din sektionskonfiguration.

**cURL**

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

**Svar**

```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` eller `failed` (med `error` inställt). Poll-anropa denna slutpunkt efter en återskapning tills den läser `completed`.
- **`sections`** — en markdown-sträng per sektion, nycklad efter sektions-id. De fem standardsektionerna är `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` och `booked_meetings_sales`; sektioner du lägger till under **Konfigurera** på sidan Dagliga sammanfattningar får ett `custom_…`-id. Namn och ordning återspeglas i `section_configs`.
- **`contact_map`** — visningsnamn till kontakt-ID, så att du kan göra om namnen i texten till länkar.
- **`auto_tasks`** / **`created_task_ids`** — de åtgärdspunkter som AI:n extraherade och de uppgifter den skapade från dem (när **Skapa uppgiftskort från åtgärdspunkter** är aktiverat).

| Status | Betydelse |
|---|---|
| `400` | `date` är inte `YYYY-MM-DD`, eller ligger i framtiden. |
| `403` | Dagliga sammanfattningar är avstängt för kontot. |

> Föredrar du push framför polling? [Webhook-händelsen](../integrations/webhooks.md) **Daglig sammanfattning skapad** levererar samma nyttolast i samma ögonblick som en morgonsammanfattning är klar.

---

## Återskapa en daglig sammanfattning

`POST /summaries/daily/{date}/regenerate` — startar en ny generering för den dagen i bakgrunden och returnerar omedelbart med `status: "generating"` och tom `sections`. Poll-anropa `GET /summaries/daily/{date}` tills den är klar. Samma regler gäller som för länken **Försök igen** i appen.

Valfri brödtext `{"deleteTasks": false}` behåller uppgifterna som den föregående körningen skapade; som standard raderas de och återskapas från den nya sammanfattningen. Skicka ett faktiskt booleskt värde — strängen `"false"` ignoreras och behandlas som standardvärdet.

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

---

## Snabbreferens

| Uppgift | Slutpunkt |
|---|---|
| Generera en chattsammanfattning och hämta texten | `POST /summaries` |
| Generera en chattsammanfattning via kontakt-ID (ingen text returneras) | `POST /summaries/chat-summary` |
| Läs en dags sammanfattning | `GET /summaries/daily/{date}` |
| Återskapa en dags sammanfattning | `POST /summaries/daily/{date}/regenerate` |
