Personel Departmanları

1.7k görüntülenme Markdown

Destek departmanlarını kuran ve personelini atayan altı uç.

Genel Bakış

Departmanlar destek taleplerinin hangi ekibe düşeceğini belirler. Müşteri talep açarken bir departman seçer; o departmana atanmış personel de talebi üstlenebilecek kişilerdir.

Departman adı ve açıklaması dil başına tutulur. Oluştururken kurulumdaki her etkin dilde ad gerekir; güncellerken yalnız gönderdiğiniz diller değişir.

Simge iki biçimde olabilir: bir yazı tipi simgesi ya da yüklenmiş bir görsel. Görseli kaldıran ayrı bir uç vardır ve kaldırıldığında tür yazı tipine döner.

Referans

Departmanları Listeleme

get/api/v1/admin/admins/departments
Admins/GetDepartments admin

Destek departmanlarını ve onlara bakan personeli döndürür.

Sorgu 3
pageintKaçıncı sayfa.
limitintSayfa başına kayıt.
searchstringDepartman adında arar.
Dönen alanlar data[] — 7 + meta — 4
idintDepartmanın numarası.
namestringAdı. Panelin geçerli dilinde gelir.
descriptionstringNe için olduğu.
iconstringSimgesi.
icon_typestringSimgenin yazı tipinden mi görselden mi geldiği.
icon_urlstringGörsel simgenin adresi. Yalnız görsel simgede dolar.
appointee_idsint[]Departmana bakan personelin numaraları.
totalintToplam departman. Meta altında döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/admins/departments' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/admins/departments', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();

const orphan = data.filter((d) => d.appointee_ids.length === 0);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/departments');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Personeli olmayan departmana gelen talep KIMSEYE atanamaz; bos listeleri arayin.
$deps   = Api::Admins()->GetDepartments()['data'];
$orphan = array_filter($deps, fn ($d) => ! $d['appointee_ids']);

Departman Oluşturma

post/api/v1/admin/admins/departments
Admins/CreateDepartment admin her dil gerekir

Yeni bir destek departmanı açar.

Gövde 7
namesobjectreqDil başına departman adı. Kurulumdaki her etkin dilde ad gerekir.
descriptionsobjectDil başına açıklama.
rankintListedeki sırası.
appointeesint[]Departmana bakacak personel. Talep atamalarında bu kişiler seçilebilir.
icon_typestringSimgenin yazı tipinden mi görselden mi geldiği. Öntanımlı olarak yazı tipi.
iconstringYazı tipi simgesinin sınıfı.
icon_imagestringYüklenecek simge görseli.
Dönen alanlar 201 — data — 7
dataobjectOluşan departman. Detay ucuyla aynı şekildedir.
Hatalar 3
name_required422Etkin dillerden birinde ad eksik.
create_failed422Departman oluşturulamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/admins/departments' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"names":{"tr":"Genel","en":"General"},"appointees":[1,5]}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/admins/departments', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    names: { en: 'General', tr: 'Genel' },
    descriptions: { en: 'General questions' },
    appointees: [1, 5],
    icon_type: 'font',
    icon: 'fa-solid fa-globe',
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/departments');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'names'      => ['en' => 'General', 'tr' => 'Genel'],
        'appointees' => [1, 5],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Olusturmada HER etkin dilde ad gerekir; guncellemede yalniz gonderdigin diller degisir.
Api::Admins()->CreateDepartment([
    'names'      => ['en' => 'General', 'tr' => 'Genel'],
    'appointees' => [1, 5],
]);

Departman Detayı

get/api/v1/admin/admins/departments/{did}
Admins/GetDepartment admin

Tek bir departmanı bütün dilleriyle döndürür.

Dönen alanlar data — 7
idintDepartmanın numarası.
rankintListedeki sırası.
iconstringSimgesi.
icon_typestringSimgenin yazı tipinden mi görselden mi geldiği.
icon_urlstringGörsel simgenin adresi.
appointee_idsint[]Departmana bakan personelin numaraları.
translationsobjectDil başına ad ve açıklama. Bütün diller birlikte gelir.
Hatalar 2
not_found404Departman bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/admins/departments/4' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/admins/departments/${did}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/departments/' . $did);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Liste TEK dil verir, detay hepsini; ceviri isi burada baslar.
$d = Api::Admins()->GetDepartment(['did' => $did])['data'];
$tr = $d['translations']['tr']['name'] ?? '';

Departmanı Güncelleme

patch/api/v1/admin/admins/departments/{did}
Admins/UpdateDepartment admin

Departmanın gönderdiğiniz alanlarını ve dillerini değiştirir.

