Skip to main content
Web sitesi widget’ı, sitenizde canlı sohbet balonu gösterir. Ziyaretçinin ilk mesajı klinikte Sohbetler bölümüne düşer ve AI asistan ziyaretçiye yanıt verebilir. Bu sayfa, widget’ı sitenize gömmek isteyen entegratörler ve widget’ın herkese açık uç noktalarını doğrudan kullanmak isteyenler içindir. Widget’ın panelden kurulumu için Web sitesi widget’ı sayfasına bakın. Kanal kaynağının genel yapısı için Kanallar sayfasına bakın.
Widget uç noktaları /api/v1 altında değildir ve OAuth access_token istemez. Kimlik bilgisi, yoldaki embed_token ile ziyaretçi oturumunun session_token değeridir. Yanıtlar standart API zarfında dönmez; hata biçimi için sayfanın sonundaki Güvenlik ve sınırlar bölümüne bakın.

Gömme kodu

Her web sitesi kanalının bir embed_token değeri vardır. Kanal oluşturulduğunda otomatik üretilir. Gömme kodu bu değeri taşıyan tek satırlık bir script etiketidir.
1

Kanalı oluşturun

Panelde Bağlantılar → Entegrasyonlar → Website → Kanallar yolundan Kanal Ekle’ye tıklayın. Website alan adı alanına sitenizin alan adını protokol ve www olmadan girin (örneğin example.com). Yerel geliştirme için port ekleyebilirsiniz (localhost:5500). Kanalı API ile de açabilirsiniz; bkz. Kanallar.
2

Gömme kodunu alın

Kanal satırının menüsünden Embed Script’i seçin ve Kodu Kopyala’ya tıklayın. API ile almak için aşağıdaki uç noktayı kullanın.
3

Kodu sayfaya ekleyin

Kodu HTML sayfanızdaki kapanış </body> etiketinden hemen önce yapıştırın. Etiket yöneticisi kullanıyorsanız oradan da ekleyebilirsiniz.
embed-snippet yanıtı üç alan içerir: embed_token, embed_url ve snippet. Kanalda token yoksa CHANNEL_EMBED_TOKEN_MISSING (422) döner. Kanal web sitesi kanalı değilse widget uç noktaları CHANNEL_NOT_WEBSITE (422) döner.
rotate-token eski gömme kodunu hemen çalışmaz hâle getirir ve tüm ziyaretçi oturumlarını geçersiz kılar. Token’ı yeniledikten sonra yeni kodu sitenize eklemeniz gerekir. Panelde bu işlemin adı Token Yenile’dir.

Yapılandırma

Widget’ın görünümü ve davranışı kanalın widget yapılandırmasında tutulur. PUT isteği kısmi birleştirme yapar: yalnız gönderdiğiniz alanlar değişir. Başlıca alanlar: Yazı tipi, başlık, mesaj balonu, giriş alanı ve açma düğmesi (FAB) için ek alanlar da vardır. Tam listeyi GET yanıtında görebilirsiniz. Başlık, kullanıcı mesajı, gönder düğmesi ve FAB arka plan renkleri boş bırakılırsa primary_color kullanılır. Renk alanları onaltılık biçimde değilse 422 döner.
Widget altında “Powered by Flextell” ibaresi her zaman görünür. show_branding yapılandırmadan kapatılamaz.
Panelde aynı ayarlar Widget Ayarları sayfasındadır. Widget, sayfanızda iframe olmadan çalışır; sitenizin CSS’i ve custom_css aynı sayfayı etkiler.

Ziyaretçi oturumu

Embed script yüklenince önce yapılandırmayı okur, sonra oturum açar. Kendi arayüzünüzü yazıyorsanız aynı sırayı izleyin. Örneklerde Origin başlığı zorunludur; tarayıcı bunu kendisi gönderir, curl ile siz ekleyin.
1

Yapılandırmayı okuyun

GET /widget/{token}/config tema alanlarını, uç nokta adreslerini ve gerçek zamanlı bağlantı ayarlarını döndürür. Yanıttaki başlıca alanlar: channel_id, channel_name, api_base_url, session_endpoint, message_endpoint, broadcast_driver, broadcast_config, broadcast_auth_endpoint, ai_online.
2

Oturum başlatın veya sürdürün

POST /widget/{token}/session isteğinde kayıtlı session_token değerini gönderin. İlk ziyarette alanı boş bırakın.
3

Token'ı saklayın

