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 birembed_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.
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.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. ÖrneklerdeOrigin 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.
{ "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çiyepresence-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.
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.comkayıtlıykenshop.example.comçalışmaz. Originbaşlığı olmayan istekler reddedilir.embed.jsdosyasıOrigingö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 birmessage 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_tokentanı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_tokenyenilendiğinde sohbet geçmişini görmez. - Pasif kanal yeni web sitesi mesajı kabul etmez.
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:
configyanıtındakibroadcast_configboş olabilir. Bu durumda widget gerçek zamanlı bağlantı kurmaz; ayrıntı için Destek sayfasına bakın.