Talep Duyuruları

1.7k görüntülenme Markdown

Destek alanında gösterilen duyuruları yayınlayan ve yöneten beş uç.

Genel Bakış

Duyurular tek bir talebe değil, destek alanının geneline asılan bantlardır. Planlı bakım, geçici kesinti ya da yeni bir hizmet haberi gibi şeyler için kullanılır ve müşteri destek sayfasına girdiğinde görür.

Kime görüneceği dört hedef alanıyla daraltılır: ülke, dil, ürün grubu ve sunucu. Hiçbiri verilmezse duyuru herkese açıktır; biri verildiğinde yalnız ona uyan müşteriler görür.

Ne zaman görüneceği ise iki tarih ile bir anahtardan çıkar. Tarihler aralığı belirler, anahtar duyuruyu tümden açıp kapatır; ikisi birlikte çalışır.

Referans

Duyuruları Listeleme

get/api/v1/admin/tickets/announcements
Tickets/GetTicketAnnouncements admin

Destek alanında gösterilen duyuruları döndürür.

Dönen alanlar data[] — 13
idintDuyurunun numarası.
titlestringDuyurunun başlığı.
messagestringDuyurunun metni.
typestringBandın tonu: info, warning, danger, success.
countrystring | nullHedeflenen ülke. Boşsa her ülkeye gösterilir.
langstring | nullHedeflenen dil. Boşsa her dile gösterilir.
product_groupintHedeflenen ürün grubu. Sıfır, tüm gruplar demektir.
server_idintHedeflenen sunucu. Sıfır, tüm sunucular demektir.
start_datestring | nullGörünmeye başlayacağı an.
end_datestring | nullGörünmeyi bırakacağı an.
is_popupboolBant yerine pencere olarak açılıp açılmayacağı.
statusboolDuyurunun etkin olup olmadığı.
created_atstring | nullOluşturulma anı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/tickets/announcements' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/tickets/announcements', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/announcements');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Liste SUZULMEZ: gecmis, gelecek ve kapali duyurular da doner.
$all  = Api::Tickets()->GetTicketAnnouncements()['data'];
$live = array_filter($all, fn ($a) => $a['status']);

Duyuru Oluşturma

post/api/v1/admin/tickets/announcements
Tickets/CreateTicketAnnouncement admin hemen yayına girer

Müşterilere gösterilecek yeni bir duyuru yayınlar.

Gövde 11
titlestringreqDuyurunun başlığı.
messagestringreqDuyurunun metni.
typestringBandın tonu: info, warning, danger, success. Öntanımlı olarak bilgi tonu.
countrystringYalnız bu ülkeye gösterir.
langstringYalnız bu dile gösterir.
product_groupintYalnız bu ürün grubuna gösterir.
server_idintYalnız bu sunucudaki müşterilere gösterir.
start_datestringGörünmeye başlayacağı an.
end_datestringGörünmeyi bırakacağı an.
is_popupboolPencere olarak açar.
statusboolDuyuruyu yayına alır. Öntanımlı olarak açık.
Dönen alanlar 201 — data
dataobjectOluşan duyuru. Listedeki öğeyle aynı şekildedir.
Hatalar 3
title_required422Başlık boş.
message_required422Mesaj boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/tickets/announcements' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"title":"Planli bakim","message":"02:00-03:00 arasi kesinti olacak.","type":"warning"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/tickets/announcements', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: 'Scheduled maintenance',
    message: 'We will be down between 02:00 and 03:00.',
    type: 'warning',
    is_popup: true,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/announcements');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'title'    => 'Scheduled maintenance',
        'message'  => 'We will be down between 02:00 and 03:00.',
        'type'     => 'warning',
        'is_popup' => true,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Durum verilmezse duyuru ACIK dogar ve hemen gorunur; once tarih verin.
Api::Tickets()->CreateTicketAnnouncement([
    'title'      => 'Scheduled maintenance',
    'message'    => $text,
    'start_date' => '2026-02-01 02:00:00',
    'end_date'   => '2026-02-01 03:00:00',
]);

Duyuru Detayı

get/api/v1/admin/tickets/announcements/{aid}
Tickets/GetTicketAnnouncement admin

Tek bir duyuruyu döndürür.

