Bildirim Şablonu Yönetimi

1.7k görüntülenme Markdown

Bildirim şablonlarını listeleyen, ekleyen, okuyan, düzenleyen ve kaldıran beş uç.

Genel Bakış

Bir bildirim şablonu iki ayrı yerde yaşar. Davranışı ayar dosyasındadır: açık mı, kime gider, hangi kanaldan. Metni ise dil başına ayrı dosyalardadır: konu, e-posta gövdesi ve kısa mesaj.

Bu ayrım uçlara yansır. Liste ucu yalnız davranışı verir; metni görmek için tek şablonu okumak gerekir.

Şablonlar gruplara ayrılır ve bir grup kendi kurallarını getirir: fatura belgesi eklemek yalnız fatura grubunda anlamlıdır, diğer gruplarda gönderilse de yok sayılır.

Referans

Şablonları Listeleme

get/api/v1/admin/notifications/templates
Notifications/GetNotificationTemplates admin

Bütün bildirim şablonlarını gruplarıyla döndürür.

Dönen alanlar data[] — 3
groupstringGrubun anahtarı.
namestringGrubun çevrilmiş adı.
templatesarrayGruptaki şablonlar.
groupstringŞablonun grubu.
keystringŞablonun anahtarı.
namestringÇevrilmiş adı.
statusintŞablon açık mı.
customboolElle eklenmiş bir şablon mu.
user_mailintMüşteriye e-posta gitsin mi.
admin_mailintPersonele e-posta gitsin mi.
user_smsintMüşteriye kısa mesaj gitsin mi.
admin_smsintPersonele kısa mesaj gitsin mi.
send_pdfintFatura belgesi eklensin mi. Fatura grubu dışında boş gelir.
emailsstringEk e-posta alıcıları.
phonesstringEk telefon alıcıları.
departmentsint[]Bağlı departman numaraları.
variablesstringŞablonda kullanılabilecek değişkenler.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/notifications/templates' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/notifications/templates', {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data } = await res.json();
const flat = data.flatMap((g) => g.templates);
const off  = flat.filter((t) => ! t.status);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/templates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Liste GRUPLUDUR ve icerik metni TASIMAZ: konu ve govde ancak detay ucunda gelir.
$groups = Api::Notifications()->GetNotificationTemplates()['data'];
$flat   = array_merge(...array_column($groups, 'templates'));

Şablon Ekleme

post/api/v1/admin/notifications/templates
Notifications/CreateNotificationTemplate admin

Bir grup altında yeni bir şablon açar.

Gövde 2
groupstringreqGrubun anahtarı.
keystringreqŞablonun anahtarı. Eğik çizgi, nokta ve virgül tireye çevrilir.
Dönen alanlar 201 — data — 14
dataobjectOluşan şablon. Listedeki şablon nesnesiyle aynı şekildedir.
Hatalar 6
group_required422Grup verilmedi.
key_required422Anahtar verilmedi.
invalid_group422Grup metin yerine liste veya nesne olarak gönderildi.
invalid_key422Anahtar metin yerine liste veya nesne olarak gönderildi.
already_exists422Bu grup ve anahtarda şablon zaten var.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/notifications/templates' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"group":"account","key":"welcome-message"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/notifications/templates', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ group: 'account', key: 'welcome-message' }),
});

const { data } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/templates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['group' => 'account', 'key' => 'welcome-message']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Yeni sablon BOS dogar ve cekirdek onu kendiliginden GONDERMEZ; iceriginizi ve tetigi siz kurun.
Api::Notifications()->CreateNotificationTemplate(['group' => 'account', 'key' => 'welcome-message']);
Api::Notifications()->UpdateNotificationTemplate([
    'group' => 'account', 'key' => 'welcome-message',
    'contents' => ['en' => ['subject' => 'Welcome', 'mail_content' => $html]],
]);

Şablonu Okuma

get/api/v1/admin/notifications/templates/{group}/{key}
Notifications/GetNotificationTemplate admin

Şablonun ayarlarını ve her dildeki metnini döndürür.

Dönen alanlar data — 15
groupstringŞablonun grubu.
keystringŞablonun anahtarı.
namestringÇevrilmiş adı.
statusintŞablon açık mı.
customboolElle eklenmiş bir şablon mu.
user_mailintMüşteriye e-posta gitsin mi.
admin_mailintPersonele e-posta gitsin mi.
user_smsintMüşteriye kısa mesaj gitsin mi.
admin_smsintPersonele kısa mesaj gitsin mi.
send_pdfintFatura belgesi eklensin mi. Fatura grubu dışında boş gelir.
emailsstringEk e-posta alıcıları.
phonesstringEk telefon alıcıları.
departmentsint[]Bağlı departman numaraları.
variablesstringŞablonda kullanılabilecek değişkenler.
contentsobjectDil başına metin.
subjectstringE-posta konusu.
mail_contentstringE-posta gövdesi.
sms_contentstringKısa mesaj metni.
Hatalar 2
not_found404Şablon bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/notifications/templates/invoice/invoice-created' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/notifications/templates/${group}/${key}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data } = await res.json();
const missing = langs.filter((l) => ! data.contents[l]?.subject);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/templates/' . $group . '/' . $key);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kullanilabilir degiskenler burada yazar; sablona baska bir degisken yazmak METIN olarak gider.
$t = Api::Notifications()->GetNotificationTemplate(['group' => $g, 'key' => $k])['data'];
$allowed = $t['variables'];

Şablonu Güncelleme

