Müşteri Yorumları

1.6k görüntülenme Markdown

Sitede gösterilen müşteri yorumlarını ekleyen, onaylayan ve kaldıran yedi uç.

Genel Bakış

Müşteri yorumları sitede gösterilen referans metinleridir. Her yorumun bir durumu vardır: beklemede, onaylı ya da reddedilmiş. Sitede yalnızca onaylı olanlar görünür.

Yorum metni dil başına tutulur; ad, firma ve avatar ise ortaktır. Ziyaretçinin gönderdiği kayıtlar beklemede başlar ve bir yönetici onaylayana kadar sitede yer almaz.

Bu uçlar aynı zamanda panel üzerinden yorum eklemeyi de sağlar: kâğıtta ya da e-postada gelen bir referansı elle girip doğrudan onaylı oluşturabilirsiniz.

Referans

Yorumları Listeleme

get/api/v1/admin/website/cfeedbacks
Website/GetCfeedbacks admin

Sitede yayınlanan müşteri yorumlarını döndürür.

Sorgu 3
searchstringAd, firma, e-posta ve gönderim adresinde arar.
pageintKaçıncı sayfa.
limitintSayfa başına kayıt. En çok yüz.
Dönen alanlar data[] — 7 + meta — 4
idintYorumun numarası.
full_namestringYorumu bırakanın adı.
company_namestringKişinin firması.
emailstringE-posta adresi.
statusstringYorumun durumu: pending, approved, rejected.
rankintListedeki sırası.
created_atstring | nullGönderilme anı.
totalintToplam yorum. Meta altında döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa. Sıfır, son sayfadasınız demektir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/website/cfeedbacks' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/website/cfeedbacks', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();

const waiting = data.filter((f) => f.status === 'pending');
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/cfeedbacks');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Durum SUZGECI yoktur; bekleyenleri gormek icin listeyi kendiniz ayiklayin.
$all     = Api::Website()->GetCfeedbacks()['data'];
$waiting = array_filter($all, fn ($f) => $f['status'] === 'pending');

Yorum Detayı

get/api/v1/admin/website/cfeedbacks/{id}
Website/GetCfeedback admin

Tek bir yorumu metni ve avatarıyla döndürür.

Dönen alanlar data — 11
idintYorumun numarası.
full_namestringYorumu bırakanın adı.
company_namestringKişinin firması.
emailstringE-posta adresi.
statusstringYorumun durumu: pending, approved, rejected.
rankintListedeki sırası.
unreadintOkunmamış işareti. Onaylanan yorumda birdir.
ipstringYorumun geldiği adres.
created_atstring | nullGönderilme anı.
languagesobjectDil başına yorum metni.
picturestring | nullAvatarın adresi.
Hatalar 2
cfeedback_not_found404Yorum bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/website/cfeedbacks/4' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/website/cfeedbacks/${id}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/cfeedbacks/' . $id);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Yorum METNI ve gonderen ADRESI yalniz burada gelir; liste ikisini de tasimaz.
$fb = Api::Website()->GetCfeedback(['id' => $id])['data'];
$en = $fb['languages']['en']['message'] ?? '';

Yorum Oluşturma

post/api/v1/admin/website/cfeedbacks
Website/CreateCfeedback admin

Panel üzerinden yeni bir müşteri yorumu ekler.

Gövde 7
full_namestringreqYorumu bırakanın adı.
languagesobjectreqDil başına yorum metni. Gönderdiğiniz her dilde metin gerekir.
company_namestringKişinin firması.
emailstringE-posta adresi. Sitede gösterilmez.
statusstringYorumun durumu: pending, approved, rejected. Öntanımlı olarak beklemede.
rankintListedeki sırası.
imagestringAynı istekte yüklenecek avatar.
Dönen alanlar 201 — data — 11
dataobjectOluşan yorum. Detay ucuyla aynı şekildedir.
Hatalar 6
full_name_required422Ad boş.
languages_required422Hiç dil gönderilmedi.
message_required422Bir dilde metin boş.
invalid_status422Durum tanınmıyor.
create_failed500Yorum oluşturulamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/website/cfeedbacks' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"full_name":"Ayse Yilmaz","status":"approved","languages":{"tr":{"message":"Harika hizmet!"}}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/website/cfeedbacks', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    full_name: 'John Doe',
    company_name: 'Example Inc.',
    status: 'approved',
    languages: { en: { message: 'Great service!' } },
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/cfeedbacks');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'full_name' => 'John Doe',
        'status'    => 'approved',
        'languages' => ['en' => ['message' => 'Great service!']],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Durum vermezseniz yorum BEKLEMEDE dogar ve sitede gorunmez; onayi ayrica verin.
Api::Website()->CreateCfeedback([
    'full_name' => 'John Doe',
    'status'    => 'approved',
    'languages' => ['en' => ['message' => 'Great service!']],
]);

