Müşteri Yapılandırması

1.6k görüntülenme Markdown

Müşteri gruplarını, rozet eşiklerini ve güven puanı kademelerini okuyan ve kaydeden altı uç.

Genel Bakış

Bu altı uç kurulum genelindeki müşteri yapılandırmasını okur ve yazar: gruplar, rozet eşikleri ve güven puanı kademeleri. Hiçbiri tek bir müşteriye bakmaz.

Güven puanı dört eksenden hesaplanır: hizmet sayısı, gelir, hesap yaşı ve destek talebi. Her eksen bir kademe listesidir; müşteri hangi kademeye düşerse o kademenin puanını alır.

Referans

Grupları Listeleme

get/api/v1/admin/clients/groups
Clients/GetClientGroups admin

Kurulumdaki tüm müşteri gruplarını döndürür.

Dönen alanlar data[] — 11
idintMevcut grubun kimliği. Yeni grupta boş bırakın ya da 0 gönderin.
namestringzorunluGrup adı. Boşsa o grup sessizce atlanır.
descriptionstringAçıklama.
colorstringRozet rengi. Varsayılan #095174.
iconstringİkon adı.
discount_ratenumberGruba uygulanan indirim oranı.
discount_productsstringİndirimin geçerli olduğu ürün grupları. Virgülle ayrılmış kimlikler.
combine_discountboolİndirimi diğer indirimlerle birleştirir.
protectionboolAçıkken otomatik askıya alma ve iptal görevleri grup üyelerinin hizmetlerini atlar.
priorityintAçıkken (1) grup üyelerinin destek talepleri personel kuyruğunun en üstünde listelenir.
separate_invoicesboolGruptaki müşteriler için ayrı fatura keser.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/groups' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/groups', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/groups');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetClientGroups();

Grupları Kaydetme

put/api/v1/admin/clients/groups
Clients/SaveClientGroups admin listenin tamamı

Grup listesini olduğu gibi kaydeder. Gönderdiğiniz liste yeni gerçektir: içinde olmayan grup silinir.

Gövde 1
groupsobject[]zorunluGrupların tamamı.
idintMevcut grubun kimliği. Yeni grupta boş bırakın ya da 0 gönderin.
namestringzorunluGrup adı. Boşsa o grup sessizce atlanır.
descriptionstringAçıklama.
colorstringRozet rengi. Varsayılan #095174.
iconstringİkon adı.
discount_ratenumberGruba uygulanan indirim oranı.
discount_productsstringİndirimin geçerli olduğu ürün grupları. Virgülle ayrılmış kimlikler.
combine_discountboolİndirimi diğer indirimlerle birleştirir.
protectionboolAçıkken otomatik askıya alma ve iptal görevleri grup üyelerinin hizmetlerini atlar.
priorityintAçıkken (1) grup üyelerinin destek talepleri personel kuyruğunun en üstünde listelenir.
separate_invoicesboolGruptaki müşteriler için ayrı fatura keser.
Dönen alanlar data[] — 11
dataobject[]Güncel grup listesi. Listeleme ucuyla aynı şekildedir.
Hatalar 2
groups_invalid422groups bir dizi değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/clients/groups' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"groups":[{"id":5,"name":"VIP","discount_rate":10,"discount_products":"1,2","priority":1}]}'
// Once listeyi okuyun, uzerinde degisiklik yapin, tamamini geri gonderin.
const current = await (await fetch('https://panel.ornek.com/api/v1/admin/clients/groups', {
  headers: { Authorization: `Bearer ${apiKey}` },
})).json();

const groups = current.data.map((g) =>
  g.id === 5 ? { ...g, discount_rate: 15 } : g);

const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/groups', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ groups }),
});
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/groups');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'groups' => [
            [
                'id'            => 5,
                'name'          => 'VIP',
                'discount_rate' => 10,
                'priority'      => 1,
            ],
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Tek grubu degistirmek icin bile listenin TAMAMI gonderilir.
$groups = Api::Clients()->GetClientGroups()['data'];

foreach ($groups as &$group)
    if ((int) $group['id'] === 5) $group['discount_rate'] = 15;
unset($group);

$response = Api::Clients()->SaveClientGroups(['groups' => $groups]);

Rozet Eşiklerini Getirme

get/api/v1/admin/clients/badge-settings
Clients/GetBadgeSettings admin

Müşteri rozetlerinin kazanılma eşiklerini döndürür. Hiç kaydedilmemişse varsayılanlar gelir.

Dönen alanlar data — 5
loyal_yearsintSadık müşteri rozeti için gereken yıl.
rev_silverintGümüş rozeti için gelir eşiği.
rev_goldintAltın rozeti için gelir eşiği.
multi_service_minintÇoklu hizmet rozeti için en az hizmet sayısı.
experienced_maxintDeneyimli rozetinin üst sınırı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/badge-settings' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/badge-settings', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/badge-settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetBadgeSettings();

Rozet Eşiklerini Kaydetme