Dönen alanlar data — 13
idintDuyurunun numarası.
titlestringDuyurunun başlığı.
messagestringDuyurunun metni.
typestringBandın tonu: info, warning, danger, success.
countrystring | nullHedeflenen ülke. Boşsa her ülkeye gösterilir.
langstring | nullHedeflenen dil. Boşsa her dile gösterilir.
product_groupintHedeflenen ürün grubu. Sıfır, tüm gruplar demektir.
server_idintHedeflenen sunucu. Sıfır, tüm sunucular demektir.
start_datestring | nullGörünmeye başlayacağı an.
end_datestring | nullGörünmeyi bırakacağı an.
is_popupboolBant yerine pencere olarak açılıp açılmayacağı.
statusboolDuyurunun etkin olup olmadığı.
created_atstring | nullOluşturulma anı.
Hatalar 2
not_found404Duyuru bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/tickets/announcements/4' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/announcements/${aid}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/announcements/' . $aid);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bir duyurunun SU AN gorunup gorunmedigi durum ve tarih alanlarindan birlikte cikar.
$a = Api::Tickets()->GetTicketAnnouncement(['aid' => $aid])['data'];

Duyuruyu Güncelleme

patch/api/v1/admin/tickets/announcements/{aid}
Tickets/UpdateTicketAnnouncement admin

Duyurunun gönderdiğiniz alanlarını değiştirir.

Gövde 11
titlestringreqDuyurunun başlığı.
messagestringreqDuyurunun metni.
typestringBandın tonu: info, warning, danger, success. Öntanımlı olarak bilgi tonu.
countrystringYalnız bu ülkeye gösterir.
langstringYalnız bu dile gösterir.
product_groupintYalnız bu ürün grubuna gösterir.
server_idintYalnız bu sunucudaki müşterilere gösterir.
start_datestringGörünmeye başlayacağı an.
end_datestringGörünmeyi bırakacağı an.
is_popupboolPencere olarak açar.
statusboolDuyuruyu yayına alır. Öntanımlı olarak açık.
Dönen alanlar data — 13
dataobjectGüncel duyuru. Listedeki öğeyle aynı şekildedir.
Hatalar 4
title_required422Başlık boşaltıldı.
message_required422Mesaj boşaltıldı.
not_found404Duyuru bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/tickets/announcements/4' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":false}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/announcements/${aid}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: false }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/announcements/' . $aid);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['status' => false]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Gondermediginiz alan KORUNUR; duyuruyu kaldirmadan susturmak icin durumu kapatin.
Api::Tickets()->UpdateTicketAnnouncement(['aid' => $aid, 'status' => false]);

Duyuruyu Silme

delete/api/v1/admin/tickets/announcements/{aid}
Tickets/DeleteTicketAnnouncement admin

Duyuruyu kaldırır.

Dönen alanlar data — 2
deletedboolSilme çalıştı mı.
idintSilinen duyurunun numarası.
Hatalar 2
not_found404Duyuru bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tickets/announcements/4' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/announcements/${aid}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tickets/announcements/' . $aid);
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);
// Gecmis bir duyuruyu silmek yerine BITIS TARIHI verin: kayit kalir, gosterim durur.
Api::Tickets()->DeleteTicketAnnouncement(['aid' => $aid]);

Tuzaklar

Yeni duyuru hemen yayına girer

Durum alanını göndermezseniz duyuru açık oluşur. Tarih de vermediyseniz müşteriler onu o an görmeye başlar. Taslak diye bir kavram yoktur; hazırlarken ya durumu kapalı gönderin ya da başlangıç tarihini ileri bir güne koyun.

Liste süzülmemiş gelir

Listeleme ucu her duyuruyu döndürür: süresi geçmişleri, henüz başlamamışları ve kapatılmışları da. Müşterinin göreceği kümeyi değil, operatörün yönettiği kümeyi verir. Bir panoda "şu an yayında" saymak istiyorsanız durumu ve iki tarihi kendiniz değerlendirin.

Hedef alanları daraltır, genişletmez

Ülke, dil, ürün grubu ve sunucu alanlarının her biri kitleyi küçültür. Birden çoğunu doldurmak "şunlardan biri" değil "hepsi birden" anlamına gelir; bir müşteri dördüne de uymuyorsa duyuruyu görmez. Kimsenin görmediği bir duyuruda önce bu alanlara bakın.

Pencere seçeneği rahatsız edicidir

Pencere olarak açılan bir duyuru müşterinin işini keser ve kapatılana kadar önünde durur. Gerçekten acil olmayan bir haber için bant tonu yeterlidir. Pencereyi açık bırakılmış eski bir duyuru, aylar sonra ilgisiz bir müşteriye çıkar; bitiş tarihi koymak bunu engeller.

Silmek yerine tarihlendirin

Geçmiş bir duyuruyu silmek onu büsbütün ortadan kaldırır; ne zaman ne söylediğinizin kaydı kalmaz. Bitiş tarihi vermek ya da durumu kapatmak gösterimi durdurur ve kaydı yerinde bırakır. Aynı bakım penceresi gelecek ay tekrarlanacaksa metni yeniden yazmak yerine tarihleri güncellemeniz yeter.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.