> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flextell.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Bildirimler ve duyurular

> Kullanıcı bildirim akışını, mesaj bildirimlerini, okundu işaretlemeyi ve duyuruları anlatır.

Bu kaynak, giriş yapmış kullanıcının kendi bildirimlerini okumanızı ve yönetmenizi sağlar. Bildirim akışı tek bir listede iki kaynağı birleştirir: hasta mesajı bildirimleri (`chat`) ve randevu, destek talebi, görev, dışa aktarma gibi sistem bildirimleri (`system`). Duyurular ise Flextell'in tüm kliniklere yayınladığı bilgilendirmelerdir. Panel tarafındaki görünümü [Bildirimler ve duyurular](/panel/baslarken/bildirimler-ve-duyurular) sayfasında bulabilirsiniz.

<Info>
  Bu kaynaktaki tüm endpoint'ler `X-Tenant` başlığı ister. Başlığın nasıl kullanılacağı için [Klinikler ve X-Tenant](/api/klinikler-ve-x-tenant) sayfasına bakın. Bildirim ve mesaj bildirimi endpoint'lerinde ayrıca bir izin kontrolü yoktur; yalnızca scope gerekir ve her zaman kendi verilerinizi görürsünüz. Duyuru endpoint'leri bunun dışındadır; `View:Announcement` izni de ister (bkz. [Duyurular](#duyurular)).
</Info>

## Endpoint özeti

Tüm yollar `https://app.flextell.ai/api/v1` altındadır.

| Metot | Endpoint | Açıklama | Scope |
| - | - | - | - |
| GET | `/notifications` | Sohbet ve sistem bildirimlerini tek akış olarak listeler. | `notifications:read` |
| GET | `/notifications/unread-count` | Okunmamış bildirim sayılarını verir. | `notifications:read` |
| GET | `/notifications/system/{id}/download-url` | Dışa aktarma bildirimi için yeni indirme bağlantısı üretir. | `notifications:read` |
| POST | `/notifications/{source}/{id}/read` | Tek bildirimi okundu işaretler. | `notifications:write` |
| POST | `/notifications/{source}/{id}/dismiss` | Tek bildirimi kaldırır. | `notifications:write` |
| POST | `/notifications/read-all` | Tüm bildirimleri okundu işaretler. | `notifications:write` |
| POST | `/notifications/clear` | Tüm bildirimleri temizler. | `notifications:write` |
| GET | `/message-notifications` | Mesaj bildirimlerini listeler. | `message_notifications:read` |
| GET | `/message-notifications/unread-count` | Okunmamış mesaj bildirimi sayısını verir. | `message_notifications:read` |
| POST | `/message-notifications/{id}/read` | Tek mesaj bildirimini okundu işaretler. | `message_notifications:write` |
| POST | `/message-notifications/{id}/dismiss` | Tek mesaj bildirimini kaldırır. | `message_notifications:write` |
| POST | `/message-notifications/read-all` | Tüm mesaj bildirimlerini okundu işaretler. | `message_notifications:write` |
| POST | `/message-notifications/clear` | Tüm mesaj bildirimlerini kaldırır. | `message_notifications:write` |
| GET | `/announcements` | Duyuruları listeler. | `announcements:read` |
| GET | `/announcements/{id}` | Tek duyuruyu getirir. | `announcements:read` |

Scope'ların nasıl isteneceği için [Scope'lar](/api/kimlik-dogrulama/scopelar) sayfasına bakın.

## Bildirim akışı

`GET /notifications` isteği, seçili klinikteki bildirimlerinizi `created_at` azalan sırada, tek sayfalı bir liste olarak döndürür. Sayfalama kuralları için [Sayfalama](/api/istekler/sayfalama) sayfasına bakın.

| Parametre | Tür | Açıklama |
| - | - | - |
| `source` | `chat` \| `system` | Yalnızca bir kaynağı listeler. Geçersiz değer 422 döner. |
| `unread` | boolean | `true` ise yalnızca okunmamışları listeler. |
| `created_at_from`, `created_at_to` | tarih | Oluşturulma aralığı. Tarihler kliniğin saat dilimine göre yorumlanır. |
| `per_page` | tamsayı | En çok 100, varsayılan 15. |
| `page` | tamsayı | Sayfa numarası. |

Her öğe şu alanları taşır:

| Alan | Tür | Açıklama |
| - | - | - |
| `id` | string | `chat` için sayısal, `system` için UUID. |
| `source` | string | `chat` veya `system`. |
| `type` | string \| null | Bildirim türü, örneğin `appointment_created`, `chat_new_message`, `ticket_assigned`. Türü olmayan bildirimlerde (ör. faturalama) `null`. |
| `category` | string \| null | `appointment`, `message`, `ticket`, `lead`, `inventory`, `sales`, `finance`, `announcement`, `panel_ticket`, `report`. |
| `level` | string \| null | `info`, `success`, `warning`, `danger`. Sohbet bildirimlerinde her zaman `info`. |
| `title`, `body` | string \| null | Başlık ve gövde metni. |
| `resource`, `resource_id` | string \| null | Bildirimin açılacağı kayıt: `task`, `appointment`, `ticket`, `panel_ticket`, `lead`, `ai_report`, `proforma_invoice`, `announcement`, `product`, `file`, `conversation`. |
| `parent_resource`, `parent_resource_id` | string \| null | Yalnızca `task` için: görevin bağlı olduğu `lead` veya `customer`. |
| `download_url` | string \| null | Dışa aktarma bildirimlerinde indirme bağlantısı. |
| `avatar_url` | string \| null | Bildirimin ilgili olduğu hastanın fotoğrafı; yoksa `null`. |
| `read_at`, `created_at` | tarih | Okunma ve oluşturulma zamanı. |

