Αναφορά Liquid
Το Joryio εξατομικεύει τα μηνύματα με τη Liquid - γράφετε
placeholders όπως {{ user.firstName }} και φίλτρα όπως {{ price | currency }}, και
αυτά επιλύονται ανά παραλήπτη τη στιγμή της αποστολής. Αυτή η σελίδα είναι η πλήρης αναφορά: κάθε
namespace μεταβλητών και κάθε προσαρμοσμένο φίλτρο του Joryio, με παραδείγματα.
Νέοι στη Liquid του Joryio; Ξεκινήστε με τα Πρότυπα Liquid για τα βασικά, και επιστρέψτε εδώ όταν χρειαστείτε τις λεπτομέρειες.
Όλα τα παρακάτω φίλτρα είναι καταχωρημένα σε έναν κοινό μηχανισμό Liquid που χρησιμοποιείται από κάθε διαδρομή απόδοσης, οπότε το ίδιο πρότυπο αποδίδεται πανομοιότυπα σε πρότυπα email, SMS, WhatsApp, push, in-app και webhook - σε καμπάνιες, journeys και προεπισκοπήσεις εξίσου. Ό,τι βλέπετε στην προεπισκόπηση είναι αυτό που στέλνει κάθε κανάλι.
Δύο «συγχωρητικές» προεπιλογές που αξίζει να γνωρίζετε:
- Μια μεταβλητή χωρίς τιμή αποδίδεται ως κενό κείμενο - ποτέ ως σφάλμα.
- Ένα άγνωστο φίλτρο αφήνει την τιμή να περάσει αμετάβλητη αντί να αποτύχει.
Μεταβλητές
Τα διαθέσιμα namespaces, με μια ματιά. Ακολουθήστε τους συνδέσμους για τις πλήρεις λεπτομέρειες καθενός.
| Namespace | Τι περιέχει | Λεπτομέρειες |
|---|---|---|
user.firstName, user.lastName, user.email, user.phone, user.id, user.externalId, user.whatsappName | Τα προεπιλεγμένα γνωρίσματα της επαφής | Μεταβλητές μηνυμάτων |
user.custom.<attribute> | Οποιοδήποτε προσαρμοσμένο γνώρισμα της επαφής (π.χ. user.custom.plan) | Μεταβλητές μηνυμάτων |
trigger.properties.<field> | Πώς μπήκαν στο journey - το συμβάν εισόδου, σταθερό για ολόκληρη την εκτέλεση | Μεταβλητές μηνυμάτων |
event.properties.<field>, event.name | Το τελευταίο πράγμα που έκαναν - το πιο πρόσφατο συμβάν που προώθησε το journey | Μεταβλητές μηνυμάτων |
reply.text, reply.type, reply.profile.name | Φιλικά ψευδώνυμα για την τελευταία εισερχόμενη απάντηση της επαφής σε WhatsApp ή SMS | Μεταβλητές μηνυμάτων |
blocks.<slug> | Ένα επαναχρησιμοποιήσιμο Μπλοκ περιεχομένου, αποδιδόμενο επιτόπου | Μπλοκ περιεχομένου |
unsubscribe_url, preferences_url, resubscribe_url | Σύνδεσμοι συνδρομής ανά παραλήπτη (email, SMS, συνεδρία WhatsApp) | Πρότυπα Liquid |
cart.items, cart.value, cart.subtotal, cart.currency, cart.checkoutUrl | Το συγχρονισμένο καλάθι καταστήματος της επαφής - στοιχεία με name, quantity, price, total, imageUrl, url, sku Το value είναι το σύνολο που έστειλε το κατάστημα (μπορεί να περιλαμβάνει αποστολή)· το subtotal είναι το υποσύνολο των ειδών, πριν από αποστολή και φόρους. | Προϊόντα |
last_order.items, last_order.total, last_order.currency, last_order.placedAt, last_order.orderUrl | Η πιο πρόσφατη παραγγελία τους που δεν ακυρώθηκε ούτε επιστράφηκε - τα ίδια πεδία στοιχείων με το καλάθι | Προϊόντα |
top_products | Τα προϊόντα που παραγγέλνουν πιο συχνά - έως 5 με name, sku, imageUrl, url, timesOrdered, lastOrderedAt, το πιο συχνό πρώτο | Προϊόντα |
Φίλτρα products και entity | Εγγραφές καταλόγου προϊόντων ή προσαρμοσμένης οντότητας από μια αποθηκευμένη Επιλογή | Τροφοδοσίες καταλόγου παρακάτω |
Τα trigger.*, event.* και reply.* επιλύονται μόνο μέσα σε ένα journey· τα υπόλοιπα λειτουργούν
παντού.
Τα cart, last_order και top_products είναι κενά για επαφή χωρίς παραγγελίες στο κατάστημα - τυλίξτε τα σε {% if %}.
Φίλτρα
Αλυσιδώστε φίλτρα με |, περάστε ορίσματα μετά το :. Για παράδειγμα:
{{ user.firstName | capitalize | default: "there" }}
{{ order.total | currency: "EUR" }}
Κείμενο
| Φίλτρο | Τι κάνει | Παράδειγμα → Έξοδος |
|---|---|---|
capitalize | Κεφαλαιοποιεί το πρώτο γράμμα και μετατρέπει τα υπόλοιπα σε πεζά | {{ "mAYA" | capitalize }} → Maya |
uppercase | Μετατρέπει όλη τη συμβολοσειρά σε κεφαλαία | {{ "sale" | uppercase }} → SALE |
lowercase | Μετατρέπει όλη τη συμβολοσειρά σε πεζά | {{ "SALE" | lowercase }} → sale |
truncate | Κόβει μια συμβολοσειρά σε ένα μήκος (προεπιλογή 50) και προσθέτει μια κατάληξη (προεπιλογή ...). Η κατάληξη προστίθεται μετά το κόψιμο, επιπλέον του μήκους | {{ "The quick brown fox jumps" | truncate: 9 }} → The quick... |
strip_html | Αφαιρεί τις ετικέτες HTML | {{ "<b>Sale</b> today" | strip_html }} → Sale today |
url_encode | Κωδικοποιεί μια συμβολοσειρά για URL (για κατασκευή συνδέσμων) | {{ "red shoes" | url_encode }} → red%20shoes |
pluralize | Με δεδομένο έναν αριθμό, επιστρέφει τη λέξη στον ενικό ή στον πληθυντικό. Ο πληθυντικός από προεπιλογή είναι ο ενικός + s· περάστε τρίτο όρισμα για ανώμαλους πληθυντικούς | 3 {{ 3 | pluralize: "item" }} → 3 items |
default | Εφεδρική τιμή όταν η τιμή είναι null, απροσδιόριστη ή κενή συμβολοσειρά | {{ user.firstName | default: "there" }} → there (όταν είναι κενή) |
landing_page_url | Σύνδεσμος σε δημοσιευμένη σελίδα προορισμού με το slug της. Φέρει το διακριτικό του παραλήπτη, ώστε η σελίδα να ξέρει ποιος ήρθε· ένα προαιρετικό όρισμα προσθέτει συμβολοσειρά ερωτήματος. Ο σύνδεσμος χτίζεται πάντα· ένα slug που δεν είναι δημοσιευμένο (ή δεν υπάρχει) απαντά 404 στην ανακατεύθυνση. Κενό μόνο όταν το slug είναι κακοσχηματισμένο ή η απόδοση δεν έχει χώρο εργασίας | {{ "spring-sale" | landing_page_url: "utm_campaign=spring" }} → https://api-eu1.joryio.com/api/p/go/<workspace>/spring-sale?jp=…&utm_campaign=spring |
Αριθμοί και χρήματα
| Φίλτρο | Τι κάνει | Παράδειγμα → Έξοδος |
|---|---|---|
currency | Μορφοποιεί έναν αριθμό ως χρηματικό ποσό. Ο κωδικός νομίσματος από προεπιλογή είναι USD· περάστε οποιονδήποτε κωδικό ISO. Χρησιμοποιεί μορφοποίηση en-US (σύμβολο πρώτα, κόμμα για χιλιάδες) | {{ 1249.5 | currency }} → $1,249.50 · {{ order.total | currency: "EUR" }} → €49.90 |
Ημερομηνίες
| Φίλτρο | Τι κάνει | Παράδειγμα → Έξοδος |
|---|---|---|
date_format | Μορφοποιεί μια ημερομηνία. Στυλ: short (προεπιλογή), long, full. Ένα άγνωστο στυλ επιστρέφει στο short. Αγγλικά (en-US) ονόματα μηνών/ημερών. Μορφοποιεί στη ζώνη ώρας του χώρου εργασίας, στην προεπισκόπηση και στην αποστολή· μια τιμή μόνο ημερομηνίας, όπως γενέθλια (1990-05-01), δεν μετατοπίζεται ποτέ. Δέχεται και μοτίβο strftime ("%d %b %H:%M"), και ένα προαιρετικό δεύτερο όρισμα ορίζει άλλη ζώνη IANA - μια άγνωστη ζώνη επιστρέφει στη ζώνη του χώρου εργασίας | {{ order.createdAt | date_format }} → Jul 12, 2026 · {{ order.createdAt | date_format: "long" }} → July 12, 2026 · "full" → Sunday, July 12, 2026 · {{ order.createdAt | date_format: "%d %b %H:%M", "America/New_York" }} → 12 Jul 05:30 |
add_days | Προσθέτει N ημέρες σε μια ημερομηνία (αρνητικό για αφαίρεση). Επιστρέφει χρονική σήμανση ISO - αλυσιδώστε το date_format για να γίνει αναγνώσιμη | {{ order.createdAt | add_days: 7 | date_format }} → Jul 19, 2026 |
time_ago | Φιλικός σχετικός χρόνος (με λεπτομέρεια έτους/μήνα/εβδομάδας/ημέρας/ώρας/λεπτού/δευτερολέπτου) | {{ user.custom.lastOrderAt | time_ago }} → 3 days ago |
Οι ημερομηνίες και οι ώρες στο περιεχόμενο των μηνυμάτων εμφανίζονται στη ζώνη ώρας του χώρου εργασίας, την ίδια που χρησιμοποιεί η υπόλοιπη εφαρμογή. Ισχύει για το date_format και για το τυπικό φίλτρο date ({{ order.createdAt | date: "%H:%M" }})· δώστε μια ζώνη ως τελευταίο όρισμα για να χρησιμοποιήσετε άλλη.
Πίνακες (arrays)
| Φίλτρο | Τι κάνει | Παράδειγμα → Έξοδος |
|---|---|---|
join | Ενώνει τα στοιχεία ενός πίνακα σε μια συμβολοσειρά. Ο διαχωριστής από προεπιλογή είναι , | {{ names | join }} → Ana, Ben, Gal · {{ names | join: " / " }} → Ana / Ben / Gal |
map | Εξάγει μία ιδιότητα από κάθε στοιχείο, επιστρέφοντας νέο πίνακα | {{ items | map: "name" | join }} → Mug, Tee |
first | Το πρώτο στοιχείο | {{ items | first }} |
last | Το τελευταίο στοιχείο | {{ items | last }} |
size | Το μήκος ενός πίνακα ή μιας συμβολοσειράς (0 για οτιδήποτε άλλο) | {{ cart.items | size }} → 3 |
count | Ο αριθμός των στοιχείων ενός πίνακα (0 αν δεν είναι πίνακας) | {{ cart.items | count }} → 3 |
Συγκεντρωτικά και φιλτράρισμα
Αυτά λειτουργούν σε πίνακες εγγραφών - είδη καλαθιού, παραγγελίες ή Επιλογές καταλόγου. Κάθε
όρισμα field υποστηρίζει διαδρομές με τελείες μέσα σε ένθετα αντικείμενα (π.χ. "price.amount").
| Φίλτρο | Τι κάνει | Παράδειγμα → Έξοδος |
|---|---|---|
sum | Αθροίζει ένα αριθμητικό πεδίο σε όλο τον πίνακα (οι τιμές που λείπουν μετρούν ως 0) | {{ orders | sum: "totalAmount" }} → 540 |
avg | Υπολογίζει τον μέσο όρο ενός αριθμητικού πεδίου (0 για κενό πίνακα) | {{ orders | avg: "totalAmount" }} → 180 |
max | Η μεγαλύτερη αριθμητική τιμή ενός πεδίου (οι μη αριθμητικές τιμές αγνοούνται· 0 αν δεν υπάρχει καμία) | {{ products | max: "price" }} → 129.9 |
min | Η μικρότερη αριθμητική τιμή ενός πεδίου | {{ products | min: "price" }} → 19.9 |
where | Φιλτράρει τον πίνακα. Τρεις μορφές κλήσης: το where: "featured" κρατά τα «αληθή» στοιχεία· το where: "category", "shoes" κρατά τα ίσα στοιχεία· το where: "price", "gt", 100 συγκρίνει με τελεστή: eq, neq, gt, gte, lt, lte, contains, in (λειτουργούν και οι συμβολικές μορφές ==, !=, >, >=, <, <=) | {{ items | where: "category", "shoes" | count }} → 2 |
sort | Ταξινομεί κατά πεδίο, με σειρά asc (προεπιλογή) ή desc. Χωρίς πεδίο, ταξινομεί τις ίδιες τις τιμές | {{ products | sort: "price", "desc" | first }} → το ακριβότερο προϊόν |
Ένα ολοκληρωμένο παράδειγμα - οι τρεις πιο πρόσφατες παραγγελίες του παραλήπτη:
{% assign recent = orders | sort: 'createdAt', 'desc' %}
{% for order in recent limit: 3 %}
- {{ order.createdAt | date_format }}: {{ order.totalAmount | currency }}
{% endfor %}
Total spent: {{ orders | sum: 'totalAmount' | currency }}
Τροφοδοσίες καταλόγου
Δύο φίλτρα φέρνουν συλλογές εγγραφών μέσα σε ένα μήνυμα, το καθένα βασισμένο σε μια αποθηκευμένη
Επιλογή (Selection) με εμβέλεια τον χώρο εργασίας σας. Και τα δύο επιστρέφουν πίνακα - χρησιμοποιήστε τα σε μια ετικέτα assign
και έπειτα κάντε επανάληψη με βρόχο.
products - κατάλογος προϊόντων καταστήματος
Αντλεί από τον συγχρονισμένο κατάλογο προϊόντων σας (Shopify / WooCommerce / Magento) μέσω μιας Επιλογής προϊόντων. Υπάρχει ένας μόνο κατάλογος προϊόντων, οπότε το όρισμα είναι το όνομα της Επιλογής:
{% assign products = 'featured' | products %}
{% for item in products %}
- {{ item.name }}: {{ item.price | currency }}
{% endfor %}
entity - τροφοδοσία προσαρμοσμένης οντότητας
Αντλεί εγγραφές από μια Προσαρμοσμένη οντότητα. Το πρώτο όρισμα είναι το όνομα της οντότητας, το δεύτερο (προαιρετικό) είναι το όνομα της Επιλογής:
{% assign episodes = 'tv_series' | entity: 'latest' %}
{% for item in episodes %}
- {{ item.name }}
{% endfor %}
Μπορείτε να περάσετε μεταβλητές σε μια παραμετροποιημένη Επιλογή οντότητας - για παράδειγμα, να της τροφοδοτήσετε το συμβάν εισόδου του journey:
{% assign items = 'products' | entity: 'product_by_id', trigger %}
Σημειώσεις για τη συμπεριφορά τους:
- Οι Επιλογές που είναι ίδιες για κάθε παραλήπτη (χωρίς φίλτρα γνωρισμάτων χρήστη ή περιβάλλοντος) αποθηκεύονται σε cache - περίπου 5 λεπτά στην προεπισκόπηση του επεξεργαστή, περίπου ένα λεπτό σε μια αποστολή - ώστε οι μαζικές αποστολές να μην ξαναρωτούν ανά παραλήπτη. Οι εξατομικευμένες Επιλογές οντοτήτων αξιολογούνται εκ νέου για κάθε παραλήπτη.
- Αν η Επιλογή οντότητας/προϊόντων δεν βρεθεί (ή το ερώτημα αποτύχει), το φίλτρο επιστρέφει
κενό πίνακα - ο βρόχος
forαπλώς δεν αποδίδει τίποτα, ποτέ σφάλμα. - Και τα τρία φίλτρα (
products,entityκαι το ψευδώνυμοcatalog) εκτελούνται σε κάθε διαδρομή απόδοσης με τα ίδια ονόματα: στην προεπισκόπηση του επεξεργαστή, στις αποστολές καμπανιών, στις αποστολές journeys και σε κάθε worker καναλιού. Ό,τι δείχνει η προεπισκόπηση είναι ό,τι λαμβάνει ο παραλήπτης. - Οι επιλογές Κατάλογος προϊόντων και Προσαρμοσμένη οντότητα του εργαλείου επιλογής εξατομίκευσης χτίζουν
το απόσπασμα
assignγια λογαριασμό σας (δείτε τις Μεταβλητές μηνυμάτων).
catalogΤο παλαιότερο φίλτρο catalog είναι παρωχημένο ψευδώνυμο του entity και εξακολουθεί να λειτουργεί, ώστε τα υπάρχοντα
πρότυπα να μην σπάνε. Προτιμήστε στο εξής το entity για προσαρμοσμένες οντότητες και το products για τον κατάλογο
του καταστήματος.
Προτάσεις
Το recommendations.<slot> είναι ένας πίνακας προτεινόμενων προϊόντων για τον παραλήπτη, από ένα
μοντέλο προτάσεων. Το slot είναι το όνομα του μοντέλου ως κλειδί
(το For you γίνεται for_you)· το recommendations.default είναι το προεπιλεγμένο μοντέλο του workspace. Κάθε στοιχείο
έχει name, price (μορφοποιημένη), compareAtPrice, discountPercent, url, image, description
και id. Λειτουργεί σε κάθε κανάλι - email (καμπάνιες και journeys), SMS, WhatsApp, Viber, push, in-app
και landing pages - καθώς και σε προεπισκοπήσεις του editor και δοκιμαστικές αποστολές:
{% for item in recommendations.for_you limit: 3 %}
{{ item.name }} - {{ item.price }} {{ item.url }}
{% endfor %}
Δείτε τα Liquid slots για την ονομασία των slots και τα πεδία στοιχείων, και τη λίστα αποκλεισμού για προϊόντα που δεν προτείνονται ποτέ.
Πού διαφέρει το Joryio από την τυπική Liquid
Ορισμένα φίλτρα συμπεριφέρονται σκόπιμα διαφορετικά από τα ομώνυμά τους σε Shopify/LiquidJS:
- Το
capitalizeμετατρέπει επίσης σε πεζά το υπόλοιπο της συμβολοσειράς (το"mAYA"γίνεταιMaya, όχιMAYA). - Το
defaultαντιμετωπίζει την κενή συμβολοσειρά ως απούσα, οπότε το{{ user.firstName | default: "there" }}καταφεύγει στην εφεδρική τιμή ακόμη κι όταν το γνώρισμα υπάρχει αλλά είναι κενό. - Το
truncateπροσθέτει την κατάληξη μετά το μήκος κοπής (η τυπική Liquid μετρά τις τελείες μέσα στο μήκος). - Τα
whereκαιsortείναι υπερσύνολα των ενσωματωμένων: δέχονται τις τυπικές μορφές κλήσης και προσθέτουν τελεστές σύγκρισης / κατεύθυνση ταξινόμησης, καθώς και πεδία με διαδρομές τελειών.
Η τυπική Liquid εξακολουθεί να λειτουργεί
Όλα τα παραπάνω χτίζονται πάνω στην τυπική LiquidJS: οι ενσωματωμένες
ετικέτες - {% if %} / {% elsif %} / {% else %}, {% for %}, {% assign %},
{% case %} και οι υπόλοιπες - και τα ενσωματωμένα φίλτρα (upcase, downcase, date,
replace, split, plus, times και πολλά ακόμη) λειτουργούν όλα σε οποιοδήποτε πρότυπο του Joryio.
Όπου ένα φίλτρο του Joryio μοιράζεται όνομα με ένα ενσωματωμένο (capitalize, default, where,
sort, join, map, first, last, size), εκτελείται η έκδοση του Joryio που περιγράφεται σε αυτήν
τη σελίδα. Δείτε την πλήρη λίστα ενσωματωμένων στο
liquidjs.com/filters/overview.html.
Σχετικά
- Πρότυπα Liquid - εισαγωγή και το εργαλείο επιλογής Εξατομίκευσης
- Μεταβλητές μηνυμάτων - τα
trigger.*,event.*καιreply.*στα journeys - Μπλοκ περιεχομένου - επαναχρησιμοποιήσιμα αποσπάσματα μέσω
blocks.slug - Προτάσεις προϊόντων - μοντέλα, τύποι και τα slots
recommendations.*