> ## 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.

# Realtime — Genel Bakış

> Flextell WebSocket tabanlı realtime kanalları üzerinden sohbet olaylarını dakika dakika dinleyin.

Flextell, sohbet olaylarını (yeni mesaj, mesaj silme, görüşmenin okunduğunun işaretlenmesi) **WebSocket** üzerinden yayınlar. REST API'yi sürekli poll'lamak yerine, bir kez abone olup event'leri anlık alırsınız.

<Note>
  Realtime katmanı [Pusher](https://pusher.com) protokolü üzerinde çalışır. İstemci tarafında **pusher-js** (veya uyumlu bir Pusher istemcisi) kullanmak en kolay yoldur.
</Note>

## Kullanım senaryoları

<CardGroup cols={2}>
  <Card title="Canlı sohbet arayüzü" icon="messages">
    Hasta WhatsApp'tan yazdığında mesajı panelde anlık gösterin.
  </Card>

  <Card title="Okundu göstergesi" icon="check-double">
    Başka bir kullanıcı sohbeti okuduğunda tüm açık sekmelerde durumu güncelleyin.
  </Card>

  <Card title="Silme senkronizasyonu" icon="trash">
    Bir mesaj silindiğinde diğer istemcilerin listesinden anında kaldırın.
  </Card>

  <Card title="Aktivite bildirimleri" icon="bell">
    Konuşma akışını izleyen bir üretkenlik aracı yapın.
  </Card>
</CardGroup>

## Mimari

```mermaid theme={null}
sequenceDiagram
    participant App as İstemciniz<br/>(pusher-js)
    participant Pusher as Pusher Cloud<br/>(eu cluster)
    participant Flextell as Flextell API

    App->>Pusher: 1. WebSocket bağlantısı kur
    Pusher-->>App: 2. socket_id
    App->>Flextell: 3. POST /api/broadcasting/auth<br/>(Bearer token + socket_id + channel_name)
    Flextell->>Flextell: 4. Tenant erişim kontrolü
    Flextell-->>App: 5. auth signature
    App->>Pusher: 6. subscribe private-chat-log.{tenantId}<br/>(+ auth signature)
    Pusher-->>App: 7. subscription_succeeded
    Pusher->>App: 8. Event akışı başlar<br/>(ChatLogCreated, ChatLogDeleted, ConversationRead)
```

1. İstemci, bir **private channel**'a abone olmak ister.
2. pusher-js, `POST /api/broadcasting/auth` endpoint'ine çağrı atarak Flextell'den **kanal imzası** alır.
3. Flextell, kullanıcının ilgili tenant'a erişimini kontrol eder.
4. İmza geçerliyse Pusher bağlantıyı kurar; event'ler istemciye akmaya başlar.

## Önemli kavramlar

<ResponseField name="Private channel" type="string">
  Kanal adı `private-` ile başlar ve abone olmadan önce imzalı yetkilendirme gerektirir. Flextell yalnızca private kanallar sunar — `public` veya `presence` kanal kullanılmaz.
</ResponseField>

<ResponseField name="Kanal adlandırması" type="string">
  Tüm sohbet olayları **`chat-log.{tenantId}`** kanalı üzerinden yayınlanır. `tenantId`, [Multi-Tenancy](/tenancy/overview) sayfasında anlatılan tenant'ın ID'sidir.
</ResponseField>

<ResponseField name="Event adı" type="string">
  Event adları tam nitelikli biçimde yayınlanır: `App\Events\ChatLogCreated`, `App\Events\ChatLogDeleted`, `App\Events\ConversationRead`. Pusher istemcilerinde event adını bu biçimde (gerektiğinde başında bir nokta `.` ile) dinlemeniz gerekir.
</ResponseField>

## Gerekli bilgiler

WebSocket bağlantısı kurmak için istemci tarafında şu yapılandırmaya ihtiyacınız var:

| Parametre                    | Değer                                                                                                     |
| ---------------------------- | --------------------------------------------------------------------------------------------------------- |
| `broadcaster`                | `pusher`                                                                                                  |
| `key`                        | Flextell'den size verilen Pusher key (destek üzerinden)                                                   |
| `cluster`                    | `eu`                                                                                                      |
| `forceTLS`                   | `true`                                                                                                    |
| `authEndpoint`               | `https://dev.flextell.ai/api/broadcasting/auth` (prod'da `https://app.flextell.ai/api/broadcasting/auth`) |
| `auth.headers.Authorization` | `Bearer <access_token>`                                                                                   |

<Warning>
  Pusher key'i bir "public anahtar"dır; istemci tarafında yer alması güvenlik açığı değildir. Ancak gerçek yetkiyi veren şey `authEndpoint` çağrısıdır — orada `Authorization: Bearer` header'ını mutlaka göndermeniz gerekir.
</Warning>

## Sonraki adımlar

<CardGroup cols={3}>
  <Card title="Kanal Yetkilendirme" icon="shield-check" href="/realtime/authorize">
    /broadcasting/auth endpoint'inin detayları.
  </Card>

  <Card title="Kanallar" icon="satellite-dish" href="/realtime/channels">
    chat-log.{tenantId} kanalı ve abonelik örüntüsü.
  </Card>

  <Card title="Event'ler" icon="bolt" href="/realtime/events">
    Her event'in payload şeması ve örnekleri.
  </Card>
</CardGroup>
