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.
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.
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.
- 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.
ChatLogCreatediçinde medya mesajının dosyası henüz hazır olmayabilir. Dosya hazır oluncaChatLogUpdatedgelir.ConversationCreated,ConversationDeleted,ConversationReadgibi 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.İlgili sayfalar
Genel bakış
Gerçek zamanlı mimari ve yetkilendirme akışı.
Kanallar ve olaylar
Tüm kanallar, olay adları ve yükler.