curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/livechat/install-instructions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}2 uç · /api/crm/v1/livechat
İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 2 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/livechat/install-instructions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}── NEDEN VAR (2026-08-19) ───────────────────────────────────────────────────
Panelin Canlı Sohbet → Güvenlik ekranında "Gizli anahtarı kopyala" düğmesi
vardı ve **boş dize kopyalıyordu**: değeri data.server.widget_hmac_secretten
okuyordu, oysa anahtar lc.widget_hmac_secrette yaşar ve admin_server() o
alanı ASLA üretmez. Üstelik anahtarı YARATAN bir kod da yoktu; yani
"Kimlik doğrulamasını zorunlu kıl" şalterini açan kiracıda HMAC doğrulaması
hiçbir zaman başarılı olamıyordu (verify_widget_hmac("")) — dış veri
sessizce yok sayılıyordu ve bunun nedenini söyleyen hiçbir ekran yoktu.
⚠ Anahtar SECRET_KEYS'tedir: depoya settings::save ile yazılır (at-rest
mühürlenir) ve settings::get_secret ile çözülerek okunur. settings::load
ile ham okumak MÜHÜRLÜ metni verir — doğrulama tarafı da bu yüzden
get_secrete taşındı (widget_auth::load_widget_secret).
⚠ Yetki crm.settings.update: salt-okur ayar yetkisi olan kullanıcı sırları
zaten settings_payloadta redakte görür; buradan açık okuyabilseydi o
redaksiyonun bir anlamı kalmazdı.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/livechat/widget-secret" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}