conversations
61 uç · /api/crm/v1/conversations
İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 60 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.
List participants
idcurl -X GET "https://{slug}.crm.blesyum.app/api/crm/public/v1/conversations/<id>/participants" \
-H "Authorization: Bearer blsk_..." \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Add participant
idcurl -X POST "https://{slug}.crm.blesyum.app/api/crm/public/v1/conversations/<id>/participants" \
-H "Authorization: Bearer blsk_..." \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Remove participant
idcontactIdcurl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/public/v1/conversations/<id>/participants/<contactId>" \
-H "Authorization: Bearer blsk_..." \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Görüşmeye yanıt yaz
idtype alanı yanıtı KİMİN yazdığını söyler: admin (temsilci) ya da user (müşteri). admin seçildiğinde admin_id zorunludur.
message_type varsayılan commenttir; note müşteriye GÖRÜNMEYEN dahili nottur ve webhook'a conversation.replied olarak gitmez.
Gerekli kapsam: conversations.write (dahili not için de aynı kapsam)
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/public/v1/conversations/<id>/reply" \
-H "Authorization: Bearer blsk_..." \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"type": "admin",
"admin_id": "0193c4e2-1111-7c3d-9e5f-1a2b3c4d5e6f",
"body": "Merhaba, siparişiniz kargoya verildi.",
"message_type": "comment"
}'{
"data": {
"type": "conversation",
"id": "0193c4e2-2222-7c3d-9e5f-1a2b3c4d5e6f",
"state": "open"
},
"trace_id": "01JC…"
}Konuşma alanlarını güncelle (konu/müşteri/öncelik/grup) — bedesk update. PUT.
idcurl -X PUT "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/ai-attributes" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Konuşmanın AI künyesi: durum · devir sebebi · hangi yapılandırma cevapladı.
idcurl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/ai-state" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /conversations/{id}/commerce — konuşmanın **ticari künyesi** (COMMERCE-01).
idTemsilcinin gördüğü sipariş/kargo/iade ve cari bakiye kartının kaynağı.
Karar crate::commercetedir (TEK KAPI); bu handler yalnız izin kapısını
uygular ve sonucu taşır.
🔴 İzin crm.conversations.viewtir ve **sahip muafiyeti YOKTUR**
(require_owner_or_perm değil). Konuşmanın "sahibi" MÜŞTERİDİR: kendi
siparişini görmesi meşru ama kendi CARİ BAKİYESİNİ destek kanalından
okuması ayrı bir karardır ve o kapı ERP'nin kendi müşteri portalıdır.
Burada dar olmak, sonradan gevşetilebilir; ters yönü geri almak veri
sızıntısını geri almaz.
🔴 Lisanssız modül için **4xx DÖNÜLMEZ**: yanıt licensed: false taşır ve
ekran "aboneliğin yok" diyebilir. 4xx panelin genel hata kapısını tetikler
ve kullanıcı sebebi hiç göremezdi (BRIDGE-01 dersi).
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/commerce" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Mesaj/not düzenle (bedesk messages PUT). Konuşmaya göre kapsanır.
iditemIdcurl -X PUT "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/items/<itemId>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Mesaj/not soft-delete (bedesk messages DELETE).
iditemIdcurl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/items/<itemId>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}CF15 Paket 9 — temsilci bot cevabını değerlendirir. Müşteri oyundan AYRI satır
iditemId(author_kind): ikisi aynı cevaba farklı görüş bildirebilir ve CSAT'ta müşterinin
oyu esastır.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/items/<itemId>/ai-feedback" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}CF15 Paket 9 — bot cevabının dayandığı kaynaklar (inbox kaynak paneli).
iditemIdcurl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/items/<itemId>/ai-sources" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}**CHAN-03 — "Düzenle"ye tıklayınca ne olacak?"** Panel uyarı penceresini bu uçtan boyar:
iditemIddüzenlenebilir mi, değilse NEDEN, edilebiliyorsa hangi sınırlarla (karakter tavanı, varsa süre penceresi ve kapanış anı). 🔴 Panel kanal listesi TUTMAZ. 2026-09-15'e kadar "Düzenle" desteklemeyen kanalda sessizce GİZLENİYORDU; kullanıcı kararı değişti: düğme çizilir, tıklayınca sebep söylenir. Yazma kapısı aynı kararı yeniden verir — bu uç bir kolaylık, kapı değil.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/items/<itemId>/edit-policy" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}E-posta-kaynaklı mesajın orijinal e-postası (bedesk messages/{id}/email).
iditemIdcurl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/items/<itemId>/email" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}JOIN-01 — "Sohbete katıl". Sahipsiz sohbette katılan sahip olur (bot'taysa devralır).
idYanıt, güncel katılımcı listesidir: panel üst şeridi ağ turu beklemeden çizer.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/join" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}JOIN-01 — "Sohbetten ayrıl". Ayrılan sahipse sahiplik kalan en eski katılımcıya geçer.
idcurl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/leave" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Makroyu bir konuşmaya uygula.
idmacroId🔴 Aksiyonların izinleri TEK TEK sorulur (macros::ensure_allowed). Aksi hâlde
makro, RBAC'ın etrafından dolaşan bir arka kapı olurdu: yalnız yanıt yazabilen
bir ajan, makro içine gizlenmiş "konuşmayı devret"i çalıştırabilirdi.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/macros/<macroId>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/crm/v1/internal/whatsapp/send — tek alıcıya onaylı şablon.
id🔴 Yanıt **başarısızlıkta da 200**'dür (imza/kiracı/gövde hataları hariç). Tüketici bir
KUYRUK işletiyor ve her satır için deftere bir cümle yazıyor: "sağlayıcı yok" ile "ağ
koptu" arasındaki farkı bir HTTP durum koduna sıkıştırmak, o cümlenin kaybolması demekti.
Gerekçe [wa::GonderimSonucu::saglayici_yok]da yazılı.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/messages" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /conversations/{id}/messenger-call — "Messenger ile ara" düğmesinin künyesi (CALL-07):
idsayfada aramalar açık mı, müşterinin izni var mı (Meta'dan CANLI), yeni izin istenebilir mi.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/messenger-call" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /conversations/{id}/messenger-call/permission — müşteriye arama izni isteği (CALL-07).
idcurl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/messenger-call/permission" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /conversations/{id}/read — konuşmayı okundu yap (INBOX-07).
idYanıt, sol menünün rozetini AYNI turda tazeler: ayrı bir sayaç isteği, rozetin listeden bir tur geride kalması demekti.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/read" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/reply-as-agent" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/reply-as-customer" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /conversations/{id}/reply-channels — kişiye ulaşılabilen kanallar + durumları
id(CHAN-09). Karar channels::outbound::reply_optionstedir; bu handler yalnız kapı.
İzin yanıt yazma iznidir (wa-templates ile aynı gerekçe): seçiciyi görecek olan,
yanıtı yazacak olandır.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/reply-channels" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET conversations/{id}/summary — saklanan özet (yoksa summary:null).
idcurl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/summary" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}DELETE conversations/{id}/summary — özeti sil (yeniden üretilebilir).
idcurl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/summary" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/summary/generate" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /conversations/{id}/wa-templates — bu konuşmada gönderilebilecek şablonlar + pencere.
id**Neden ayrı bir uç:** Ayarlar'daki liste crm.channel_templates.view ister ve ajan çoğu
kiracıda o izne sahip DEĞİLDİR. Şablonu seçecek olan ajandır; karar konuşma iznine bağlanır
— yanıt yazabilen, gönderebileceği şablonu görebilmelidir.
window_open da burada döner: pencere kapalıyken composer'ın "yaz ve gönder" demeye devam
etmesi, ajanın yazıp gönderip **422** almasıdır — kullanıcı bunu ürün arızası sanar.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/wa-templates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /conversations/{id}/whatsapp-call — "WhatsApp ile ara" düğmesinin künyesi:
idnumarada aramalar açık mı, müşterinin izni var mı, yeni izin istenebilir mi (CALL-05).
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/whatsapp-call" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /conversations/{id}/whatsapp-call/permission — müşteriye arama izni isteği (CALL-05).
idcurl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/<id>/whatsapp-call/permission" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /conversations/channels — konuşma kaynağı kataloğu.
Dönen her satır: key (süzgeç değeri) · label (İngilizce, panel <Trans>'tan
geçirir) · messaging (omnichannel kanal mı) · connected (kiracıda aktif
hesabı var mı). Bağlı OLMAYAN kanal listeden ÇIKARILMAZ — gizlenen şey var
olmayan şeyle aynı görünür; panel yalnız bağlı olanları öne alır.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/channels" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Konuşmaları toplu sil (bedesk ConversationController::destroy çoklu). RLS yalnız
tenant satırlarını siler; izin = update (ayrı delete-izni yok, status/atama ile aynı kapı).
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/delete" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Konuşmaları gruba transfer et (bedesk group/change). Opsiyonel private note.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/group" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /conversations/new-as-agent — temsilci müşteriyle yeni görüşme açar.
Yanıt: {data, delivery, delivery_error, delivery_channel, channel_account_id, reused}.
delivery = sent (kanal sağlayıcısı kabul etti) · queued (yanıt e-postası kuyrukta)
· failed (denendi, reddedildi — sebep delivery_errorda ve konuşmada
channel_delivery_failed olayı olarak) · none (müşteriye giden yol yok). Teslim
edilemese de görüşme AÇILIR. reused: true → kişinin VAR OLAN kanal konuşmasına
yazıldı (INBOX-07 · CHAN-09: kişinin kanal konuşması TEKTİR; konu ve ekip yok sayılır).
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/new-as-agent" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Toplu etiket KALDIR (bedesk conversations/tags/remove).
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/conversations/tags/remove" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}