Sohbet bildirimlerinde `title` hastanın adıdır; ad yoksa sohbetin telefon numarası veya adresi, o da yoksa `Hasta` gelir. `body` mesajın önizlemesidir. Son 30 günden eski hasta mesajları ve kaldırılmış bildirimler akışa girmez.

### Okunmamış sayısı

`GET /notifications/unread-count` yanıtı toplamı ve kaynak kırılımını verir.

```json theme={null}
{
  "unread_count": 5,
  "chat": 3,
  "system": 2
}
```

### Dışa aktarma indirme bağlantısı

Satış veya hasta bakiye dışa aktarma sonuçları bildirim olarak gelir. Bağlantının süresi dolduğunda `GET /notifications/system/{id}/download-url` ile `download_url` ve `expires_at` içeren yeni bir bağlantı alın. Bağlantı 24 saat geçerlidir.

| Kod | HTTP | Ne zaman |
| - | - | - |
| `RESOURCE_NOT_FOUND` | 404 | Bildirim size ait değil veya kimlik geçersiz. |
| `NOTIFICATION_NOT_DOWNLOADABLE` | 422 | Bildirim bir dışa aktarma bildirimi değil. |
| `NOTIFICATION_EXPORT_FILE_MISSING` | 404 | Dosya artık yok veya bildirim eski. Dışa aktarmayı yeniden başlatın. |
| `FORBIDDEN` | 403 | `Export:Sale` veya `Export:CustomerBalances` iznine artık sahip değilsiniz. |

## Okundu işaretleme

Tek bir bildirimi işaretlemek için `source` ve `id` değerlerini yola yazın. `source` yalnızca `chat` veya `system` olabilir.

| İşlem | Endpoint | Yanıt |
| - | - | - |
| Okundu işaretle | `POST /notifications/{source}/{id}/read` | Güncel bildirim nesnesi. |
| Kaldır | `POST /notifications/{source}/{id}/dismiss` | `{"message": "Bildirim kaldırıldı"}` |
| Hepsini okundu işaretle | `POST /notifications/read-all` | `{"message": "Tüm bildirimler okundu olarak işaretlendi"}` |
| Hepsini temizle | `POST /notifications/clear` | `{"message": "Tüm bildirimler temizlendi"}` |

<Warning>
  Sistem bildirimini kaldırmak veya temizlemek kaydı kalıcı olarak siler. Sohbet bildirimleri ise silinmez, `dismissed` durumuna alınır ve akışta görünmez.
</Warning>

Bulunamayan bildirim için 404 `Bildirim bulunamadı` döner. `source` değeri geçersizse 422 döner.

```bash theme={null}
curl -X POST "https://app.flextell.ai/api/v1/notifications/system/<bildirim_uuid>/read" \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>"
```

## Mesaj bildirimleri

Hasta size yeni bir mesaj yazdığında, bildirim alması gereken her kullanıcı için bir mesaj bildirimi oluşur ve telefona anlık bildirim gönderilir. Bu kayıtlar `/message-notifications` endpoint'leriyle ayrıca yönetilir; birleşik akışta ise `source=chat` olarak görünür.

Kimin bildirim alacağı şu kurallarla belirlenir:

* Kliniğin sohbet ayarlarındaki **Bildirim Alacak Roller** listesinde yer alan bir role sahip olmalısınız. Varsayılan rol `assistant`'tır; liste boşsa kimse bildirim almaz. Listeyi `PUT /settings/chat` ile güncellerken `message_notification_roles` alanını ve mevcut parolanızı gönderirsiniz. Ayrıntı için [Ayarlar](/api/kaynaklar/ayarlar) sayfasına bakın.
* Kullanıcı o sohbeti görebiliyor olmalıdır: `ViewAllConversations:Conversation` iznine sahip olmalı veya ilgili kişinin lead'i ona atanmış olmalıdır. Görünürlük kuralları için [İzinler ve görünürlük](/api/izinler-ve-gorunurluk) sayfasına bakın.
* Kullanıcı `chat_new_message` bildirim türünü kapatmamış olmalıdır.
* WhatsApp geçmişi senkronizasyonuyla sonradan gelen eski mesajlar bildirim üretmez.

`GET /message-notifications` parametreleri:

| Parametre | Açıklama |
| - | - |
| `status` | `unread`, `read` veya `dismissed`. Verilmezse kaldırılmamış olanlar gelir. |
| `per_page`, `page` | Sayfalama. |