put/api/v1/admin/clients/badge-settings
Clients/SaveBadgeSettings admin değerler kırpılır

Beş eşiği birlikte kaydeder. Göndermediğiniz eşik varsayılanına döner; hepsini birlikte gönderin. Değerler güvenli aralığa çekilir, geçersiz olan reddedilmez.

Gövde 5
loyal_yearsintSadık müşteri yıl eşiği. En az 1.
rev_silverintGümüş gelir eşiği. En az 0.
rev_goldintAltın gelir eşiği. Gümüşten küçük ya da eşit gönderirseniz rev_silver + 1 yapılır.
multi_service_minintÇoklu hizmet rozeti minimumu. En az 1.
experienced_maxintDeneyimli rozeti üst sınırı. En az 0.
Dönen alanlar data — 5
dataobjectGüncel eşikler. Getirme ucuyla aynı şekildedir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/clients/badge-settings' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"loyal_years":5,"rev_silver":500,"rev_gold":1000,"multi_service_min":5,"experienced_max":15}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/badge-settings', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    loyal_years: 5,
    rev_silver: 500,
    rev_gold: 1000,
    multi_service_min: 5,
    experienced_max: 15,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/badge-settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'loyal_years'       => 5,
        'rev_silver'        => 500,
        'rev_gold'          => 1000,
        'multi_service_min' => 5,
        'experienced_max'   => 15,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->SaveBadgeSettings([
    'rev_silver' => 500,
    'rev_gold'   => 400,
]);

// Yanit kaydedilen degeri tasir: rev_gold burada 501 olarak doner.
$saved = $response['data']['rev_gold'];

Güven Puanı Kademelerini Getirme

get/api/v1/admin/clients/trust-score-settings
Clients/GetTrustScoreSettings admin

Güven puanının dört eksenindeki kademeleri döndürür. Kaydedilmemişse varsayılanlar gelir.

Dönen alanlar data — 4
servicesobject[]Hizmet sayısı ekseni.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
revenueobject[]Gelir ekseni.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
ageobject[]Hesap yaşı ekseni.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
ticketsobject[]Destek talebi ekseni.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/trust-score-settings' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/trust-score-settings', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/trust-score-settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetTrustScoreSettings();
Yanıt
{
  "data": {
    "services": [
      { "max": 5, "points": 20 },
      { "max": null, "points": 30 }
    ],
    "revenue": [{ "max": 1000, "points": 25 }],
    "age":     [{ "max": 12, "points": 10 }],
    "tickets": [{ "max": null, "points": 5 }]
  }
}

Güven Puanı Kademelerini Kaydetme

put/api/v1/admin/clients/trust-score-settings
Clients/SaveTrustScoreSettings admin dört eksen birlikte

Dört ekseni birlikte kaydeder. Göndermediğiniz eksen boş kalır ve o eksenin kademeleri silinir; korumak istediğiniz her ekseni gönderin. Puanlar 0-100 aralığına, negatif eşik 0'a çekilir; geçersiz değer reddedilmez.

Gövde 4
servicesobject[]Hizmet sayısı kademeleri.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
revenueobject[]Gelir kademeleri.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
ageobject[]Hesap yaşı kademeleri.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
ticketsobject[]Destek talebi kademeleri.
maxint | nullzorunluKademenin üst sınırı. null üst sınırsız son kademedir.
pointsintzorunluKademeye karşılık gelen puan.
Dönen alanlar data — 4
dataobjectGüncel kademeler. Getirme ucuyla aynı şekildedir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/clients/trust-score-settings' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"services":[{"max":5,"points":20},{"max":null,"points":30}]}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/trust-score-settings', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    services: [
      { max: 5, points: 20 },
      { max: null, points: 30 },
    ],
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/trust-score-settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'services' => [
            ['max' => 5,    'points' => 20],
            ['max' => null, 'points' => 30],
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Son kademe 'max' => null olmali, yoksa esigin ustundeki musteri puan almaz.
$response = Api::Clients()->SaveTrustScoreSettings([
    'services' => [
        ['max' => 5,    'points' => 20],
        ['max' => null, 'points' => 30],
    ],
]);

Tuzaklar

Grup kaydı listenin tamamını değiştirir

Kaydetme ucu birleştirme yapmaz. Gönderdiğiniz listede olmayan bir grup silinir, o gruba bağlı müşteriler grupsuz kalır. Tek bir grubu değiştirmek için önce listeyi okuyun, üzerinde değişikliği yapın, tamamını geri gönderin.

Altın eşiği gümüşün üstüne itilir

Altın gelir eşiğini gümüşe eşit ya da altında gönderirseniz hata almazsınız; değer sessizce rev_silver + 1 yapılır. Ne kaydedildiğini yanıttan okuyun.

Son kademe üst sınırsız olmalı

Bir eksenin son kademesinde max alanını null bırakın. Aksi hâlde en yüksek sınırın üstündeki müşteri hiçbir kademeye düşmez ve o eksenden puan almaz.

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.