Yorumu Güncelleme

patch/api/v1/admin/website/cfeedbacks/{id}
Website/UpdateCfeedback admin onay buradan verilir

Yorumun durumunu, metnini ve bilgilerini değiştirir.

Gövde 7
full_namestringYorumu bırakanın adı. Göndermezseniz mevcut değer korunur.
languagesobjectreqDil başına yorum metni. Gönderdiğiniz her dilde metin gerekir.
company_namestringKişinin firması.
emailstringE-posta adresi. Sitede gösterilmez.
statusstringYorumun durumu: pending, approved, rejected. Öntanımlı olarak beklemede.
rankintListedeki sırası.
imagestringAynı istekte yüklenecek avatar.
Dönen alanlar data — 11
dataobjectGüncel yorum. Detay ucuyla aynı şekildedir.
Hatalar 5
cfeedback_not_found404Yorum bulunamadı.
full_name_required422Ad boşaltıldı.
message_required422Bir dilde metin boşaltıldı.
invalid_status422Durum tanınmıyor.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/website/cfeedbacks/4' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":"approved"}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/cfeedbacks/${id}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 'approved' }),
});

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

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Onay bir ANAHTAR degil DURUM degisimidir; siteye cikaran tek sey budur.
Api::Website()->UpdateCfeedback(['id' => $id, 'status' => 'approved']);

Yorumu Silme

delete/api/v1/admin/website/cfeedbacks/{id}
Website/DeleteCfeedback admin

Yorumu kaldırır.

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

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/cfeedbacks/' . $id);
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);
// Silmek yerine REDDEDIN: kayit durur, sitede gorunmez, kimin ne yazdigi kaybolmaz.
Api::Website()->UpdateCfeedback(['id' => $id, 'status' => 'rejected']);

Avatar Yükleme

put/api/v1/admin/website/cfeedbacks/{id}/picture
Website/SetCfeedbackPicture admin

Yorumun yanında görünecek avatarı yükler.

Gövde 1
imagestringreqYüklenecek avatar. Adres ya da gömülü veri olarak verilebilir.
Dönen alanlar 201 — data — 1
urlstringAvatarın genel adresi.
Hatalar 2
cfeedback_not_found404Yorum bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/website/cfeedbacks/4/picture' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"image":"https://ornek.com/avatar.jpg"}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/cfeedbacks/${id}/picture`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ image: 'https://example.com/avatar.jpg' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/cfeedbacks/' . $id . '/picture');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['image' => 'https://example.com/avatar.jpg']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Avatar ZORUNLU DEGILDIR; yoksa tema kendi yer tutucusunu koyar.
Api::Website()->SetCfeedbackPicture(['id' => $id, 'image' => $data]);

Avatarı Kaldırma

delete/api/v1/admin/website/cfeedbacks/{id}/picture
Website/DeleteCfeedbackPicture admin

Yorumun avatarını kaldırır.

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

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/cfeedbacks/' . $id . '/picture');
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);
// Avatari DEGISTIRMEK icin once silmeye gerek yok; yukleme zaten yerine koyar.
Api::Website()->DeleteCfeedbackPicture(['id' => $id]);

Tuzaklar

Yeni yorum beklemede doğar

Durum alanını göndermezseniz yorum beklemede oluşur ve sitede görünmez. Panelden elle girilen bir referans için bu genellikle istenen davranış değildir; oluştururken durumu onaylı gönderin ya da hemen ardından güncelleyin. Ziyaretçiden gelen kayıtlarda ise beklemede doğması doğru olandır.

Duruma göre süzemezsiniz

Listeleme ucu yalnız arama, sayfa ve sayfa boyutu alır; durum süzgeci yoktur. Onay bekleyenleri bulmak için listeyi çekip kendiniz ayıklamanız gerekir. Yorum sayısı çok olan bir kurulumda sayfa sayfa gezip her sayfada ayıklama yapmayı hesaba katın.

Yorumun metni listede yoktur

Liste adı, firmayı, e-postayı ve durumu verir ama yorumun kendisini vermez. Neyin onaylandığına karar vermek için her kaydı detay ucundan okumanız gerekir. Onay akışı yazarken bunu hesaba katın: liste tek başına karar vermeye yetmez.

E-posta ve adres kayıtta durur

Yorum kaydı gönderenin e-postasını ve geldiği adresi taşır; ikisi de sitede gösterilmez ama detay ucundan okunabilir. Bu kişisel veridir. Yorumları dışarıya taşıyan bir entegrasyon yazarken bu iki alanı istemeden aktarmamaya dikkat edin.

Silmek yerine reddedin

Reddedilen bir yorum sitede görünmez ama kayıt yerinde kalır: kimin ne zaman ne yazdığı ve hangi karara varıldığı okunabilir durumda durur. Silmek bunların hepsini götürür ve aynı kişi yeniden yazarsa geçmişi göremezsiniz.

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.