Gövde 7
namesobjectDil başına departman adı. Yalnız gönderdiğiniz diller değişir.
descriptionsobjectDil başına açıklama.
rankintListedeki sırası.
appointeesint[]Departmana bakacak personel. Talep atamalarında bu kişiler seçilebilir.
icon_typestringSimgenin yazı tipinden mi görselden mi geldiği. Öntanımlı olarak yazı tipi.
iconstringYazı tipi simgesinin sınıfı.
icon_imagestringYüklenecek simge görseli.
Dönen alanlar data — 7
dataobjectGüncel departman. Detay ucuyla aynı şekildedir.
Hatalar 3
not_found404Departman bulunamadı.
name_required422Gönderilen bir dilde ad boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/admins/departments/4' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"names":{"tr":"Genel Destek"},"appointees":[1,5,8]}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/departments/${did}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    names: { en: 'General Support' },
    appointees: [1, 5, 8],
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/departments/' . $did);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'names'      => ['en' => 'General Support'],
        'appointees' => [1, 5, 8],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Personel listesi YERINE GECER: birini eklemek icin once mevcut listeyi okuyun.
$d = Api::Admins()->GetDepartment(['did' => $did])['data'];
$d['appointee_ids'][] = $newStaffId;

Api::Admins()->UpdateDepartment([
    'did' => $did, 'appointees' => $d['appointee_ids'],
]);

Departmanı Silme

delete/api/v1/admin/admins/departments/{did}
Admins/DeleteDepartment admin

Departmanı kaldırır.

Dönen alanlar data — 2
deletedboolSilme çalıştı mı.
idintSilinen departmanın numarası.
Hatalar 3
not_found404Departman bulunamadı.
blocked_by_gate422Bir kanca silmeyi reddetti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/admins/departments/4' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/departments/${did}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/departments/' . $did);
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);
// Departmani silmeden ONCE oradaki talepleri baska bir departmana tasiyin.
Api::Tickets()->UpdateTicket(['id' => $ticketId, 'department_id' => $otherDid]);
Api::Admins()->DeleteDepartment(['did' => $did]);

Simgeyi Kaldırma

delete/api/v1/admin/admins/departments/{did}/icon
Admins/DeleteDepartmentIcon admin

Departmanın görsel simgesini kaldırır.

Dönen alanlar data — 7
dataobjectGüncel departman. Simge türü yazı tipine döner.
Hatalar 2
not_found404Departman bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/admins/departments/4/icon' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/departments/${did}/icon`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/departments/' . $did . '/icon');
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);
// Kaldirma dosyayi siler ve turu yazi tipine cevirir; simge alani bos kalabilir.
Api::Admins()->DeleteDepartmentIcon(['did' => $did]);
Api::Admins()->UpdateDepartment(['did' => $did, 'icon' => 'fa-solid fa-globe']);

Tuzaklar

Personeli olmayan departman talebi öksüz bırakır

Bir departmana hiç personel atanmadıysa oraya düşen talep kimseye atanamaz ve talep listesinde atanacak kişi seçeneği boş çıkar. Departman yine görünür ve müşteri seçebilir; sorun ancak talep geldiğinde fark edilir. Listeyi boş personel listesi için tarayın.

Personel listesi yerine geçer

Güncellemede gönderdiğiniz personel listesi mevcut atamaların yerine geçer. Bir kişiyi eklemek isterken yalnız onu göndermek diğerlerini departmandan çıkarır ve onların talep görünürlüğü değişir. Önce detayı okuyup listeyi birleştirin.

Oluşturma her dilde ad ister, güncelleme istemez

Departman oluştururken kurulumdaki her etkin dilde ad gerekir; biri eksikse çağrı reddedilir. Güncellemede ise yalnız gönderdiğiniz diller değişir, gerisi korunur. Bu iki farklı davranışı aynı sanmak, oluşturmada beklenmedik bir hata olarak karşınıza çıkar.

Silmeden önce talepleri taşıyın

Departmanı silmek, ona bağlı destek taleplerinin dayanağını kaldırır. Talepler kaybolmaz ama artık var olmayan bir departmanı gösterirler ve listelerde bulunmaları zorlaşır. Silmeden önce o departmandaki talepleri başka bir departmana taşıyın.

Simgeyi kaldırmak yerine yenisini koymaz

Görsel simgeyi kaldıran uç dosyayı siler ve türü yazı tipine çevirir, ama yerine bir simge koymaz. Yazı tipi simgesi alanı boşsa departman simgesiz görünür. Kaldırdıktan sonra bir yazı tipi simgesi yazmak genelde istenen adımdır.

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.