Bildirim Düzeni

1.7k görüntülenme Markdown

Bütün bildirimlerin paylaştığı çerçeveyi ve logoları yöneten dört uç.

Genel Bakış

Her bildirim ortak bir çerçeve içinde gider: üstte bir başlık, ortada şablonun kendi gövdesi, altta bir imza. Bu makale o çerçeveyi ve içindeki logoları yönetir.

Çerçeve dil başına ayrı tutulur, çünkü metni ve yönü dile bağlıdır. Şablon motoru ise kurulum geneli tek bir seçimdir ve değişkenlerin hangi yazımla çözüleceğini belirler.

Yazma çağrısı çerçeveyi kaydetmeden önce denetler: bilinmeyen bir değişken ya da bozuk sözdizimi reddedilir. Böylece bozuk bir çerçeve bütün bildirimleri düşürmez.

Referans

Düzeni Okuma

get/api/v1/admin/notifications/settings
Notifications/GetNotificationSettings admin

Bütün bildirimlerin paylaştığı çerçeveyi ve logoları döndürür.

Dönen alanlar data — 3
enginestringŞablon motoru. Değişkenlerin hangi yazımla çözüleceğini belirler.
layoutobjectDil başına çerçeve parçaları.
headerstringÜst parça.
contentstringGövdenin yerleşeceği orta parça.
footerstringAlt parça.
logosobjectÜst ve alt logonun adresleri. Yüklenmemişse boş gelir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/notifications/settings' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/notifications/settings', {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data } = await res.json();
const syntax = data.engine;   // degiskenlerin yazimi buna bagli
$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Motor degisirse TUM sablonlardaki degisken yazimi degisir; once hangi motorda oldugunuzu okuyun.
$cfg = Api::Notifications()->GetNotificationSettings()['data'];
$engine = $cfg['engine'];

Düzeni Yazma

put/api/v1/admin/notifications/settings
Notifications/UpdateNotificationSettings admin sözdizimi denetlenir

Şablon motorunu ve çerçeve parçalarını değiştirir.

Gövde 2
enginestringŞablon motoru: motor yok, Smarty ya da Twig.
layoutobjectDil başına çerçeve parçaları. Gönderilen her dil, değişken ve sözdizimi için tam çerçeve olarak denetlenir. Göndermediğiniz parça kayıtlı kopyasını korur; yalnız footer gönderebilirsiniz.
headerstringÜst parça.
contentstringGövdenin yerleşeceği orta parça.
footerstringAlt parça.
Dönen alanlar data — 3
dataobjectGüncel düzen. Okuma ucuyla aynı şekildedir.
Hatalar 3
invalid_variable422Bilinmeyen bir değişken kullanılmış.
invalid_syntax422Şablon sözdizimi hatalı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/notifications/settings' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"engine":"twig","layout":{"en":{"header":"<header></header>","content":"{{ content }}","footer":"<footer></footer>"}}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/notifications/settings', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    engine: 'twig',
    layout: { en: { header, content: '{{ content }}', footer } },
  }),
});

if (res.status === 422) showSyntaxError(await res.json());
$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['engine' => 'twig', 'layout' => $layout]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Denetim YALNIZ duzen parcalarina bakar: sablonlarin kendi govdeleri motor degisiminde denetlenmez.
Api::Notifications()->UpdateNotificationSettings([
    'engine' => 'twig', 'layout' => $layout,
]);

Logo Yükleme

post/api/v1/admin/notifications/logos/{type}
Notifications/UploadNotificationLogo admin

Bildirimlerin üst ya da alt logosunu yükler.

Gövde 1
filestringreqGörsel. Kodlanmış içerik ya da uzak adres olarak gönderilir.
Dönen alanlar data — 2
typestringLogo türü.
logostringYüklenen logonun tam adresi.
Hatalar 5
invalid_type422Logo türü üst ya da alt değil.
file_required422Dosya verilmedi.
file_invalid422Dosya okunamadı.
upload_failed422Yükleme başarısız.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/notifications/logos/header' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"file":"data:image/png;base64,iVBORw0KGgo..."}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/notifications/logos/${type}`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ file: dataUri }),
});

const { data } = await res.json();
$uri = 'data:image/png;base64,' . base64_encode(file_get_contents($path));

$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/logos/' . $type);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['file' => $uri]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Yeni logo ESKISINI SILER: geri donus yolu yoktur, once mevcut dosyayi indirip saklayin.
$cur = Api::Notifications()->GetNotificationSettings()['data']['logos']['header'] ?? '';
if ($cur) file_put_contents('logo-backup.png', file_get_contents($cur));

Api::Notifications()->UploadNotificationLogo(['type' => 'header', 'file' => $uri]);

Logoyu Kaldırma

delete/api/v1/admin/notifications/logos/{type}
Notifications/DeleteNotificationLogo admin

Üst ya da alt logoyu kaldırır.

Dönen alanlar data — 2
typestringLogo türü.
deletedboolSilme çalıştı mı.
Hatalar 2
invalid_type422Logo türü üst ya da alt değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/notifications/logos/header' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/notifications/logos/${type}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/logos/' . $type);
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);
// Logoyu kaldirmak duzendeki gorsel etiketini KALDIRMAZ: cerceve kirik gorsel gosterebilir.
Api::Notifications()->DeleteNotificationLogo(['type' => 'header']);
// duzendeki <img> satirini da temizleyin

Tuzaklar

Motor değişimi bütün şablonları etkiler

Şablon motoru kurulum genelinde tektir; değiştirmek her bildirimin değişken yazımını değiştirir. Yazma çağrısı yalnız gönderdiğiniz çerçeveyi denetler, şablonların kendi gövdelerini denetlemez. Motoru değiştirmeden önce şablon metinlerinin yeni yazıma uyduğunu kendiniz doğrulayın.

Yeni logo eskisini siler

Logo yüklemek eski dosyayı sunucudan kaldırır; bir sürüm geçmişi yoktur. Yanlış bir görsel yüklemek eskisini geri getirilemez biçimde götürür. Yüklemeden önce mevcut logoyu adresinden indirip saklayın.

Logoyu kaldırmak çerçeveyi düzeltmez

Logo kaldırma dosyayı ve ayar kaydını siler, ama çerçevedeki görsel etiketini kaldırmaz. Çerçeve o adrese işaret etmeye devam ederse müşteriye giden e-postada kırık bir görsel görünür. Logoyu kaldırdıktan sonra çerçeveyi de düzenleyin.

Çerçeve dil başınadır, motor değildir

Çerçeve parçalarını dil başına yazarsınız, ama motor tek bir kurulum ayarıdır. Bir dilin çerçevesini yeni motora göre yazıp diğerlerini eski hâlinde bırakmak, bırakılan dillerde ham değişken metni gösterir. Motoru değiştirirken bütün dilleri birlikte geçirin.

Denetim yalnız gönderilen dilleri kapsar

Yazma çağrısı, gövdede gönderdiğiniz her dilin birleşik çerçevesini denetler. Göndermediğiniz diller denetlenmez ve bozuk kalmışlarsa öyle kalırlar. Kurulum genelinde bir doğrulama istiyorsanız bütün dilleri gönderin.

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.