Talep Yanıtları
Talep konuşmasını okuyan, yazan ve yanıtların saklanma biçimini belirleyen sekiz uç.
Genel Bakış
Talebin konuşması bu sekiz uçta yaşar. Dördü yanıtın kendisiyle ilgilenir, ikisi bir yanıtın saklanma ve görünme biçimini değiştirir, ikisi de eklerle uğraşır.
Yanıtlar sayfa numarasıyla değil imleçle gezilir. En yeni yanıt önce gelir; daha eskisini istemek için elinizdeki en eski numarayı, yeni gelen var mı diye yoklamak için en yeni numarayı verirsiniz.
İki ayrı gizlilik kavramı vardır ve karıştırılmamalıdır. Şifreleme metnin veritabanında nasıl durduğuyla ilgilidir; personel onu yine okur. Gizlilik ise müşterinin görüp görmeyeceğini belirler.
Referans
Yanıtları Listeleme
Talebin konuşmasını en yeniden eskiye doğru döndürür.
curl 'https://panel.ornek.com/api/v1/admin/tickets/402/messages?limit=10' \
-H "Authorization: Bearer $API_KEY"const url = new URL(`https://panel.ornek.com/api/v1/admin/tickets/${id}/messages`);
url.searchParams.set('limit', '10');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data, meta } = await res.json();
// Bir sonraki sayfa: url.searchParams.set('before_reply_id', meta.oldest_reply_id)$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/messages?' . http_build_query(['limit' => 10]));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// SAYFA NUMARASI YOKTUR: bir sonraki sayfa, elinizdeki en eski yanit numarasiyla istenir.
$page = Api::Tickets()->GetTicketMessages(['id' => $id], ['limit' => 10]);
$next = Api::Tickets()->GetTicketMessages(['id' => $id], [
'before_reply_id' => $page['meta']['oldest_reply_id'],
]);Yanıt Yazma
Talebe yanıt ekler; keep_status açık değilse durumunu yanıtlandı yapar, notify_client kapalı değilse müşteriye bildirim gönderir.
details.assigned_id talebi tutan personeli verir; kimse üstlenmemişse 0 gelir. API anahtarı olmadan yapılan çağrılar bu kapıya takılmaz.curl -X POST 'https://panel.ornek.com/api/v1/admin/tickets/402/messages' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"message":"Sorununuz cozuldu.","signature":"Destek Ekibi"}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/messages`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'Your issue is resolved. Please confirm.',
signature: 'Support Team',
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/messages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'message' => 'Your issue is resolved. Please confirm.',
'signature' => 'Support Team',
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Not birakmak istiyorsaniz GIZLI ekleyin: aksi halde musteriye posta gider.
Api::Tickets()->AddTicketMessage([
'id' => $id,
'message' => 'Checked the server logs, nothing unusual.',
'hidden' => true,
]);Yanıtı Düzenleme
Var olan bir yanıtın metnini değiştirir.
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/tickets/402/messages/846' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"message":"Duzeltilmis yanit metni."}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/messages/${replyId}`, {
method: 'PATCH',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ message: 'Updated reply text.' }),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/messages/' . $replyId);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['message' => 'Updated reply text.']),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Duzenleme musteriye HABER VERMEZ: gonderilmis postadaki eski metin oylece kalir.
Api::Tickets()->UpdateTicketMessage([
'id' => $id,
'reply_id' => $replyId,
'message' => 'Updated reply text.',
]);Yanıtı Silme
Bir yanıtı ve eklerini kaldırır; talebin son mesajıysa talebi de siler.
block_user değerini geri verir.curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tickets/402/messages/846' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/messages/${replyId}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/messages/' . $replyId);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Yanitin ekleri de gider; talebin son yanit ozeti bir sonraki okumada degisir.
Api::Tickets()->DeleteTicketMessage(['id' => $id, 'reply_id' => $replyId]);Şifrelemeyi Değiştirme
Bir yanıtın şifreli saklanıp saklanmayacağını belirler.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/tickets/402/messages/846/encryption' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"encrypted":true}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/messages/${replyId}/encryption`, {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ encrypted: true }),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/messages/' . $replyId . '/encryption');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['encrypted' => true]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Sifreleme yalniz SAKLAMAYI degistirir: personel metni her iki durumda da okur.
$r = Api::Tickets()->SetTicketMessageEncryption([
'id' => $id, 'reply_id' => $replyId, 'encrypted' => true,
])['data'];Görünürlüğü Değiştirme
Bir personel yanıtını müşteriden gizler ya da tekrar gösterir.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/tickets/402/messages/848/visibility' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"hidden":true}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/messages/${replyId}/visibility`, {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ hidden: true }),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/messages/' . $replyId . '/visibility');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['hidden' => true]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Gizlemek gecmise donuk calisir ama GONDERILMIS postayi geri getirmez.
Api::Tickets()->SetTicketMessageVisibility([
'id' => $id, 'reply_id' => $replyId, 'hidden' => true,
]);Eki İndirme
Bir yanıt ekinin bilgilerini ve içeriğini döndürür.
curl 'https://panel.ornek.com/api/v1/admin/tickets/402/attachments/202' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/attachments/${attId}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();
const bytes = Uint8Array.from(atob(data.content_base64), (c) => c.charCodeAt(0));$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/attachments/' . $attId);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Icerik metne cevrildigi icin govde dosyadan yaklasik UCTE BIR daha buyuk gelir.
$att = Api::Tickets()->GetTicketAttachment(['id' => $id, 'att_id' => $attId])['data'];
file_put_contents($path, base64_decode($att['content_base64']));Eki Silme
Bir yanıt ekini kaydından ve diskten kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tickets/402/attachments/202' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/attachments/${attId}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/attachments/' . $attId);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Bu uc YANIT eklerini kaldirir; not ekleri kendi uclarindan silinir.
Api::Tickets()->DeleteTicketAttachment(['id' => $id, 'att_id' => $attId]);Tuzaklar
Bu liste imleçle gezilir: bir sonraki sayfayı elinizdeki en eski yanıt numarasıyla istersiniz. Sayfa numarası göndermek hiçbir işe yaramaz ve aynı ilk sayfayı sonsuza kadar döndürür. Dönen meta bloğu size hem en eski hem en yeni numarayı verir; ikisini de saklayın.
Talep listesindeki son yanıt önizlemesi şifreli mesajlarda boş gelir; bu uç ise metni çözülmüş verir. İkisi çelişmiyor: liste birçok talebi tarayan bir ekrandır ve şifreli metni oraya koymaz. Şifrelemenin anlamı depolamadır, personelden gizlemek değil.
Personel-arası yanıtlar müşteriye görünmez, ama bu uç onları diğerleriyle birlikte döndürür. Konuşmayı olduğu gibi müşteriye gösteren bir entegrasyon dahili notları da sızdırır. Müşteriye dönük her ekranda gizli işaretli yanıtları kendiniz ayıklayın.
Öntanımlı olarak yanıt eklemek talebi yanıtlandı durumuna taşır ve müşteriye bildirim gönderir. Sonradan düzeltmek gönderilmiş bildirimi geri getirmez; gizlemek de öyle. Yalnız kayıt tutmak istiyorsanız yanıtı gizli ekleyin: o zaman durum değişmez ve kimseye bildirim çıkmaz. keep_status ile eklenen alındı notu da müşteriye bildirim gönderir; durdurmak için notify_client: false ekleyin.
Yanıt bir belge olduğu için dosya içeriği metne çevrilerek gelir ve gövde dosyadan yaklaşık üçte bir daha büyük olur. Yüz megabaytlık bir ek, yüz otuz megabaytlık bir yanıt demektir; belleğe tümünü alan bir istemci orada durur. Büyük ekleri akışa alarak işleyin ve gerekmedikçe indirmeyin.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.