Ana içeriğe atla
Liquid, OneSignal tarafından e-posta, push, SMS, uygulama içi ve Live Activities dahil olmak üzere kanallar genelinde mesajları kişiselleştirmek için desteklenen bir şablonlama dilidir. Mesaj içeriğini dinamik olarak özelleştirmek için etiketler, filtreler ve koşullar kullanır. Liquid söz dizimi hakkında daha fazla bilgi edinmek için resmi Liquid belgelerine bakın.

Mesaj türüne göre desteklenen alanlar

  • E-posta
  • Push
  • SMS
  • Uygulama İçi Mesajlar
  • Live Activities
  • Konu, Yanıtla ve Ön başlık
  • Mesaj Gövdesi
  • HTML bloklarında görüntü değiştirme. Örnek: <img src="{{image_url}}"/>
  • URL’ler, Mail to ve diğer alanlar gibi Düğme bloğu eylemleri.

Temel söz dizimi

Liquid iki ana söz dizimi yapısı kullanır:
  1. Çıktı Etiketleri: {{ ... }} - Bir değişken veya nesneden veriyi görüntüler.
  2. Mantık Etiketleri: {% ... %} - Koşullu ifadeleri veya döngüleri yürütür.

Veri kaynakları

KaynakÖrnekAçıklama
Etiket{{ first_name }}OneSignal SDK veya API (tags)
Özellik{{ subscription.email }}Sistem tarafından yönetilen (e-posta, external_id, dil, vb.)
Journey Adı{{ journey.name }}Sistem tarafından yönetilen
Özel Veri{{ message.custom_data.key }}Create Message API’de iletilen custom_data
Data Feeds{{ data_feed.cart.size }}Data Feeds, gönderim zamanında API’lerinizden doğrudan mesajlara gerçek zamanlı veri çekmenizi sağlar.
Özel Olaylar{{ journey.last_event.name }}Event Triggered Journeys, Wait Until düğümleri aracılığıyla ayarlanır

Koşullar

Operatörler

  • ==, !=, >, <, >=, <=
  • and, or
  • contains (string veya dizi)
İşlemler sağdan sola çalışır. Parantezler desteklenmez.
liquid
{% if true or false and false %}
  This is true.
{% endif %}

if, elsif, else

liquid
{%- assign userLang = subscription.language -%}
{% if userLang == "es" -%}
Hola {{ first_name }}!
{%- elsif userLang == "fr" -%}
Bonjour {{ first_name }}!
{%- else -%}
Hello {{ first_name }}!
{%- endif %}

unless

liquid
{% unless level == "1" %}
  Great job getting past the first level!
{% endunless %}

Filtreler

Verilerin nasıl görüntüleneceğini ayarlamak için {{ variable | filter }} kullanarak filtreler uygulayın.

default

Özellik boşsa veya mevcut değilse varsayılan bir değer atayın.
liquid
Hello {{ first_name | default: "there" }}.

date

Tarih filtresi bir zaman damgasını başka bir tarih formatına dönüştürür. Bu söz diziminin formatı strftime ile aynıdır. Giriş, Ruby’nin Time.parse ile aynı formatı kullanır. Tarihleri etiketlerle saniye cinsinden unix zaman damgası olarak ayarlayın. Bu, hem liquid söz dizimi kişiselleştirmesinin hem de Time Operators ile segmentasyonun kullanılmasına izin verir. Örneğin, bir etiket şöyle görünebilir: bill_due : 1687968776
liquid
{{ bill_due | date: "%a, %b %d, %y" }}
{{ "now" | date: "%Y-%m-%d %H:%M" }}

