# Talep Duyuruları

https://dev.wisecp.com/tr/talep-duyurulari

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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/tickets/announcements' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/tickets/announcements', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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"}'
```

```javascript
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();
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/tickets/announcements/4' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/tickets/announcements/${aid}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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}'
```

```javascript
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();
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tickets/announcements/4' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
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();
```

```php
$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);
```

```php
// 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.

## İlgili Makaleler

- [Talep Ayarları](https://dev.wisecp.com/tr/talep-ayarlari)
- [Talep Yönetimi](https://dev.wisecp.com/tr/talep-yonetimi)
- [Talep Referans Listeleri](https://dev.wisecp.com/tr/talep-referans-listeleri)
