Μετάβαση στο κύριο περιεχόμενο

Αναφορά 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.

Σχετικά​