Skip to main content
Bu sayfa, pusher-js kütüphanesiyle Flextell’in gerçek zamanlı kanallarına bağlanan çalışır bir istemci kurar. İstemci kliniğin sohbet kanalına abone olur, olayları dinler ve bağlantı koptuğunda veriyi REST API’den yeniden okur. Kanalların ve olayların tam listesi için Kanallar ve olaylar sayfasına bakın.
Gerçek zamanlı olaylar yalnızca “bir şey değişti” bilgisini taşır. Kaçan olaylar sonradan tekrar gönderilmez. REST API her zaman doğru veri kaynağıdır; olay aldığınızda ya da yeniden bağlandığınızda ilgili kaydı API’den okuyun.

Kurulum

Başlamadan önce şunlara ihtiyacınız var: Kütüphaneyi kurun:

Bağlanma ve yetkilendirme

Flextell kanalları private- önekiyle başlar. Pusher her abonelikten önce socket_id ve kanal adını sizin yetkilendirme uç noktanıza gönderir. Siz de bunu Flextell’e iletirsiniz: POST https://app.flextell.ai/api/broadcasting/auth Bu adres /api/v1 önekini taşımaz. İsteğin gövdesi socket_id ve channel_name alanlarıdır. Form (application/x-www-form-urlencoded) ya da JSON olarak gönderebilirsiniz. Bu uç nokta scope istemez ve X-Tenant başlığına bakmaz. Klinik yetkisi kanal adından belirlenir.
Yetkilendirme hataları şöyle döner:
Token ömrü kısadır. customHandler içinde token’ı sabit bir değişkenden okumak yerine her çağrıda güncel değeri alın. Yeniden bağlanmada Pusher yetkilendirmeyi yeniden ister. Token yenileme için Token’lar sayfasına bakın.

Kanala abone olma

Sohbet olayları için iki kanal vardır. Hangisine katılabileceğiniz izinlerinize bağlıdır. Tüm sohbetleri göremeyen bir kullanıcı private-chat-log kanalında 403 alır. Örnek istemciyi her kullanıcıda çalışacak şekilde private-chat-log-activity kanalı üzerine kurmak en güvenli yoldur: olay gelince ilgili kaydı REST API’den okursunuz, API de yalnızca kullanıcının görebildiği sohbetleri döndürür.
Tam yüklere de ihtiyacınız varsa ve kullanıcı tüm sohbetleri görebiliyorsa private-chat-log.${TENANT_ID} kanalına da aynı şekilde abone olun. Bir sohbetteki Flexy önerisini canlı izlemek için sohbet başına ayrı bir kanal vardır: private-ai-suggestion.{conversationId}. Kullanıcının View:Conversation izni olmalı ve sohbeti görebilmelidir. Sohbeti kapattığınızda pusher.unsubscribe(...) ile kanaldan çıkın.

Olayları işleme

Olay adı, olay sınıfının tam adıdır. pusher-js ile adı tek ters eğik çizgiyle, kod içinde ise kaçışlı yazarak bağlayın.
Aşağıdaki fonksiyonlar uygulamanıza özgüdür. Veriyi her zaman API’den okuyun:
Dikkat edilecek noktalar:
  • Olayların sırası garanti değildir. Örneğin ConversationRead, sonradan oluşan bir mesaj olayından sonra gelebilir.
  • Sizin işleminizin olayı size de gelir. Aynı kaydı iki kez işlememek için kimliğe göre tekilleştirin.
  • ChatLogCreated içinde medya mesajının dosyası henüz hazır olmayabilir. Dosya hazır olunca ChatLogUpdated gelir.
  • ConversationCreated, ConversationDeleted, ConversationRead gibi olaylar yalnızca kimlik taşır; ayrıntı için API’ye gidin.
Laravel Echo kullanıyorsanız kanal adını private- öneki olmadan yazın ve olay adının başına nokta koyun: Echo.private('chat-log-activity.123').listen('.Modules\\Chat\\Events\\ChatLogChanged', cb). Nokta olmazsa Echo olay adının başına kendi ad alanını ekler ve olay eşleşmez.

Flexy önerisi olayları

private-ai-suggestion.{conversationId} kanalı iki olay yayınlar. Yük 9000 bayttan büyükse requires_hydration: true gelir; bu durumda öneriyi GET /api/v1/conversations/{id}/ai-suggestion ile okuyun.

Yeniden bağlanma

pusher-js bağlantı koptuğunda kendiliğinden yeniden bağlanır ve kanallara yeniden abone olur. Koptuğu sürede gelen olaylar tekrar gönderilmez. Bu yüzden her başarılı abonelikte veriyi API’den yeniden okuyun.
1

Aboneliği dinleyin

pusher:subscription_succeeded olayına bağlanın. Bu olay hem ilk abonelikte hem de her yeniden bağlanmada çalışır.
2

Durumu yeniden okuyun

Olayın içinde sohbet listesini ve açık sohbetin mesajlarını GET /api/v1/conversations ve GET /api/v1/conversations/{id}/messages ile yenileyin.
3

Bağlantı durumunu izleyin

pusher.connection.bind('state_change', ...) ile durumu izleyin. Durum unavailable veya failed olduğunda kullanıcıya canlı bağlantının kesildiğini gösterin ve elle yenileme seçeneği sunun.
4

Klinik değişince kanaldan çıkın

Kullanıcı başka bir kliniğe geçtiğinde pusher.unsubscribe(...) ile eski kanalı bırakın ve yeni klinik kimliğiyle abone olun. Oturum kapanınca pusher.disconnect() çağırın.
Yetkilendirme isteği 401 dönerse token’ın süresi dolmuştur. Token’ı yenileyip aboneliği yeniden kurun. 403 dönerse kullanıcının o kanal için izni yoktur; yeniden denemek sonucu değiştirmez.

İlgili sayfalar

Genel bakış

Gerçek zamanlı mimari ve yetkilendirme akışı.

Kanallar ve olaylar

Tüm kanallar, olay adları ve yükler.