Skip to main content
Flextell, sohbet kanalında şu an üç event yayınlar. Hepsi private-chat-log.{tenantId} kanalında tetiklenir.
Event adları tam nitelikli biçimde yayınlanır: App\Events\ChatLogCreated. Bazı Pusher istemcilerinde bu adlarla dinlemek için isim başına nokta (.) koymak gerekir: .listen(".App\\Events\\ChatLogCreated", ...). Doğrudan Pusher client kullanıyorsanız nokta olmadan bind("App\\Events\\ChatLogCreated", ...) yazın.

ChatLogCreated

Bir tenant içinde yeni bir chat_log satırı oluştuğunda tetiklenir. Bu event:
  • Panel kullanıcısı bir mesaj gönderdiğinde,
  • Hasta tarafından bir mesaj geldiğinde (WhatsApp/Telegram),
  • AI asistanı bir yanıt ürettiğinde
yayınlanır.

Payload

Payload, ChatLog API modeli’nin serileştirilmiş halidir. İstisnai olarak, modelin tüm ilişkileri otomatik yüklenmez — yalnızca varsayılan alanlar gelir.
{
  "id": 1042,
  "tenant_id": 12,
  "conversation_id": 58,
  "sender_type": "customer",
  "sender_id": 391,
  "body": "Yarın randevumu alabilir miyim?",
  "media_type": null,
  "status": "received",
  "read_at": null,
  "created_at": "2026-04-19T10:12:00+03:00",
  "updated_at": "2026-04-19T10:12:00+03:00"
}
Alan listesi zaman içinde genişleyebilir — istemci tarafında bilinmeyen alanları göz ardı edin ve yalnızca güvendiğiniz alanlara güvenin. Gerekirse detay için GET /v1/conversations/{id}/messages/{messageId} çağrısı atabilirsiniz.

Tipik kullanım

channel.listen(".App\\Events\\ChatLogCreated", (message) => {
  if (message.conversation_id === currentConversationId) {
    appendMessage(message);
    scrollToBottom();
  } else {
    incrementUnreadBadge(message.conversation_id);
  }
});

ChatLogDeleted

Bir mesaj soft-delete edildiğinde tetiklenir.

Payload

{
  "chatLogId": 1042,
  "conversationId": 58,
  "deletedByUserName": "Dr. Ayşe Yılmaz"
}
chatLogId
integer
Silinen mesajın ID’si.
conversationId
integer
Silinen mesajın ait olduğu görüşmenin ID’si.
deletedByUserName
string | null
Silme işlemini yapan kullanıcının adı. Sistem tarafından silinmişse null gelebilir.

Tipik kullanım

channel.listen(".App\\Events\\ChatLogDeleted", ({ chatLogId, conversationId, deletedByUserName }) => {
  removeMessageFromUi(chatLogId);

  showToast(`Bir mesaj silindi (${deletedByUserName ?? "sistem"}).`);
});

ConversationRead

Bir kullanıcı görüşmeyi “okundu” olarak işaretlediğinde tetiklenir. Aynı kullanıcının farklı cihazlarda açık olan sekmelerini veya farklı panel kullanıcılarının paylaşılan görüşme ekranını senkronlamak için kullanışlıdır.

Payload

{
  "conversation_id": 58
}
conversation_id
integer
Okundu olarak işaretlenen görüşmenin ID’si.

Tipik kullanım

channel.listen(".App\\Events\\ConversationRead", ({ conversation_id }) => {
  markConversationRead(conversation_id); // UI'daki "●" badge'ini kaldır
});

Event özet tablosu

EventPayload alanlarıNe zaman tetiklenir?
App\Events\ChatLogCreatedTam ChatLog model şemasıYeni mesaj oluştuğunda
App\Events\ChatLogDeletedchatLogId, conversationId, deletedByUserNameMesaj soft-delete edildiğinde
App\Events\ConversationReadconversation_idGörüşme okundu olarak işaretlendiğinde

Sık sorulanlar

WebSocket teslim edilmemiş event’leri kuyrukta tutmaz. Yeniden bağlandığınızda eksikleri REST üzerinden doldurun — örneğin GET /v1/conversations/{id}/messages?after=<lastMessageId>.
Kanal adı tenant’a göre değişir; ortama göre değişmez. Ortam farkı endpoint (dev.flextell.ai vs app.flextell.ai) ve Pusher key üzerinde olur. Bkz. Ortamlar.
ChatLogCreated payload’ında sender_type ve sender_id gelir. Gönderenin detaylı bilgisine ihtiyacınız varsa (isim, avatar vs.), REST tarafında GET /v1/users/{id} veya GET /v1/customers/{id} ile çekebilirsiniz. Sık tekrar eden bu çağrıları istemci tarafında cache’leyin.
Flextell bilinçli olarak tam nitelikli event adı (ör. App\Events\ChatLogCreated) yayınlar. Bu sayede ileride bir event adını değiştirmeye kalkarsak istemciler kırılmayı fark eder ve sessizce yanlış event’i dinlemez. İstemci kodunuzda event adlarını bir sabit olarak tutmak iyi bir pratiktir.