# Müşteri Notları

https://dev.wisecp.com/tr/musteri-dahili-notlari

Müşteri kaydına iliştirilen dahili notları okuyan, ekleyen, güncelleyen ve silen dört uç.

## Genel Bakış

Notlar müşteri kaydına iliştirilen **dahili** yazılardır. Müşteri onları hiçbir ekranda görmez; yalnız panelde çalışan yöneticiler okur.

Bir not sabitlenebilir. Sabitlenmiş notlar listenin başında durur, gerisi yeniden eskiye sıralanır.

## Referans

### Notları Listeleme

get/api/v1/admin/clients/{id}/notes

`Clients/GetClientNotes` admin

Müşterinin notlarını döndürür. Sıra sabittir: önce sabitlenmiş notlar, sonra en yeniden eskiye.

Dönen alanlar data[] — 9

idstringNot kimliği. Sayı değil, karakter dizisi.

contentstringNot metni.

pinnedboolSabitlenmiş mi.

added_byintNotu ekleyen yöneticinin kimliği.

added_by_namestringEkleyenin görünen adı; 3.x'ten düz metin olarak gelen notta boştur (added_by 0).

created_atstringOluşturma zamanı.

pinned_byint|nullNotu sabitleyen yöneticinin id'si. Not sabit değilse ya da bu alandan önce sabitlendiyse `null`.

pinned_by_namestring|nullNotu sabitleyenin adı — sabit not bandı yazarı değil bunu gösterir.

pinned_atstring|nullSabitlendiği zaman. Sabit kalan not düzenlenince damga korunur; sabitleme kaldırılınca üçü de silinir.

Hatalar 2

not_found404Müşteri ya da not bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

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

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/notes');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
$response = Api::Clients()->GetClientNotes(['id' => 42]);

foreach ($response['data'] as $note) {
    if ($note['pinned']) {
        $highlight[] = $note['content'];
    }
}
```

### Not Ekleme

post/api/v1/admin/clients/{id}/notes

`Clients/CreateClientNote` admin

Müşteriye not ekler. Notu ekleyen olarak isteği yapan anahtarın sahibi kaydedilir.

Gövde 2

contentstringzorunluNot metni.

pinnedboolNotu listenin başına sabitler. Varsayılan `false`.

Dönen alanlar data

dataobjectOluşturulan not, `201` ile döner. Liste şemasıyla aynıdır.

Hatalar 4

not_found404Müşteri bulunamadı.

content_required422İçerik boş.

note_add_failed500Not oluşturulamadı.

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/clients/42/notes' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"content":"Odeme gecmisi temiz, oncelikli musteri","pinned":true}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/notes', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"content":"Odeme gecmisi temiz, oncelikli musteri","pinned":true}),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/notes');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'content' => 'Odeme gecmisi temiz, oncelikli musteri',
        'pinned'  => true,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
$response = Api::Clients()->CreateClientNote([
    'id'      => 42,
    'content' => 'Odeme gecmisi temiz, oncelikli musteri',
    'pinned'  => true,
]);
```

### Not Güncelleme

patch/api/v1/admin/clients/{id}/notes/{note_id}

`Clients/UpdateClientNote` admin sabitleme de burada

Notun metnini ya da sabitleme durumunu değiştirir. En az bir alan göndermeniz gerekir.

Gövde en az biri

contentstringYeni metin. Gönderilirse boş olamaz.

pinnedboolSabitler ya da sabitlemeyi kaldırır.

Dönen alanlar data

dataobjectGüncellemeden sonraki not. Liste şemasıyla aynıdır.

Hatalar 4

not_found404Müşteri ya da not bulunamadı.

content_required422İçerik boş gönderildi.

note_update_failed500Not güncellenemedi.

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/clients/42/notes/a1b2c3' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"pinned":false}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/notes/a1b2c3', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ pinned: false }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/notes/a1b2c3');
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);
```

```php
// Sabitlemeyi kaldırmak da bu uçtandır; ayrı bir aksiyon yok.
$response = Api::Clients()->UpdateClientNote([
    'id'      => 42,
    'note_id' => 'a1b2c3',
    'pinned'  => false,
]);
```

### Not Silme

delete/api/v1/admin/clients/{id}/notes/{note_id}

`Clients/DeleteClientNote` admin

Notu siler.

Dönen alanlar data

deletedboolSilme başarılı mı.

idstringSilinen notun kimliği.

Hatalar 3

not_found404Müşteri ya da not bulunamadı.

note_delete_failed500Not silinemedi.

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/clients/42/notes/a1b2c3' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/notes/a1b2c3', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/notes/a1b2c3');
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
$response = Api::Clients()->DeleteClientNote([
    'id'      => 42,
    'note_id' => 'a1b2c3',
]);
```

## Tuzaklar

> **Not kimliği sayı değildir**
> 
> Diğer kaynakların aksine `id` burada karakter dizisi (`a1b2c3`). Sayıya çevirmeye çalışan kod kaydı bulamaz.

> **Ayrı bir sabitleme ucu yoktur**
> 
> Panelde sabitleme ayrı bir işlem gibi görünür, API'de ise `pinned` yalnızca bir alan; güncelleme ucundan geçer.

## İlgili Makaleler

- [Müşteri Uçları](https://dev.wisecp.com/tr/musteri-uclari)
- [İstek ve Yanıt Biçimi](https://dev.wisecp.com/tr/istek-ve-yanit-bicimi)