Yanıttaki session_token değerini saklayın ve sonraki isteklerde gönderin. Embed script bunu tarayıcıda localStorage içinde flextell-widget:{embed_token}:session_token anahtarıyla tutar.
Oturum açmak veri yazmaz. Sohbet, hasta kaydı ve (kliniğinizde aktif bir pipeline varsa) Lead ancak ziyaretçi ilk mesajı gönderdiğinde oluşur. Hasta kaydı ad ve telefon içermez. session_token 30 gün geçerlidir.

Mesaj gönderme

Ziyaretçi mesajı POST /widget/{token}/message ile gider.
Başarılı yanıt { "success": true, "chat_log_id": 123, "conversation_id": 456 } biçimindedir. Geçersiz, süresi dolmuş veya yenilenmiş token’la gönderirseniz 403 ve {"message": "Invalid session"} alırsınız. Mesaj kaydedilemezse 409 ve Could not create chat log döner.
Ziyaretçi yalnızca metin mesajı gönderebilir. Ek ve konum yalnızca klinik personelinden ziyaretçiye gider. Personelin yazdığı biçimlendirilmiş (markdown) metin ziyaretçiye düz metin olarak iletilir.

Gerçek zamanlı kanal

Personelin ve AI asistanın yanıtları ziyaretçiye presence-conversation.{conversationId} kanalından gelir. Ziyaretçinin sohbeti yokken kanal da yoktur. İlk message yanıtında conversation_id gelir; kanala o andan sonra abone olun. Bağlantı ayarlarını config yanıtındaki broadcast_config alanı verir (key, cluster, wsHost, wsPort, wssPort, forceTLS, enabledTransports). Kanal yetkilendirmesi için broadcast_auth_endpoint adresine socket_id, channel_name ve session_token gönderilir. Bu uç nokta yalnızca ziyaretçinin kendi sohbetinin kanalını yetkilendirir.
message nesnesinin başlıca alanları: id, message_id, body, role (customer veya agent), is_customer, is_deleted, edited_at, message_type, media_type, created_at, file_url, file_name, file_mime_type, file_size, file_download_url. Silinen mesajda body boştur. file_download_url 1 saat geçerli, imzalı bir bağlantıdır.
Kaçan olaylar tekrar gönderilmez. Bağlantı kurulunca (pusher:subscription_succeeded) session uç noktasını yeniden çağırıp son 100 mesajı okuyun ve ekrandakilerle birleştirin. Embed script de böyle çalışır.
Kliniğin personel tarafındaki kanalları için Kanallar ve olaylar sayfasına bakın. Personel bu presence kanalına yalnızca View:Conversation iznine sahipse ve sohbeti görebiliyorsa abone olabilir.

Güvenlik ve sınırlar

Alan adı denetimi

Widget uç noktaları (embed.js hariç) isteğin Origin başlığını kanalın Website alan adı ile karşılaştırır.
  • Alan adı büyük/küçük harfe ve baştaki www. önekine duyarsızdır.
  • Alan adı portsuz kaydedildiyse her port kabul edilir. Portlu kaydedildiyse yalnız o port kabul edilir.
  • Başka alt alan adları reddedilir. example.com kayıtlıyken shop.example.com çalışmaz.
  • Origin başlığı olmayan istekler reddedilir.
  • embed.js dosyası Origin göndermeyen <script src> etiketiyle yüklendiği için bu denetimden geçmeden sunulur.

Hata yanıtları

Widget hataları standart API zarfında değildir. Durum kodu ve kısa bir message ya da error metni döner.

İstek sınırları

Sınırlar, embed token ve IP adresi çiftine göre dakikada uygulanır.

Ziyaretçi kimliği ve gizlilik

  • Ziyaretçiyi yalnızca şifreli session_token tanır. Ham ziyaretçi kimliği kabul edilmez.
  • Token geçersizse yeni bir ziyaretçi kimliği verilir. Ziyaretçi, site verilerini temizlediğinde, 30 gün geçtiğinde veya embed_token yenilendiğinde sohbet geçmişini görmez.
  • Pasif kanal yeni web sitesi mesajı kabul etmez.
embed_token herkese açıktır; sayfa kaynağında görünür. Gizli tutulacak bir değer olarak saklamayın. Kötüye kullanım şüphesinde Token Yenile ile yeni token üretin.

Sorun giderme

  • Widget görünmüyor ve konsolda 403 var: alan adı yazımını, alt alan adını ve portu kontrol edin, kanalın Aktif olduğundan ve gömme kodunun güncel olduğundan emin olun.
  • Gönder düğmesi pasif: oturum açılamamıştır. session çağrısının hatasına bakın.
  • Yanıtlar canlı gelmiyor: config yanıtındaki broadcast_config boş olabilir. Bu durumda widget gerçek zamanlı bağlantı kurmaz; ayrıntı için Destek sayfasına bakın.