Result
Wed, Jun 28, 23
liquid
{{ bill_due | date: "%Y" }}
Result
2023
Tarih biçimlendirme, iyi biçimlendirilmiş tarihler içeriyorsa string’ler üzerinde çalışır.
liquid
{{ "March 14, 2016" | date: "%b %d, %y" }}
Result
Mar 14, 16
Geçerli zamanı almak için tarih filtresiyle birlikte özel now (veya today) kelimesini iletin.
liquid
This message was sent at {{ "now" | date: "%Y-%m-%d %H:%M" }}.
Result
This message was sent at 2022-11-02 14:39.
Geçerli zaman, mesajın alıcıya gönderildiği zamana göre mesajda render edilecektir. Mesajı test ediyorsanız, test mesajının gönderildiği zamanı geçerli zaman olarak göreceksiniz.

capitalize

Bu filtre, bir string’in ilk karakterini büyük harf yapar ve kalan karakterleri küçük harfe dönüştürür.
liquid
{{ "my GREAT title" | capitalize }}
Result
My great title

round

Bu filtre bir sayıyı en yakın tam sayıya veya bir sayı argüman olarak iletilirse o sayıdaki ondalık basamak sayısına yuvarlar.
liquid
{{ 1.2 | round }}
  {{ 2.7 | round }}
{{ 183.357 | round: 2 }}
Result
1
3
183.36

pluralize

Bu filtre, verilen bir sayıya göre bir string’in tekil veya çoğul formunu döndürür. Sayı tam sayı olmalı ve string olarak sağlanabilir. Bir string’in hem tekil hem de çoğul formları sağlanmalıdır.
liquid
{{ 1 | pluralize: "singular", "plural" }}
{{ 2 | pluralize: "singular", "plural" }}
1 {{ 1 | pluralize: "person", "people" }}
2 {{ 2 | pluralize: "person", "people" }}
2 {{ "2" | pluralize: "person", "people" }}
Result
singular
plural
1 person
2 people
2 people

Yineleme

for döngüleri

Bir kod bloğunu tekrar tekrar yürütür. Bir for döngüsü içinde kullanılabilen özelliklerin tam listesi için for döngü nesnesine bakın.
liquid
{% for product in message.custom_data.products %}
  - {{ product.name }}
  {% else %}
    Sorry, we're sold out of all products.
  {% endfor %}
Request Body
{
  "app_id": "5eb5a37e-b458-11e3-ac11-000c2940e62c",
    "template_id": "be4a8044-bbd6-11e4-a581-000c2940e62c",
    "custom_data": {
      "products": [
        { "name": "Sweater" },
        { "name": "Hat" },
        { "name": "Shirt" }
      ]
    }
  }
Results
  - Sweater
  - Hat
  - Shirt

  // if message.custom_data.products is empty
  Sorry we're sold out of all products
Güçlü ve esnek olmasına rağmen, liquid söz diziminde for döngülerinin kullanımı bazı nadir durumlarda zayıf bildirim teslimat performansına yol açabilir. for döngülerinin kullanımına dikkat edin. Ayrıca birkaç Push Kanal alanında for döngülerinin kullanımını engellediğimizi unutmayın: contents, headings, subtitle, apns_alert ve url

limit & offset

Döngüyü belirtilen sayıda yineleme ile sınırlar. Örneğin, bir mesajda yalnızca 4 ürün göstermek istiyorsanız, gösterilen ürün sayısını belirlemek için Limits ve Offsets kullanabilirsiniz.
Data
great_numbers = [1,2,3,4,5,5]
liquid
{% for number in great_numbers limit:2 %}
  {{ number }}
{% endfor %}
Result
1 2
Döngüyü belirtilen dizinde başlatmak için bir offset değeri ekleyin:
Data
great_numbers = [1,2,3,4,5,5]
liquid
{% for number in great_numbers limit: 3 %}
  {{ number }}
{% endfor %}

