Skip to main content
Flextell’in tüm realtime kanalları private kanallardır. Bir istemci WebSocket üzerinden chat-log.{tenantId} kanalına abone olmak istediğinde, Pusher önce /api/broadcasting/auth endpoint’ine bir istek atar ve yetkilendirme imzası bekler.
Normal şartlarda bu endpoint’i elle çağırmanıza gerek yoktur. pusher-js (veya uyumlu bir Pusher istemcisi) abonelik akışının bir parçası olarak otomatik çağırır. Kendi WebSocket kütüphanenizi yazıyorsanız bu sayfa detayları verir.

Endpoint

POST /api/broadcasting/auth
Authorization: Bearer $TOKEN
Content-Type: application/x-www-form-urlencoded

İstek gövdesi

Pusher protokolü şu iki alanı gönderir:
socket_id
string
required
İstemci WebSocket bağlantısının benzersiz kimliği. pusher-js bunu otomatik üretir ve gönderir.
channel_name
string
required
Abone olunmak istenen kanalın adı. Private kanallarda private- önek’i ile başlar. Örn. private-chat-log.12.

Başarılı yanıt

{
  "auth": "<pusher_app_key>:<hmac_sha256_signature>",
  "channel_data": null
}
Pusher istemcisi bu imzayı alır, WebSocket üzerinden Pusher’a iletir ve Pusher kanalı açar.
Bu endpoint’in yanıtını kendi uygulamanızda saklamayın veya başka bir kullanıcıyla paylaşmayın — imza yalnızca ilgili socket_id için geçerlidir ve kısa ömürlüdür.

Kimlik doğrulama

  • Bearer token zorunludur. Token yok veya geçersizse 401 Unauthorized döner.
  • X-Tenant header’ı gerekmez. Tenant kontrolü, kanal adının içindeki {tenantId} üzerinden yapılır. Flextell, abone olmak istediğiniz tenant’a erişiminiz olup olmadığını otomatik doğrular.

Olası hatalar

DurumSonuç
Token yok/geçersiz401 Unauthorized
Kanal chat-log.<id> formatında değil403 Forbidden (tanımsız kanala abonelik)
Kullanıcı o tenant’a erişemiyor403 Forbidden
Tenant bulunamıyor403 Forbidden
403 aldığınızda istemciye “bu tenant’a erişiminiz yok” gibi açıklayıcı bir mesaj göstermek iyi bir pratiktir — Pusher tarafında subscription_error callback’i ile yakalayabilirsiniz.

pusher-js ile otomatik yetkilendirme

pusher-js kullandığınızda auth.headers ayarı sayesinde Bearer token her auth çağrısına otomatik eklenir:
import Pusher from "pusher-js";

const pusher = new Pusher("YOUR_PUSHER_APP_KEY", {
  cluster: "eu",
  forceTLS: true,
  authEndpoint: "https://dev.flextell.ai/api/broadcasting/auth",
  auth: {
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
  },
});

// Abonelik:
const channel = pusher.subscribe(`private-chat-log.${tenantId}`);

channel.bind("App\\Events\\ChatLogCreated", (event) => {
  console.log("Yeni mesaj:", event);
});
pusher-js, abonelik sırasında authEndpoint’e çağrı atar ve alınan imzayla kanalı açar.

Backend-tarafı (server-side) abone olma

Sunucudan sunucuya dinleme yapmak istiyorsanız (ör. bir entegrasyon servisi) Pusher’ın sunucu SDK’larından birini kullanabilir ve kanala /broadcasting/auth üzerinden abone olabilirsiniz. Bu tarz kullanımlarda genellikle sürekli bir WebSocket bağlantısı yerine webhook veya doğrudan REST poll önerilir.

Token yenileme ile etkileşim

Access token’ınızın süresi dolduğunda mevcut WebSocket bağlantısı çalışmaya devam eder; ancak yeni bir kanala abone olmaya çalışırsanız /broadcasting/auth isteği 401 döner. Bu durumda:
  1. Refresh Token akışıyla yeni bir access token alın.
  2. Pusher istemcinizin auth.headers.Authorization değerini güncelleyin.
  3. Gerekirse yeniden bağlanın (pusher.disconnect() + yeni new Pusher(...) örneği).
Uzun süre açık kalan sayfalarda (ör. canlı destek paneli) token süresi dolduğunda otomatik refresh mantığı şarttır. Aksi halde kullanıcı fark etmeden realtime akışı “sessiz” olarak kesilebilir.