Skip to main content
Flextell şu anda tek bir realtime kanal grubu yayınlar: sohbet kanalları. Tüm sohbet olayları bir tenant’ın kanalına, tek bir adla düşer.

chat-log.{tenantId}

tenantId
integer
required
Bu tenant’a bağlı tüm sohbet olaylarını dinlemek için abone olacağınız kanaldaki tenant ID’si. Bu değeri GET /v1/account/tenants ile kullanıcının erişebildiği tenant listesinden alırsınız.

Kanal özellikleri

ÖzellikDeğer
Kanal tipiprivate
Pusher üzerindeki adıprivate-chat-log.<tenantId>
Yayınlanan event sayısı3 (aşağıya bakın)
YetkilendirmeBearer token + tenant erişim kontrolü

Yayınlanan event’ler

ChatLogCreated

Yeni bir mesaj geldi veya gönderildi.

ChatLogDeleted

Bir mesaj silindi.

ConversationRead

Bir kullanıcı görüşmeyi okundu olarak işaretledi.

Event yönü

Her üç event her iki yönde de tetiklenir:
  • Hasta tarafından gelen mesajlar (WhatsApp, Telegram),
  • Panelden (veya API üzerinden) gönderilen mesajlar,
  • Panel kullanıcılarının okundu işaretlemesi.
Yani kanalınız, paneldeki mesaj kutusunun canlı görünümü için tek başına yeterlidir — ayrıca “gönderdiğim mesajı güncelle” diye local state tutmanıza gerek kalmaz.

Abone olma örüntüsü

Kullanıcı birden fazla tenant’a erişebiliyorsa

Flextell API’leri “aktif tenant” kavramını X-Tenant header’ı üzerinden sürdürür. Realtime tarafında ise her tenant için ayrı kanal vardır. Bu nedenle:
  • Aktif tenant 12 ise private-chat-log.12 kanalına abone olun.
  • Kullanıcı 15’e geçerse: private-chat-log.12’den ayrılıp (pusher.unsubscribe(...)) private-chat-log.15’e abone olun.
  • Birden fazla tenant için tek sayfada bildirim istiyorsanız, hepsine eşzamanlı abone olun (Pusher bağlantı başına 100 kanal destekler — bir kullanıcı için bu genelde fazlasıyla yeterlidir).
function subscribeTenant(pusher, tenantId, handlers) {
  const channel = pusher.subscribe(`private-chat-log.${tenantId}`);

  channel.bind("App\\Events\\ChatLogCreated", handlers.onCreated);
  channel.bind("App\\Events\\ChatLogDeleted", handlers.onDeleted);
  channel.bind("App\\Events\\ConversationRead", handlers.onRead);

  return () => pusher.unsubscribe(`private-chat-log.${tenantId}`);
}

Bağlantı kurma sırasını doğru kurun

pusher.subscribe(...) çağrısı, hâlihazırda bir bağlantı yoksa yeni bir bağlantı kurar. Auth header’ınız (Bearer token) bağlantı kurulduktan sonra değişirse istemci onu tekrar okumayabilir. Uzun ömürlü sayfalarda token’ı yenilediğinizde pusher.disconnect() sonrasında yeni bir Pusher örneği oluşturmak daha güvenlidir.

Hata ayıklama

Subscribe sonrası başarısız olan abonelikleri yakalamak için:
channel.bind("pusher:subscription_error", (error) => {
  if (error?.status === 403) {
    console.warn("Bu tenant'a erişim yok:", error);
  } else if (error?.status === 401) {
    console.warn("Bearer token geçersiz; yenilemek gerekli");
  }
});

Disconnected / offline davranışı

Pusher istemcileri ağ bağlantısı koptuğunda otomatik yeniden bağlanır ve kanallara yeniden abone olur. Bu süre zarfında yayınlanan event’ler geçmişe yönelik olarak teslim edilmez — yani 10 saniye bağlantınız yoksa, o 10 saniyede gelen mesajlar WebSocket üzerinden size ulaşmaz. Bu eksiği kapatmak için:
  1. Yeniden bağlanır bağlanmaz GET /v1/conversations?updated_since=... çağrısı ile kaçan değişiklikleri çekin.
  2. Ya da her mesajla birlikte gelen id veya created_at değerini takip edip “bunun üzerindeki event’leri sorgula” mantığı kurun.

Gelecek kanallar

Flextell ileride randevu, stok ve AI raporu için de realtime kanallar açmayı değerlendirmektedir. Yeni kanallar eklendiğinde Changelog’da duyurulur.