{% for number in great_numbers limit: 3 offset: 3 %}
  {{ number }}
{% endfor %}
```text Result
1 2 3
4 5 6

where

Yalnızca belirli bir özellik değerine sahip nesneleri içeren bir dizi oluşturur veya varsayılan olarak herhangi bir doğru değer. Bu örnekte, bir ürün listeniz olduğunu ve mutfak ürünlerinizi ayrı olarak göstermek istediğinizi varsayalım. where kullanarak, yalnızca kitchen type’ına sahip ürünleri içeren bir dizi oluşturabilirsiniz.
Data
products = [
  {name:"Vacuum", type:"electronics"},
  {name:"Spatula", type:"kitchen"},
  {name:"Television", type:"electronics"},
  {name:"Garlic press", type:"kitchen"}
]
liquid
All products:
{% for product in products %}
- {{ product.name }}
{% endfor %}

{% assign kitchen_products = products | where: "type", "kitchen" %}

Kitchen products:
{% for product in kitchen_products %}
- {{ product.name }}
{% endfor %}
Result
All products:
  - Vacuum
  - Spatula
  - Television
  - Garlic press

Kitchen products:
- Spatula
- Garlic press

String Manipülasyonu

Bazen, doğrudan kullanıcılarınıza gösterilmeye uygun olmayan bir formatta string’ler içeren veri etiketleriniz olabilir ve formatı ayarlamak için string’i manipüle etmeniz gerekebilir. Aşağıda, string’leri ayarlamak için kullanılabilecek liquid söz dizimi komutlarının bir tablosu bulunmaktadır. String manipülasyonunu hem Etiketler üzerinde hem de doğrudan mesaja yazılan string’ler üzerinde kullanabilirsiniz.
KomutAçıklamaÖrnekÖrnek Çıktı
replaceBir alt string’i başka bir string ile değiştirir.{{ 'hello world' | replace: 'world', 'there' }}hello there
capitalizeBir string’in ilk harfini büyük harf yapar.{{ 'hello' | capitalize }}Hello
upcaseBir string’i büyük harfe dönüştürür.{{ 'hello' | upcase }}HELLO
downcaseBir string’i küçük harfe dönüştürür.{{ 'HELLO' | downcase }}hello
stripBir string’den baştaki ve sondaki boşlukları kaldırır.{{ ' hello ' | strip }}hello
strip_htmlBir string’den tüm HTML etiketlerini kaldırır.{{ '<p>hello</p>' | strip_html }}hello
truncateBir string’i belirtilen uzunlukta kısaltır, gerekirse üç nokta (…) ekler.{{ 'This is a long sentence' | truncate: 10 }}This is a…
truncatewordsBelirli sayıda kelimeden sonra bir string’i keser.{{ 'This is a long sentence' | truncatewords: 2 }}This is…
replace_firstBir alt string’in ilk oluşumunu değiştirir.{{ 'hello world' | replace_first: 'world', 'there' }}hello there
prependBaşka bir string’in başına bir string ekler.{{ 'world' | prepend: 'hello ' }}hello world
appendBaşka bir string’in sonuna bir string ekler.{{ 'hello' | append: ' world' }}hello world
lstripBir string’den baştaki boşlukları kaldırır.{{ ' hello' | lstrip }}hello
rstripBir string’den sondaki boşlukları kaldırır.{{ 'hello ' | rstrip }}hello

SSS

Değiştirme neden çalışmıyor?

  • Uygulama İçi Mesajlar özellik değiştirmeyi desteklemez.
  • “Send Test Message” kullanılırken etiket değiştirme çalışmaz.
  • Etiket anahtarları alfasayısal olmalı veya _ ve - kullanmalıdır (nokta veya boşluk yok).
  • Değiştirme önizleme modunda görünmez — test etmek için gerçek bir mesaj gönderin.

Boşluk ve yeni satırlar nasıl kontrol edilir?

Çevredeki boşlukları kırpmak için tire kullanın: {{- ... -}}, {%- ... -%}. Daha fazla ayrıntı için Boşluk kontrolü’ne bakın.

Kullanıcı tarafından oluşturulan içerik nasıl işlenir?

Liquid ayrıştırmasını önlemek için kullanıcı tarafından oluşturulan metni {% raw %} ve {% endraw %} içine sarın. “raw” söz dizimi’ne bakın.
json
{
  "contents": {
    "en": "{% raw %} Your user-generated content with invalid characters like {{ {% endraw %}"
  }
}