
# API podsumowań

Za pośrednictwem API dostępne są dwa rodzaje podsumowań tworzonych przez AI:

- **Podsumowania czatu** — krótkie streszczenie rozmowy z jednym kontaktem, generowane na żądanie. To samo, co kontrolka podsumowania na czacie (zobacz [Podsumowanie czatu](../chats/chat-interface.md#chat-summary)).
- **Podsumowania dzienne** — codzienne zestawienie wszystkich rozmów, które [Podsumowania dzienne](../daily-summaries/daily-summaries.md) tworzy każdego ranka: statystyki, jeden blok markdown na sekcję oraz wszelkie zadania utworzone na ich podstawie przez AI.

- **Podstawowy adres URL** — `https://api.dmchamp.com/v1`
- **Uwierzytelnianie** — Twój klucz API (zobacz [Uwierzytelnianie](authentication.md)). [Klucz o ograniczonym zakresie](api-keys.md#scoped-keys) wymaga sekcji `Summaries`.
- **Błędy i stronicowanie** — zobacz [Błędy i stronicowanie](errors-and-pagination.md)

Wszystkie poniższe przykłady pokazują formularz zapytania `?apiKey=` w cURL oraz nagłówek `X-API-Key` w JavaScript i Pythonie — oba działają w każdym punkcie końcowym.

---

## Generowanie podsumowania czatu

`POST /summaries` — wyślij `phoneNumber` kontaktu (z kodem kraju) lub `email`; wymagane jest podanie jednego z nich.

AI odczytuje ostatnią **zamkniętą** rozmowę kontaktu lub tę, która jest nadal otwarta, jeśli żadna nie została jeszcze zamknięta, i tworzy jej streszczenie. Streszczenie jest zapisywane w kontakcie (pojawia się w sekcji **Podsumowania** w panelu kontaktu w aplikacji) i zwracane w odpowiedzi, dzięki czemu można je bezpośrednio przekazać do systemu CRM, na kanał Slack lub w wiadomości e-mail.

**Koszt:** taki sam jak jedna odpowiedź AI w ramach poziomu jakości AI agenta — Pro 1 kredyt, Max 0,25, Mini 0,15; przy podłączonym własnym kluczu Anthropic koszt wersji Pro wynosi 0. Żądanie jest odrzucane przed wygenerowaniem czegokolwiek, jeśli saldo nie pokrywa kosztów.

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

**Odpowiedź**

```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 | Znaczenie |
|---|---|
| `400` | Nie wysłano ani `phoneNumber`, ani `email`. |
| `404` | Brak pasującego kontaktu, kontakt nie ma jeszcze żadnej rozmowy lub rozmowa nie zawiera żadnych wiadomości. Treść `message` wskazuje przyczynę. |
| `500` | Generowanie nie powiodło się (na przykład z powodu niewystarczającej liczby kredytów). |

> **Przepis na automatyzację: e-mail z rezerwacją i streszczeniem.** W [automatyzacji](../automations/automations.md) dla wyzwalacza **Spotkanie zarezerwowane** dodaj krok **Żądanie HTTP**, który wywołuje ten punkt końcowy za pomocą `${trigger.contact.phone_number}` (lub adresu e-mail kontaktu), a następnie krok **E-mail**, który wstawia `summary` z odpowiedzi kroku HTTP wraz z linkiem do czatu (adres Twojej aplikacji, po którym następuje `/chats/` oraz identyfikator kontaktu z wyzwalacza). Twój zespół otrzymuje kontekst rezerwacji w tym samym e-mailu, bez konieczności otwierania skrzynki odbiorczej.

> **Odczytywanie podsumowań.** Nie ma punktu końcowego, który wyświetlałby listę zapisanych podsumowań czatów. Zachowaj tekst z odpowiedzi, jeśli będziesz go potrzebować później, lub wygeneruj go ponownie (każde wywołanie jest płatne).

### Alternatywa: według identyfikatora kontaktu

`POST /summaries/chat-summary` z `{"contactId": "..."}` wykonuje to samo generowanie dla kontaktu, którego identyfikator już posiadasz. Potwierdza jedynie sukces (`{"success": true, "data": "Chat summary generated successfully"}`) i **nie** zwraca tekstu, więc użyj `POST /summaries`, gdy chcesz uzyskać samo streszczenie. Członek zespołu, którego klucz jest ograniczony do przypisanych mu kontaktów, otrzyma `404` dla kontaktu spoza tego zakresu.

---

## Pobieranie podsumowania dziennego

`GET /summaries/daily/{date}` — `date` to `YYYY-MM-DD`. Zwraca podsumowanie dla tego dnia lub `null` w ramach `summary`, jeśli żadne nie zostało jeszcze wygenerowane, wraz z konfiguracją sekcji.

**cURL**

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

**Odpowiedź**

```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` lub `failed` (z ustawionym `error`). Odpytuj ten punkt końcowy po ponownym wygenerowaniu, aż jego stan zmieni się na `completed`.
- **`sections`** — jeden ciąg znaków markdown na sekcję, kluczowany identyfikatorem sekcji. Pięć standardowych sekcji to `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` oraz `booked_meetings_sales`; sekcje dodane w sekcji **Konfiguracja** na stronie Podsumowań Dziennych otrzymują identyfikator `custom_…`. Nazwy i kolejność są powtarzane w `section_configs`.
- **`contact_map`** — nazwa wyświetlana przypisana do identyfikatora kontaktu, dzięki czemu możesz zamienić nazwy w tekście na linki.
- **`auto_tasks`** / **`created_task_ids`** — elementy działań wyodrębnione przez AI oraz zadania utworzone na ich podstawie (gdy opcja **Twórz karty zadań z elementów działań** jest włączona).

| Status | Znaczenie |
|---|---|
| `400` | `date` nie jest `YYYY-MM-DD` lub dotyczy przyszłości. |
| `403` | Podsumowania dzienne są wyłączone dla tego konta. |

> Wolisz powiadomienia push zamiast odpytywania? [Zdarzenie webhook](../integrations/webhooks.md) **Daily Summary Created** dostarcza ten sam ładunek danych w momencie zakończenia generowania porannego podsumowania.

---

## Ponowne generowanie podsumowania dziennego

`POST /summaries/daily/{date}/regenerate` — uruchamia w tle nowe generowanie dla danego dnia i natychmiast zwraca `status: "generating"` oraz puste `sections`. Odpytuj `GET /summaries/daily/{date}`, aż proces zostanie zakończony. Obowiązują te same zasady, co w przypadku linku **Spróbuj ponownie** w aplikacji.

Opcjonalna treść `{"deleteTasks": false}` zachowuje zadania utworzone podczas poprzedniego uruchomienia; domyślnie są one usuwane i tworzone ponownie na podstawie nowego podsumowania. Wyślij wartość logiczną (boolean) — ciąg znaków `"false"` jest ignorowany i traktowany jako wartość domyślna.

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

---

## Szybki przewodnik

| Zadanie | Punkt końcowy |
|---|---|
| Wygeneruj podsumowanie czatu i pobierz tekst | `POST /summaries` |
| Wygeneruj podsumowanie czatu według identyfikatora kontaktu (tekst nie jest zwracany) | `POST /summaries/chat-summary` |
| Odczytaj podsumowanie dnia | `GET /summaries/daily/{date}` |
| Wygeneruj ponownie podsumowanie dnia | `POST /summaries/daily/{date}/regenerate` |
