Kişiselleştirme
Kampanya metni, worker'ın dil seçildikten sonra ve transport çağrılmadan önce cihaz başına doldurduğu yer tutucular içerebilir:
Selam {{firstName|dostum}}, {{streak}} günlük serin bu gece bitiyor.
Sözdizimi
| Biçim | Değer varsa | Yoksa |
|---|---|---|
{{name}} | değer | boş string |
| `{{name | yedek}}` | değer |
- Adlar: harf, rakam,
_,.,-, en çok 64 karakter. Süslü parantez içindeki boşluk yok sayılır ({{ name }}). - Yedekler: en çok 64 karakter,
}ya da|yok. - Değiştirmeden sonra ardışık boşluklar tekile iner ve string kırpılır; yedek olmayan eksik değer
Selam , hoş geldin'i olduğu gibi bırakır — boş olabilecek her şeye yedek yazın. - Başlık, gövde ve url'de çalışır.
data'da değil.
Değerler
| Kaynak | Adlar |
|---|---|
| Abonenin tag'leri | her anahtar: {{firstName}}, {{plan}}, {{cartItems}} |
| Yerleşikler | {{externalId}}, {{country}}, {{language}}, {{platform}} |
Sayılar ve boolean'lar string'e çevrilir (42, true). Aynı adlı tag'e karşı yerleşikler kazanır.
Şablon dili değil
Bilerek ifade, koşul, döngü, filtre ya da iç içe erişim yok. Metin operatörler tarafından yazılır ve hata ayıklayamadığınız cihazlarda çizilir; gerçek bir şablon motorunun başarısızlık biçimi on bin kişiye {{#if}} diyen bir push'tur. Mantık gerekiyorsa değeri backend'de hesaplayıp tag olarak saklayın ({{greeting}}).
Önizleme
Sihirbazın Önizleme adımı, yazdığınız örnek değerlerle worker'ın kullandığı fonksiyonun tıpkısını (core/personalize.ts) çalıştırır. İçerik adımındaki Değişkenler paneli kitlenizin gerçekten sahip olduğu tag anahtarlarını listeler; yer tutucudaki yazım hatası göndermeden görünür.
API örneği
{
"target": { "externalIds": ["user_123"] },
"content": {
"tr": { "title": "{{firstName|Selam}}, sepetinde {{cartItems}} ürün bekliyor", "body": "Tükenmeden ödemeni tamamla.", "url": "acme://cart?src={{platform}}" },
"_default": "tr"
}
}
iOS'ta { firstName: "Ayşe", cartItems: 3 } tag'li kullanıcı Ayşe, sepetinde 3 ürün bekliyor ve acme://cart?src=ios alır.