Bildirim Kancaları
Müşteriye giden her mesajın on iki kancası: gönderim kapısı, alıcı listesi, değişkenler ve teslim.
Genel Bakış
Bir bildirim iki kapıdan geçer. Birincisi gönderimin kendisini durdurur: hiç kimseye gitmez. İkincisi tek bir teslimi durdurur: diğer alıcılar mesajı yine alır.
Arada alıcı listesi ve değişkenler vardır. Değişken filtresi alıcı başına çalışır, yani aynı bildirim herkese farklı içerikle gidebilir.
Referans
Gönderimin tamamını durdurma
Bildirim hazırlanmadan önce çalışır. Durdurmak, mesajın hiç kimseye gitmemesi demektir.
invoice-created, welcome ve benzerleri. Bu, gerçekten gönderilen şablondur; çağıranın istediği ad olmayabilir. E-posta aktarımıyla açılan talepte ticket-replied-by-admin buraya ticket-replied-by-admin-pipe olarak gelir. Alıcı, değişken ve dispatched kancaları da aynı adı görür. Talep şablonunu adıyla süzen dinleyici iki adı da tanımalıdır. Müşterinin zil kaydı istenen adla yazılır.true bile yeter. Diğer kapıların aksine burada metin şartı yoktur; yanlışlıkla bir değer döndürmek bildirimi sessizce keser.Hook::add('gate:notification.dispatch', 10, function ($group, $name, $context) {
// DIKKAT: bos olmayan HER donus gonderimi durdurur, true bile.
if ($name === 'invoice-reminder' && Acme::quietHours()) return true;
return null;
});Alıcı listesini değiştirme
Alıcılar belirlendikten sonra, mesajlar hazırlanmadan önce çalışır.
invoice-created, welcome ve benzerleri.Hook::add('filter:notification.recipients', 10,
function (&$recipients, $group, $name) {
// Ayni kisi e-posta ve SMS icin AYRI satirdadir: kanala gore suzun.
if ($name === 'invoice-created')
$recipients = array_filter($recipients,
fn ($r) => ($r['channel'] ?? '') !== 'sms');
});Şablon değişkenlerini değiştirme
Mesaj metni üretilmeden önce, her alıcı için ayrı ayrı çalışır.
invoice-created, welcome ve benzerleri.Hook::add('filter:notification.render_variables', 10,
function (&$variables, $group, $name, $recipient) {
// ALICI BASINA calisir: metni onun diline gore uretin.
$variables['acme_note'] = Acme::note($recipient['lang'] ?? 'en');
});Tek bir teslimi durdurma
Hazırlanmış mesaj gönderilmeden hemen önce çalışır. Durdurmak yalnız bu teslimi keser.
Hook::add('gate:notification.deliver', 10, function ($item) {
// YALNIZ bu teslimi durdurur: digerleri gitmeye devam eder.
if (Acme::bounced($item['recipient'] ?? '')) return 'adres gecersiz';
return null;
});Gönderimi izleme
Bildirim gönderildikten sonra çalışır.
Hook::add('action:notification.dispatched', 10, function ($payload) {
// batch_id ayni gonderimin tum mesajlarini birbirine baglar.
Acme::trackBatch($payload['batch_id'] ?? '', $payload['name'] ?? '');
});Şablon alanlarını genişletme
Şablon düzenleme ekranında kullanılabilir alanlar listelenirken çalışır.
Hook::add('filter:notification.template_merge_fields', 10, function (&$fields) {
// Listeye eklemek DEGERI uretmez: render_variables filtresini de yazin.
$fields['acme_note'] = 'Acme notu';
});Fatura eki adını değiştirme
Fatura belgesi bildirime eklenirken çalışır.
Hook::add('filter:notification.invoice_pdf_name', 10, function (&$name) {
$name = Acme::safeFileName($name);
});Şablon etiketini değiştirme
Bildirim şablonunun panelde görünen adı belirlenirken çalışır.
Hook::add('filter:notification.template_label', 10, function (&$label) {
$label = Acme::prefixLabel($label);
});Fatura kalemlerini değiştirme
Fatura bildiriminin kalem listesi şablona gitmeden önce çalışır. Kalem ekleyebilir, çıkarabilir, sıralayabilir veya her kaleme kendi alanınızı koyabilirsiniz.
Hook::add('filter:notification.invoice_items', 10, function ($result, $invoice, $items) {
// Gelen listeyi koruyun: sifirdan kurarsaniz oncekinin eklediklerini silersiniz.
foreach ($result as $i => $line)
$result[$i]['acme_note'] = Acme::noteFor($line['id'] ?? 0);
return $result;
});Sipariş kalemlerini değiştirme
Sipariş bildiriminin kalem listesi için aynı iş. Adet birden çoksa kalemler çoktan ayrılmış, ek ürünler çoktan yüklenmiş hâlde gelir.
Hook::add('filter:notification.order_items', 10, function ($items, $order) {
// Ic kullanim kalemlerini musteriye gosterme.
return array_values(array_filter($items, fn ($x) => ($x['name'] ?? '') !== 'internal'));
});Gönderim kaydını maskeleme
Bir e-posta ya da SMS kaydı veritabanına yazılmadan hemen önce çalışır. Kişisel veriyi maskelemenin, hatta kaydı hiç tutmamanın yeri burasıdır.
channel (mail ya da sms), user_id, reason, content, data, private. E-postada ayrıca subject bulunur.$entry['abort'] = true koyarsanız kayıt hiç yazılmaz ve sayaç sıfır döner. Gönderim yine de yapılır, yalnız izi tutulmaz.Hook::add('filter:notification.log_entry', 10, function (&$entry) {
// Parola sifirlama gonderiminin govdesini hic saklama.
if (($entry['reason'] ?? '') === 'password-reset') {
$entry['content'] = '[maskelendi]';
return;
}
// Pazarlama SMS'i icin kayit hic acilmasin.
if (($entry['channel'] ?? '') === 'sms' && ($entry['reason'] ?? '') === 'campaign')
$entry['abort'] = true;
});Önizlemeye örnek değer verme
Panelde bir şablon önizlenirken çalışır. Önizleme gerçek gönderim yapmaz ve yalnız çekirdekle gelen şablonları tanır: sizin kurduğunuz şablonun alanları boş görünür. Örnek değerleri burada verirsiniz.
group, template, lang. Kendi şablonunuz değilse dokunmadan çıkın.Hook::add('filter:notification.preview_variables', 10, function (&$variables, &$ctx) {
// Yalniz kendi sablonunuzla ilgilenin.
if (($ctx['template'] ?? '') !== 'acme-welcome') return;
$variables = array_merge($variables, [
'acme_plan' => 'Baslangic',
'acme_quota' => '10 GB',
]);
});Tuzaklar
Diğer kapılar boş olmayan bir metin ister; gönderim kapısı boş olmayan her değeri engelleme sayar. Kapanışın sonunda yanlışlıkla bir değer döndürmek — hatta true — bildirimin hiç gitmemesine yol açar ve hiçbir yerde iz kalmaz.
Alıcı listesi kanal başına satır taşır: bir müşteri hem e-posta hem kısa mesaj alıyorsa iki satırdadır. Hesap kimliğine göre tekilleştiren bir dinleyici, farkında olmadan bir kanalı komple kapatır.
On alıcıya giden bir bildirimde bu filtre on kez çalışır. İçine sorgu ya da uzak çağrı koymak, tek bir bildirimi on isteğe çıkarır. Ortak veriyi bir kez hazırlayın, filtrede yalnız alıcıya özel olanı üretin.
Şablon alanları filtresi yalnız operatöre gösterilen listeyi genişletir. Alanı listeye ekleyip değişken filtresini yazmazsanız operatör alanı şablona koyar ve müşteriye boş gider. İkisi birlikte yazılır.
İlgili Makaleler
- Bilgi Bankası ve Bildirim Kancaları
- Müşteri Hesabı Kancaları
- Fatura Yaşam Döngüsü Kancaları
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.