Hızlı Okumalar
Müşteri arayan, sayıları veren, özet kartını dolduran, müşterinin etkinliğini ve ona gönderilen mesajları listeleyen, hiçbir şeyi değiştirmeyen altı uç.
Genel Bakış
Bu altı uç bir müşteri hakkında hızlı bilgi verir ve hiçbir şeyi değiştirmez. Panelde arama kutusu, pano sayıları ve özet kartı bunları kullanır; iki liste ucu da müşteri sayfasındaki Etkinlik ve Mesajlar sekmeleriyle aynı kayıtları döndürür.
İkisi kurulum geneline bakar (arama ve istatistikler), dördü tek bir müşteriye (özet, öne çıkan not, etkinlik ve gönderilen mesajlar). Adres içinde müşteri kimliği olup olmaması hangisinde olduğunuzu söyler.
Referans
Müşteri Arama
Ada, firmaya ya da e-postaya göre müşteri arar. Otomatik tamamlama kutuları için yazılmıştır.
search adı da kabul edilir.curl -G 'https://panel.ornek.com/api/v1/admin/clients/search' \
-H "Authorization: Bearer $API_KEY" \
-d q=acmeconst url = new URL('https://panel.ornek.com/api/v1/admin/clients/search');
url.searchParams.set('q', 'acme');
const res = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();$url = 'https://panel.ornek.com/api/v1/admin/clients/search?' . http_build_query(['q' => 'acme']);
$ch = curl_init($url);
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()->SearchClients([], ['q' => 'acme']);Müşteri İstatistikleri
Kurulumdaki tüm müşteriler için sayıları döndürür. Tek bir müşteriye bakmaz.
all_time, today, week, month ya da year. Varsayılan all_time.curl -G 'https://panel.ornek.com/api/v1/admin/clients/stats' \
-H "Authorization: Bearer $API_KEY" \
-d period=monthconst url = new URL('https://panel.ornek.com/api/v1/admin/clients/stats');
url.searchParams.set('period', 'month');
const res = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();$url = 'https://panel.ornek.com/api/v1/admin/clients/stats?' . http_build_query(['period' => 'month']);
$ch = curl_init($url);
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()->GetClientsStats([], ['period' => 'month']);{
"data": {
"active": 120,
"blocked": 3,
"new": 18,
"blacklisted": 2,
"active_services": 340,
"unpaid_invoices": 41,
"credit_balance": 14620.12,
"growth_rate": 4.5,
"total": 145
}
}Müşteri Özeti
Tek bir müşteri için özet kart verisi döndürür: gelir, hizmet ve talep sayıları, rozetler, güven puanı.
reference/currencies.poor, fair, good ya da excellent.curl 'https://panel.ornek.com/api/v1/admin/clients/42/summary' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/summary', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/summary');
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()->GetClientSummary(['id' => 42]);
// Puanin nereden geldigini bilesenlerden okuyabilirsiniz.
$score = $response['data']['trust_score'];
$fromServices = $score['services'];{
"data": {
"user_id": 9,
"full_name": "Test Client",
"company_name": "",
"created_at": "2021-03-18 00:00:00",
"total_revenue": 36,
"revenue_currency": 4,
"paid_invoices": 1,
"active_services": 16,
"inactive_services": 16,
"total_tickets": 0,
"recent_tickets": 0,
"badges": {
"loyal": true,
"revenue": false,
"multi_service": true,
"experienced": true
},
"trust_score": {
"total": 50,
"label": "fair",
"services": 30,
"revenue": 5,
"age": 15,
"tickets": 0
}
}
}Öne Çıkan Notu Getirme
Müşterinin tek bir notunu döndürür: varsa sabitlenmiş olanı, yoksa en yenisini.
null.curl 'https://panel.ornek.com/api/v1/admin/clients/42/latest-note' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/latest-note', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
// Hic not yoksa data null gelir — 404 degil.
if (body.data === null) return;$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/latest-note');
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()->GetClientLatestNote(['id' => 42]);
// Notu olmayan musteride 'data' null olur.
$note = $response['data'] ?? null;Müşterinin Etkinlik Kaydını Listeleme
Bir müşterinin etkinlik kayıtlarını en yeniden eskiye listeler: müşterinin yaptıkları ile personelin ya da sistemin hesap üzerinde yaptıkları. Müşteri sayfasındaki Etkinlik sekmesinin kayıtlarıdır, aynı arama ve tarih süzgeçleriyle.
1.1 ile 100 arası. Varsayılan 25; daha büyük değer 100'e indirilir.Y-m-d biçiminde kayıt tarihi; aralık, iki tarih boşluklu kısa çizgiyle birleştirilerek yazılır: 2026-10-01 - 2026-10-12.date değerinin nasıl karşılaştırılacağı: eq, neq, gte, gt, lte ya da lt. Varsayılan eq: o gün ya da o aralık içinde.0.client (müşteri ya da alt kullanıcılarından biri), staff, system ya da işlemi yapan hesap artık yoksa deleted.in, alteration, login, added ya da delete.Y-m-d H:i:s).0.date ne Y-m-d ne de Y-m-d - Y-m-d aralığı.date_op altı işleçten biri değil.curl -G 'https://panel.ornek.com/api/v1/admin/clients/42/activity' \
--data-urlencode 'search=login' \
--data-urlencode 'date=2026-10-01 - 2026-10-12' \
-H "Authorization: Bearer $API_KEY"const query = new URLSearchParams({ search: 'login', limit: '50' });
const res = await fetch(`https://panel.ornek.com/api/v1/admin/clients/42/activity?${query}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
// Son sayfada meta.next_page 0 gelir.
const more = body.meta.next_page !== 0;$query = http_build_query(['date' => '2026-10-01', 'date_op' => 'gte', 'limit' => 50]);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/activity?' . $query);
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()->GetClientActivity(['id' => 42], ['search' => 'login', 'limit' => 50]);
foreach ($response['data'] ?? [] as $row)
echo $row['created_at'], ' ', $row['description'], PHP_EOL;{
"data": [
{
"id": 183379,
"actor_id": 1,
"actor_type": "staff",
"actor_name": "Admin",
"reason": "login",
"action": "admin-login-as-client",
"description": "Müşteri olarak giriş yapıldı: Ahmet Yılmaz (#116)",
"data": { "user_id": 116, "user_name": "Ahmet Yılmaz" },
"ip": "203.0.113.10",
"created_at": "2026-10-12 05:41:07"
}
],
"meta": { "total": 716, "page": 1, "limit": 25, "next_page": 2 }
}Müşteriye Gönderilen Mesajları Listeleme
Bir müşteriye gönderilen e-posta ve SMS'leri en yeniden eskiye, müşteri sayfasındaki Mesajlar sekmesiyle aynı arama ve tarih süzgeçleriyle listeler. Listede mesaj gövdesi yoktur.
1.1 ile 100 arası. Varsayılan 25; daha büyük değer 100'e indirilir.Y-m-d biçiminde gönderim tarihi; aralık, iki tarih boşluklu kısa çizgiyle birleştirilerek yazılır: 2026-10-01 - 2026-10-12.date değerinin nasıl karşılaştırılacağı: eq, neq, gte, gt, lte ya da lt. Varsayılan eq: o gün ya da o aralık içinde.type ile birlikte benzersizdir.email ya da sms.two-factor-verification, subuser-invitation ya da message-from-admin. Gönderim neden saklamadıysa boş.Y-m-d H:i:s).0.date ne Y-m-d ne de Y-m-d - Y-m-d aralığı.date_op altı işleçten biri değil.curl -G 'https://panel.ornek.com/api/v1/admin/clients/42/messages' \
--data-urlencode 'date=2026-10-01' \
--data-urlencode 'date_op=gte' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/messages?search=fatura', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
// Listede govde yok: bir mesaji sonra okumak icin type + id saklanir.
const refs = body.data.map(m => ({ type: m.type, id: m.id }));$query = http_build_query(['search' => 'fatura', 'page' => 2]);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/messages?' . $query);
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()->GetClientMessages(['id' => 42], ['date' => '2026-10-01 - 2026-10-12']);
// Govde onizleme ucundan okunur; listedeki type + id verilir.
$first = $response['data'][0] ?? null;
$preview = $first ? Api::Clients()->GetMessagePreview([], ['type' => $first['type'], 'id' => $first['id']]) : null;{
"data": [
{
"id": 17313,
"type": "email",
"subject": "Destek talebi oluşturuldu",
"recipient": "[email protected]",
"reason": "",
"ip": "203.0.113.10",
"created_at": "2026-10-11 18:02:44"
},
{
"id": 905,
"type": "sms",
"subject": "Hizmetiniz hazır",
"recipient": "+905550000000",
"reason": "message-from-admin",
"ip": "203.0.113.10",
"created_at": "2026-10-10 09:00:12"
}
],
"meta": { "total": 522, "page": 1, "limit": 25, "next_page": 2 }
}Tuzaklar
Kredi bakiyesi ve gelir alanları sembolsüz sayılardır; tarih de ham biçimdedir. Para birimini ayrı alandan okuyup biçimlendirmeyi kendiniz yaparsınız. Bu bilinçlidir: sunucu okuyucunun yerelini bilmez.
Öne çıkan not ucu, notu olmayan bir müşteride 404 değil data: null döndürür. Alanlara doğrudan erişen kod burada patlar; önce boş olup olmadığına bakın.
Özetteki puan sabit bir ölçek değildir; yapılandırmadaki kademelerden hesaplanır. Kademeleri değiştirdiğinizde aynı müşterinin puanı değişir, dolayısıyla puanı kurulumlar arasında karşılaştırmayın.
Gönderilen mesajlar ucu yalnız konuyu, alıcıyı ve tarihi döndürür. Bir mesajı okumak için type ve id değerlerini mesaj önizleme ucuna verin; e-postalar ve SMS'ler ayrı numaralandığı için tek başına id yetmez. Önizleme, güvenlik ve gizli mesajların gövdesini vermez.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.