Yalnızca son 30 gün içindeki hasta mesajları listelenir ve sayılır. Her öğe `id`, `tenant_id`, `user_id`, `chat_log_id`, `status`, `read_at`, `dismissed_at`, `message`, `customer`, `created_at` ve `updated_at` alanlarını içerir. `GET /message-notifications/unread-count` yanıtı `{"unread_count": 3}` biçimindedir.

Toplu işlemlerin yanıtları: `read-all` için `Tüm mesaj bildirimleri okundu olarak işaretlendi`, `clear` için `Tüm mesaj bildirimleri temizlendi`. Bulunamayan kayıt için 404 `Mesaj bildirimi bulunamadı` döner. `{id}` yalnızca sayı olabilir.

<Note>
  Mesaj bildirimi endpoint'leri `notifications:*` scope'larını değil, `message_notifications:read` ve `message_notifications:write` scope'larını ister. Yeni entegrasyonlarda tüm bildirimleri tek yerden okumak için `/notifications` akışını kullanın.
</Note>

## Duyurular

Duyurular, Flextell'in kliniklere ilettiği genel bilgilendirmelerdir. İçerik tüm klinikler için aynıdır; API'den duyuru oluşturulamaz veya düzenlenemez.

<Warning>
  `/announcements` endpoint'leri hem `X-Tenant` başlığını hem de `View:Announcement` iznini ister. Başlık yoksa 400 `TENANT_HEADER_REQUIRED` döner. Bu izin her klinik rolünde tanımlıdır.
</Warning>

`GET /announcements` parametreleri:

| Parametre | Açıklama |
| - | - |
| `is_active` | `true` ise yalnızca şu an yayında olanlar, `false` ise diğerleri. |
| `severity` | `low`, `medium` veya `high`. |
| `start_date_from`, `start_date_to` | Başlangıç tarihi aralığı. |
| `end_date_from`, `end_date_to` | Bitiş tarihi aralığı. |
| `created_at_from`, `created_at_to` | Oluşturulma tarihi aralığı. |
| `sort_by` | `start_date` (varsayılan), `end_date`, `severity`, `is_active`, `created_at`, `updated_at`. |
| `sort_order` | `asc` veya `desc`. |
| `per_page`, `page` | Sayfalama. |

Sıralama kuralları için [Filtreleme ve sıralama](/api/istekler/filtreleme-ve-siralama) sayfasına bakın.

| Alan | Tür | Açıklama |
| - | - | - |
| `id` | tamsayı | Duyuru kimliği. |
| `title`, `content` | string | Başlık ve içerik. |
| `is_active` | boolean | Hesaplanan değerdir: duyuru etkin ve şu an başlangıç ile bitiş tarihleri arasında ise `true`. |
| `severity` | string | `low` (Düşük), `medium` (Orta), `high` (Yüksek). |
| `start_date`, `end_date` | tarih | Yayın aralığı. |
| `created_at`, `updated_at` | tarih | Kayıt zamanları. |

Bulunamayan duyuru için 404 `Duyuru bulunamadı` döner. Duyuruların okundu bilgisi sunucuda tutulmaz; okundu takibini istemcinizde yapın.

```bash theme={null}
curl "https://app.flextell.ai/api/v1/announcements?is_active=true&severity=high" \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>"
```

## Gerçek zamanlı bildirimler

Bildirim akışınızı yoklamak yerine, kullanıcıya özel `private-App.Models.User.{userId}` kanalını dinleyebilirsiniz. Kanalı yalnızca ilgili kullanıcı dinleyebilir. Kanal klinikten bağımsızdır; olaylardaki `tenant_id` değerine bakıp başka kliniğe ait olayları yok sayın.

| Olay | Ne zaman | Yük |
| - | - | - |
| `notification.created` | Size yeni bir sistem veya sohbet bildirimi geldiğinde. | `tenant_id` ve akıştaki öğeyle aynı alanlara sahip `notification` nesnesi. |
| `notifications.updated` | Bir bildirimi okundu işaretlediğinizde, kaldırdığınızda veya hepsini okundu işaretlediğinizde ya da temizlediğinizde. Diğer açık istemcilerinizi güncel tutar. | `tenant_id`, `unread_count`, `chat`, `system`. |

Olay geldiğinde rozetteki sayıyı yük içindeki değerlerle güncelleyin veya akışı yeniden çekin. Bağlantı kurma ve kanal yetkilendirme adımları için [Gerçek zamanlı genel bakış](/api/gercek-zamanli/genel-bakis) ve [Kanallar ve olaylar](/api/gercek-zamanli/kanallar-ve-olaylar) sayfalarına bakın.

<Note>
  Bildirim türünü kapatan kullanıcılar o türden bildirim almaz. Faturalama gibi türü olmayan bildirimler kapatılamaz. Tercihler `/account/notification-preferences` ile yönetilir; ayrıntı için [Hesap](/api/kaynaklar/hesap) sayfasına bakın.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.