
# Özetler API'si

API üzerinden iki tür yapay zeka tarafından yazılmış özet mevcuttur:

- **Sohbet özetleri** — bir kişinin konuşmasının, talep üzerine oluşturulan kısa bir özeti. Sohbet içindeki özet denetimiyle aynı şeydir (bkz. [Sohbet Özeti](../chats/chat-interface.md#chat-summary)).
- **Günlük özetler** — [Günlük Özetler](../daily-summaries/daily-summaries.md) özelliğinin her sabah oluşturduğu, tüm konuşmalarınızı kapsayan günlük derleme: istatistikler, bölüm başına bir markdown bloğu ve yapay zekanın bundan oluşturduğu tüm görevler.

- **Temel URL** — `https://api.dmchamp.com/v1`
- **Kimlik Doğrulama** — API anahtarınız (bkz. [Kimlik Doğrulama](authentication.md)). [Kapsamlı bir anahtarın](api-keys.md#scoped-keys) `Summaries` bölümüne ihtiyacı vardır.
- **Hatalar ve sayfalama** — bkz. [Hatalar ve Sayfalama](errors-and-pagination.md)

Aşağıdaki tüm örnekler cURL'de `?apiKey=` sorgu biçimini ve JavaScript ile Python'da `X-API-Key` başlığını göstermektedir; her ikisi de her uç noktada çalışır.

---

## Sohbet özeti oluşturma

`POST /summaries` — kişinin `phoneNumber` (ülke koduyla birlikte) veya `email` bilgisini gönderin; ikisinden biri zorunludur.

Yapay zeka, kişinin en son **kapatılan** konuşmasını veya henüz hiçbiri kapatılmamışsa hala açık olan konuşmasını okur ve bir özetini yazar. Özet, kişi üzerinde saklanır (uygulamadaki kişi panelinde **Özetler** altında görünür) ve yanıtta döndürülür, böylece doğrudan bir CRM'e, Slack kanalına veya e-postaya iletebilirsiniz.

**Maliyet:** Temsilcinin Yapay Zeka Kalite seviyesindeki bir yapay zeka yanıtıyla aynıdır — Pro 1 kredi, Max 0.25, Mini 0.15; kendi Anthropic anahtarınız bağlıyken Pro 0 maliyetlidir. Bakiye karşılamadığında, herhangi bir şey oluşturulmadan önce istek reddedilir.

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

**Yanıt**

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

| Durum | Anlamı |
|---|---|
| `400` | Ne `phoneNumber` ne de `email` gönderildi. |
| `404` | Hiçbir kişi eşleşmiyor, kişinin henüz bir konuşması yok veya konuşmada hiç mesaj yok. Gövdenin `message` kısmı hangisi olduğunu belirtir. |
| `500` | Oluşturma başarısız oldu (örneğin, yetersiz kredi). |

> **Otomasyon tarifi: özet içeren rezervasyon e-postası.** **Randevu alındı** tetikleyicisindeki bir [otomasyonda](../automations/automations.md), bu uç noktayı `${trigger.contact.phone_number}` (veya kişinin e-postası) ile çağıran bir **HTTP isteği** adımı ekleyin, ardından HTTP adımının yanıtından gelen `summary` bilgisini, sohbet bağlantısıyla (uygulamanızın adresi ve ardından `/chats/` ile tetikleyiciden gelen kişi kimliği) birlikte ekleyen bir **E-posta** adımı ekleyin. Ekibiniz, gelen kutusunu açmadan aynı e-postada rezervasyon bağlamını alır.

> **Özetleri geri okuma.** Kayıtlı sohbet özetlerini listeleyen bir uç nokta yoktur. Daha sonra ihtiyacınız olursa metni yanıttan saklayın veya tekrar oluşturun (her çağrı ücretlendirilir).

### Alternatif: kişi kimliğine göre

`{"contactId": "..."}` ile `POST /summaries/chat-summary`, kimliğine zaten sahip olduğunuz bir kişi için aynı oluşturma işlemini yapar. Sadece başarıyı (`{"success": true, "data": "Chat summary generated successfully"}`) onaylar ve metni **döndürmez**, bu nedenle özetin kendisine ihtiyacınız olduğunda `POST /summaries` kullanın. Anahtarı yalnızca atanan kişileriyle sınırlı olan bir ekip üyesi, bu kapsam dışındaki bir kişi için `404` alır.

---

## Günlük özet alma

`GET /summaries/daily/{date}` — `date`, `YYYY-MM-DD` şeklindedir. O gün için özeti veya henüz hiçbiri oluşturulmadığında `summary` altında `null` değerini ve bölüm yapılandırmanızı döndürür.

**cURL**

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

**Yanıt**

```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` veya `failed` (`error` ayarı açıkken). Yeniden oluşturma işleminden sonra, durum `completed` olana kadar bu uç noktayı sorgulayın.
- **`sections`** — bölüm kimliğine göre anahtarlanmış, bölüm başına bir markdown dizisi. Beş standart bölüm `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` ve `booked_meetings_sales`'dir; Günlük Özetler sayfasında **Yapılandır** altında eklediğiniz bölümler `custom_…` kimliğine sahip olur. İsimler ve sıralama `section_configs` içinde yansıtılır.
- **`contact_map`** — metindeki isimleri bağlantılara dönüştürebilmeniz için kişi kimliğine karşılık gelen görünen ad.
- **`auto_tasks`** / **`created_task_ids`** — yapay zekanın çıkardığı eylem öğeleri ve bunlardan oluşturduğu görevler (**Eylem öğelerinden görev kartları oluştur** açık olduğunda).

| Durum | Anlamı |
|---|---|
| `400` | `date` henüz `YYYY-MM-DD` değil veya gelecekte. |
| `403` | Günlük Özetler hesap için kapalı. |

> Sorgulama yerine anlık bildirim mi tercih edersiniz? **Günlük Özet Oluşturuldu** [webhook olayı](../integrations/webhooks.md), sabah özeti tamamlandığı anda aynı yükü iletir.

---

## Günlük özeti yeniden oluştur

`POST /summaries/daily/{date}/regenerate` — arka planda o gün için yeni bir oluşturma işlemi başlatır ve hemen `status: "generating"` ve boş `sections` ile döner. Tamamlanana kadar `GET /summaries/daily/{date}` uç noktasını sorgulayın. Uygulamadaki **Tekrar dene** bağlantısı için geçerli olan kuralların aynısı geçerlidir.

İsteğe bağlı `{"deleteTasks": false}` gövdesi, önceki çalıştırmanın oluşturduğu görevleri korur; varsayılan olarak bunlar silinir ve yeni özet üzerinden yeniden oluşturulur. Gerçek bir boolean değeri gönderin — `"false"` dizisi göz ardı edilir ve varsayılan olarak kabul edilir.

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

---

## Hızlı başvuru

| Görev | Uç Nokta |
|---|---|
| Sohbet özeti oluştur ve metni al | `POST /summaries` |
| Kişi kimliğine göre sohbet özeti oluştur (metin döndürülmez) | `POST /summaries/chat-summary` |
| Bir günün özetini oku | `GET /summaries/daily/{date}` |
| Bir günün özetini yeniden oluştur | `POST /summaries/daily/{date}/regenerate` |