patch/api/v1/admin/notifications/templates/{group}/{key}
Notifications/UpdateNotificationTemplate admin

Gönderdiğiniz ayarları ve metinleri yazar, gerisine dokunmaz.

Gövde 10
statusintŞablon açık mı.
user_mailintMüşteriye e-posta gitsin mi.
admin_mailintPersonele e-posta gitsin mi.
user_smsintMüşteriye kısa mesaj gitsin mi.
admin_smsintPersonele kısa mesaj gitsin mi.
send_pdfintFatura belgesi eklensin mi. Fatura grubu dışında yok sayılır.
emailsstringEk e-posta alıcıları, virgülle ya da satır sonuyla ayrılmış.
phonesstringEk telefon alıcıları, virgülle ya da satır sonuyla ayrılmış.
departmentsint[]Departman numaraları. Liste yerine geçer, üzerine eklemez.
contentsobjectDil başına metin.
subjectstringE-posta konusu.
mail_contentstringE-posta gövdesi.
sms_contentstringKısa mesaj metni.
Dönen alanlar data — 15
dataobjectGüncel şablon. Okuma ucuyla aynı şekildedir.
Hatalar 13
not_found404Şablon bulunamadı.
invalid_emails422E-posta alıcıları metin yerine liste veya nesne olarak gönderildi.
invalid_phones422Telefon alıcıları metin yerine liste veya nesne olarak gönderildi.
invalid_status422Açma kapama anahtarı liste veya nesne olarak gönderildi.
invalid_user_mail422Müşteri e-posta anahtarı liste veya nesne olarak gönderildi.
invalid_admin_mail422Personel e-posta anahtarı liste veya nesne olarak gönderildi.
invalid_user_sms422Müşteri mesaj anahtarı liste veya nesne olarak gönderildi.
invalid_admin_sms422Personel mesaj anahtarı liste veya nesne olarak gönderildi.
invalid_send_pdf422Fatura belgesi anahtarı liste veya nesne olarak gönderildi.
invalid_departments422Departman listesindeki bir öğe numara yerine liste veya nesne.
invalid_contents422Metin dile göre gruplanmamış ya da bir parçası metin değil.
config_write_failed422Ayar dosyası yazılamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/notifications/templates/invoice/invoice-created' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":1,"user_mail":1,"departments":[1,2]}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/notifications/templates/${group}/${key}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    status: 1,
    contents: { en: { subject: 'Your invoice', mail_content: html } },
  }),
});

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

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Departman listesi YERINE GECER; birini eklemek icin once mevcut listeyi okuyun.
$t = Api::Notifications()->GetNotificationTemplate(['group' => $g, 'key' => $k])['data'];
$t['departments'][] = $newDid;

Api::Notifications()->UpdateNotificationTemplate([
    'group' => $g, 'key' => $k, 'departments' => $t['departments'],
]);

Şablonu Silme

delete/api/v1/admin/notifications/templates/{group}/{key}
Notifications/DeleteNotificationTemplate admin

Şablonu ve bütün dillerdeki metinlerini siler.

Dönen alanlar data — 3
deletedboolSilme çalıştı mı.
groupstringGrubun anahtarı.
keystringSilinen şablonun anahtarı.
Hatalar 2
not_found404Şablon bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/notifications/templates/account/welcome-message' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/notifications/templates/${group}/${key}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/notifications/templates/' . $group . '/' . $key);
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);
// Cekirdegin KENDI sablonunu silmek o olayin bildirimini komple susturur; durumu kapatmak yeter.
Api::Notifications()->UpdateNotificationTemplate(['group' => $g, 'key' => $k, 'status' => 0]);

Tuzaklar

Departman listesi yerine geçer

Güncellemede gönderdiğiniz departman listesi mevcut olanın yerine geçer. Bir departman eklemek isterken yalnız onu göndermek diğerlerini kaldırır ve o departmanlar bildirimi almaz olur. Önce okuyup listeyi birleştirin.

Bilinmeyen değişken metin olarak gider

Şablonun kullanabileceği değişkenler kendi kaydında yazılıdır. Listede olmayan bir değişken yazmak hata vermez; bildirim gider ve müşteri süslü parantezli ham metni görür. Metni yazmadan önce izin verilen listeyi okuyun.

Yeni şablon kendiliğinden gönderilmez

Elle eklenen bir şablon yalnız bir kayıttır: çekirdekte onu tetikleyen bir olay yoktur. Gönderilmesi için bir modülün ya da kancanın onu çağırması gerekir. Şablonu açmak tek başına hiçbir mesaj üretmez.

İki şablonun durumu kayıt ayarına bağlıdır

E-posta ve telefon doğrulama şablonlarının açık kapalı durumu, kayıt doğrulama ayarıyla birlikte hareket eder. Şablonu kapatmak kayıt akışındaki doğrulamayı da kapatır. Bunu bir görünüm ayarı sanıp değiştirmek yeni üyelerin doğrulamasını düşürür.

Belge eki grup dışında sessizce düşer

Fatura belgesi ekleme ayarı yalnız fatura grubunda çalışır. Başka bir grubun şablonuna gönderirseniz hata almazsınız, değer yok sayılır ve okuma ucunda boş görünür. Bunu kaydın çalışmadığı sanmayın.

Yanlış tip güncellemenin tamamını durdurur

Metin ya da 0 ve 1 beklenen bir alana liste veya nesne gönderirseniz istek 422 ile reddedilir. O istekteki hiçbir şey kaydedilmez, doğru gönderilen alanlar da. Hatada adı geçen alanı düzeltip isteği yeniden 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.