Dahili Notlar ve Gizli Bilgiler
Personel-arası notları ve talepte saklanan gizli bilgileri yöneten dokuz uç.
Genel Bakış
Bu dokuz uç talebin müşterinin hiç görmediği tarafıyla ilgilenir. Altısı personel-arası notları ve dosyalarını yönetir. Üçü ise etiketli gizli bilgileri tutar; sunucu erişimi gibi konuşma sırasında paylaşılan şeyler oraya konur.
İkisi de talebin kendi satırında, şifrelenmiş olarak yaşar. Ayrı tabloları yoktur, bu yüzden sayfalama ya da süzme de yoktur: liste her seferinde eksiksiz gelir.
Not eklemek bildirim üretmez ve talebin durumunu değiştirmez. Müşteriye görünmeyen ama konuşmanın parçası olan bir metin istiyorsanız aradığınız şey not değil, gizli işaretli bir yanıttır.
Referans
Notları Listeleme
Talebe personelin bıraktığı notları döndürür.
curl 'https://panel.ornek.com/api/v1/admin/tickets/402/notes' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/notes`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/notes');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Sayfalama YOKTUR: notlarin tamami tek seferde gelir ve talebin satirindan cozulur.
$notes = Api::Tickets()->GetTicketNotes(['id' => $id])['data'];Not Ekleme
Talebe personel-arası bir not düşer.
curl -X POST 'https://panel.ornek.com/api/v1/admin/tickets/402/notes' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"message":"Muhasebeye devredildi.","pinned":true}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/notes`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'Escalated to the billing team.',
pinned: true,
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/notes');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'message' => 'Escalated to the billing team.',
'pinned' => true,
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Not MUSTERIYE GITMEZ ve bildirim uretmez; yalniz personel gorur.
$note = Api::Tickets()->AddTicketNote([
'id' => $id,
'message' => 'Escalated to the billing team.',
])['data'];Notu Güncelleme
Notun metnini ya da sabitlenme durumunu değiştirir.
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/tickets/402/notes/1d9e35094420c723' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"pinned":false}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/notes/${noteId}`, {
method: 'PATCH',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ pinned: false }),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/notes/' . $noteId);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['pinned' => false]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Bos govde NO-OP degil HATADIR; en az bir alan gonderin.
Api::Tickets()->UpdateTicketNote([
'id' => $id, 'note_id' => $noteId, 'pinned' => false,
]);Notu Silme
Notu ve dosyalarını kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tickets/402/notes/1d9e35094420c723' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/notes/${noteId}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/notes/' . $noteId);
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);// Notun ekleri de gider; JSON'dan cikarilir ve dosyalar diskten silinir.
Api::Tickets()->DeleteTicketNote(['id' => $id, 'note_id' => $noteId]);Not Ekini İndirme
Bir nota iliştirilmiş dosyayı içeriğiyle döndürür.
curl 'https://panel.ornek.com/api/v1/admin/tickets/402/notes/1d9e35094420c723/attachments/71c918b7ff525444' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(
`https://panel.ornek.com/api/v1/admin/tickets/${id}/notes/${noteId}/attachments/${attId}`,
{ headers: { Authorization: `Bearer ${apiKey}` } },
);
const { data } = await res.json();$url = 'https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/notes/' . $noteId . '/attachments/' . $attId;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Not ekleri talebin satirinda yasar; yanit ekleriyle AYNI uctan istenmezler.
$att = Api::Tickets()->GetTicketNoteAttachment([
'id' => $id, 'note_id' => $noteId, 'att_id' => $attId,
])['data'];Not Ekini Silme
Bir not ekini kaydından ve diskten kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tickets/402/notes/1d9e35094420c723/attachments/71c918b7ff525444' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(
`https://panel.ornek.com/api/v1/admin/tickets/${id}/notes/${noteId}/attachments/${attId}`,
{ method: 'DELETE', headers: { Authorization: `Bearer ${apiKey}` } },
);
const body = await res.json();$url = 'https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/notes/' . $noteId . '/attachments/' . $attId;
$ch = curl_init($url);
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);// Ek kaldirilir ama notun kendisi kalir; notu silmek ise eklerini de goturur.
Api::Tickets()->DeleteTicketNoteAttachment([
'id' => $id, 'note_id' => $noteId, 'att_id' => $attId,
]);Gizli Bilgileri Listeleme
Talebe eklenmiş etiketli gizli bilgileri döndürür.
curl 'https://panel.ornek.com/api/v1/admin/tickets/402/private-data' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/private-data`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/private-data');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Icerik ACIK doner: bu cagriyi loglayan bir istemci sunucu sifresini de loglar.
$items = Api::Tickets()->GetTicketPrivateData(['id' => $id])['data'];Gizli Bilgi Ekleme
Talebe etiketli bir gizli bilgi ekler.
curl -X POST 'https://panel.ornek.com/api/v1/admin/tickets/402/private-data' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"label":"Sunucu erisimi","content":"host: 203.0.113.10"}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/private-data`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
label: 'Server SSH',
content: 'host: 203.0.113.10\nuser: admin',
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/private-data');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'label' => 'Server SSH',
'content' => "host: 203.0.113.10\nuser: admin",
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Bir yanita baglamak icin numarasini verin; sifir talebin geneline birakir.
Api::Tickets()->AddTicketPrivateData([
'id' => $id,
'label' => 'Server SSH',
'content' => $credentials,
'reply_id' => $replyId,
]);Gizli Bilgiyi Silme
Talepten bir gizli bilgi kaydını kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tickets/402/private-data/pd_65a4f0c8a1b23' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/${id}/private-data/${itemId}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/' . $id . '/private-data/' . $itemId);
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);// Talep kapaninca erisim bilgisini SILMEK iyi bir aliskanliktir; kayit kalicidir.
Api::Tickets()->DeleteTicketPrivateData(['id' => $id, 'item_id' => $itemId]);Tuzaklar
Bu kayıtlar veritabanında şifreli durur, ama okuma ucu içeriği çözülmüş verir. Yani bu kapsamı taşıyan bir anahtar, orada duran sunucu parolalarını okuyabilir. İstek ve yanıtları günlüğe yazan bir istemci parolayı da günlüğe yazar; anahtarı dar tutun ve bu çağrının gövdesini kaydetmeyin.
Notlar ve gizli bilgiler ayrı satırlar değil, talebin satırındaki tek bir şifreli alandır. Her yazma bu bloğun tamamını yeniden kaydeder. İki istek aynı anda not eklerse ikincisi birincinin üzerine yazabilir; toplu iş yaparken aynı talebe paralel yazmayın.
Notlar ve ekleri dizeyle adreslenir; listedeki sırasıyla değil. Eski panel konumu kullanıyordu ve araya not eklemek ya da silmek o konumu kaydırıyordu. Kendi tarafınızda sıra numarası saklarsanız bir gün başka bir notu güncellersiniz; dönen kimliği saklayın.
Not güncellemesinde hiçbir alan göndermezseniz çağrı reddedilir. Talep güncellemesi böyle davranmaz: orada değişmeyen alan sessizce geçilir. Farklı bir kaynaktan gelen veriyi olduğu gibi aktaran bir eşitleme betiği, değişiklik yokken burada hata alır. Göndermeden önce elinizde gerçekten bir alan olduğunu sınayın.
Talepleri birleştirmek yanıtları ve eklerini ana talebe taşır, sonra diğer talep satırlarını siler. Notlar ve gizli bilgiler o satırlarda yaşadığı için birlikte gider. Aynısı talebi silmek için de geçerlidir. Bir sunucu parolasının tek kopyası orada duruyorsa birleştirmeden önce okuyup ana talebe yeniden yazın.
İ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.