Ειδοποιήσεις σχέσεων οντοτήτων
Οι ειδοποιήσεις σχέσεων είναι η γενικευμένη εκδοχή του e-commerce εναύσματος επιστροφής σε απόθεμα, αλλά για οποιαδήποτε προσαρμοσμένη οντότητα - θέσεις, πτήσεις, μαθήματα, παραστάσεις, ραντεβού, απόθεμα B2B. Η ιδέα είναι απλή:
Όταν μια εγγραφή σε έναν κατάλογο αλλάζει, ειδοποίησε κάθε επαφή που είναι συνδεδεμένη με αυτήν την εγγραφή μέσω μιας δεύτερης, σχετιζόμενης οντότητας.
Δηλώνετε μια γονική οντότητα - τον κατάλογο του οποίου οι εγγραφές αλλάζουν (π.χ.
concert_tickets ή series) - και επιλέγετε πώς βρίσκεται το κοινό: είτε μια
σχετιζόμενη λίστα εγγεγραμμένων (μια οντότητα λίστας αναμονής / «ακολούθησης») είτε τα άτομα που εκτέλεσαν ένα
σχετικό συμβάν (παρακολούθησαν / είδαν). Δείτε παρακάτω το Δύο τρόποι ορισμού του κοινού.
Όταν το παρακολουθούμενο πεδίο μιας γονικής εγγραφής κάνει μετάβαση, το Joryio επιλύει αυτό το κοινό και εκπέμπει ένα συμβάν ανά χρήστη που μπορείτε να χρησιμοποιήσετε ως έναυσμα εισόδου σε journey ή καμπάνια - με αποφυγή διπλοτύπων ανά άτομο, ώστε οι ασταθείς τιμές να μην μπορούν να βομβαρδίσουν κανέναν.
Γιατί δύο οντότητες;
Η ενσωματωμένη λειτουργία επιστροφής προϊόντος σε απόθεμα είναι υπόθεση ενός κλικ επειδή ο κατάλογος προϊόντων έχει γνωστή μορφή (ένα πεδίο αποθέματος, μια λίστα εγγεγραμμένων). Οι προσαρμοσμένες οντότητες είναι ελεύθερης μορφής - το Joryio δεν μπορεί να μαντέψει ποιο πεδίο σημαίνει «διαθέσιμο» ή ποια οντότητα κρατά τη λίστα αναμονής - οπότε το δηλώνετε μία φορά στις ρυθμίσεις της γονικής οντότητας.
Για τα περισσότερα καταστήματα e-commerce, ο κατάλογος προϊόντων παραμένει ο εύκολος δρόμος. Καταφύγετε στις ειδοποιήσεις σχέσεων όταν ο κατάλογός σας δεν είναι προϊόντα, ή όταν το κοινό είναι μια ρητή λίστα και όχι συναγόμενη πρόθεση περιήγησης.
Δύο τρόποι ορισμού του κοινού
Πριν από τη ρύθμιση, η βασική επιλογή - ποιος ειδοποιείται:
- Συμπεριφορικό (
audienceSource: "event") - τα άτομα που εκτέλεσαν ένα συμβάν πρόθεσης (π.χ.Watched Episode,Viewed Flight) που αναφέρεται στην εγγραφή, μέσα σε ένα παράθυρο αναδρομής. Καμία εγγραφή ακολούθησης/λίστας αναμονής προς συντήρηση - το κοινό είναι η συμπεριφορά. Αντικατοπτρίζει τον τρόπο με τον οποίο η επιστροφή προϊόντος σε απόθεμα χτίζει το κοινό της από συμβάντα περιήγησης. Ιδανικό για «ειδοποίησε όλους όσους παρακολούθησαν / είδαν». - Ρητό (
audienceSource: "child_entity", προεπιλογή) - οι γραμμές μιας σχετιζόμενης οντότητας εγγραφής (μια λίστα αναμονής «ειδοποίησέ με», μια λίστα «ακολούθησε αυτήν την παράσταση»). Ιδανικό όταν τα άτομα εγγράφονται σκόπιμα, ανεξάρτητα από οποιαδήποτε συμπεριφορά.
Δεν χρειάζεστε οντότητα ακολούθησης για την περίπτωση VOD - δείτε το Παράδειγμα 2.
Το «Ειδοποίησέ με» ως συμβάν έναντι οντότητας λίστας αναμονής
Μια συχνή ερώτηση: αν ένα πάτημα στο «Ειδοποίησέ με» εκπέμπει ένα συμβάν (Notify Me με ένα
product_id), χρειάζεστε ακόμη οντότητα λίστας αναμονής; Συνήθως όχι - στρέψτε τη λειτουργία συμβάντος
σε αυτό (intentEvent: "Notify Me", intentRefProperty: "product_id") και
τελειώσατε.
Το μόνο πράγμα που σας γυρίζει πίσω σε μια θυγατρική οντότητα είναι η ανθεκτικότητα. Ένα κοινό βασισμένο σε συμβάντα οριοθετείται από δύο πράγματα:
- την αναδρομή (
intentLookbackDays), και - τη διατήρηση συμβάντων - το TTL διατήρησης δεδομένων του χώρου εργασίας σας διαγράφει τελικά το συμβάν, και όταν χαθεί, η λειτουργία συμβάντος δεν μπορεί πλέον να το δει.
Ο χρόνος επαναφοράς αποθέματος είναι απροσδιόριστος - ένα είδος μπορεί να επιστρέψει την επόμενη εβδομάδα ή σε οκτώ μήνες. Αν το συμβάν «ειδοποίησέ με» έχει «γεράσει» μέχρι τη στιγμή της επαναφοράς, η λειτουργία συμβάντος χάνει αυτό το άτομο· μια γραμμή λίστας αναμονής επιμένει μέχρι να την καθαρίσετε. Άρα:
- Σύντομος, προβλέψιμος ορίζοντας (νέα επεισόδια, γρήγορες επαναφορές) → λειτουργία συμβάντος, χωρίς οντότητα.
- Απροσδιόριστος ορίζοντας, ή θέλετε μια διαχειρίσιμη λίστα «ειδοποίησε μία φορά και μετά αφαίρεσε» → θυγατρική οντότητα λίστας αναμονής.
Ρύθμιση
Ορίστε το relationshipAlert στις ρυθμίσεις της γονικής οντότητας:
| Πεδίο | Σημασία | Παράδειγμα |
|---|---|---|
enabled | Ενεργοποιεί την ειδοποίηση | true |
triggerMode | Τι μετρά ως ενεργοποίηση στο field (δείτε παρακάτω) | "restock" |
field | Το γονικό πεδίο του οποίου η μετάβαση ενεργοποιεί την ειδοποίηση | "available" |
eventName | Το συμβάν ανά χρήστη που θα εκπέμπεται | "back_in_stock" |
cooldownDays | Παράθυρο καταστολής ανά (άτομο, εγγραφή) (προεπιλογή 7) | 7 |
audienceSource | "child_entity" (προεπιλογή) ή "event" | "event" |
childEntity | (λειτουργία θυγατρικής) εσωτερικό όνομα της οντότητας λίστας αναμονής/ακολουθήσεων | "ticket_waitlist" |
childRefField | (λειτουργία θυγατρικής) πεδίο στις θυγατρικές γραμμές που κρατά το id της γονικής εγγραφής | "ticketId" |
intentEvent | (λειτουργία συμβάντος) το συμβάν πρόθεσης του οποίου το κοινό θα ειδοποιηθεί | "Watched Episode" |
intentRefProperty | (λειτουργία συμβάντος) ιδιότητα συμβάντος που κρατά το id της γονικής εγγραφής | "series_id" |
intentLookbackDays | (λειτουργία συμβάντος) πόσο πίσω να κοιτάζει (προεπιλογή 90) | 90 |
Λειτουργίες εναύσματος
restock- ένας αριθμός πηγαίνει από ≤ 0 σε > 0 (επιστροφή σε απόθεμα). Προεπιλογή.increase- ένας αριθμός αυξάνεται (π.χ. ένας μετρητής επεισοδίων 8 → 9).changed- μια τιμή αλλάζει σε νέα, μη κενή τιμή (π.χ. ένα id «τελευταίου επεισοδίου»).
Στη λειτουργία θυγατρικής οντότητας, η θυγατρική οντότητα πρέπει να δηλώνει ένα User Link (ποιο
πεδίο αντιστοιχίζεται σε επαφή, μέσω user id / external id / email / τηλεφώνου / γνωρίσματος) -
έτσι κάθε γραμμή επιλύεται σε ένα άτομο. Στη λειτουργία συμβάντος, το user_id του συμβάντος πρόθεσης
είναι η επαφή. Μια προηγούμενη άγνωστη τιμή δεν ενεργοποιεί ποτέ (για τις αριθμητικές
λειτουργίες), ώστε οι πρώτες συμπληρώσεις να μην προκαλούν ψευδείς ειδοποιήσεις.
Παράδειγμα 1 - Εισιτήρια συναυλίας ξανά σε διαθεσιμότητα
Στόχος: μια παράσταση εξαντλείται· όταν κυκλοφορήσουν ξανά εισιτήρια, ειδοποιήστε όλους όσοι ζήτησαν να ενημερωθούν.
-
Γονική οντότητα
concert_ticketsμε ένα αριθμητικό πεδίοavailable. -
Θυγατρική οντότητα
ticket_waitlistμε πεδίαticketId(η παράσταση/εγγραφή που αναφέρει) καιemail. Ορίστε το User Link της στοemail. -
Στην
concert_tickets, ορίστε:{
"relationshipAlert": {
"enabled": true,
"triggerMode": "restock",
"field": "available",
"childEntity": "ticket_waitlist",
"childRefField": "ticketId",
"eventName": "back_in_stock",
"cooldownDays": 30
}
} -
Όταν κάποιος πατά «Ειδοποίησέ με», η εφαρμογή/ο ιστότοπός σας προσθέτει μια γραμμή στην
ticket_waitlist:{ ticketId: "SHOW-A", email: "fan@example.com" }. -
Όταν το
availableτηςconcert_tickets/SHOW-Aπάει0 → 50, το Joryio εκπέμπει ένα συμβάνback_in_stockγια κάθε επαφή στη λίστα αναμονής.
Χτίστε ένα journey ενός βήματος (ή μια καμπάνια με έναυσμα) που εισάγεται μέσω του back_in_stock.
Εξατομικεύστε το με τα πεδία της ίδιας της εγγραφής, τα οποία ταξιδεύουν μαζί με το συμβάν:
{{ event.name }} tickets are back! Grab yours before they sell out again.
Το συμβάν μεταφέρει επίσης τα event.record_id, event.new_value (το νέο απόθεμα) και
κάθε βαθμωτό πεδίο της εγγραφής.
Παράδειγμα 2 - Νέο επεισόδιο μιας σειράς που κάποιος παρακολουθεί (VOD / τύπου Netflix)
Στόχος: όταν βγαίνει νέο επεισόδιο μιας σειράς, ενημερώστε όλους όσοι παρακολουθούν αυτήν τη σειρά.
Χρειάζομαι οντότητα «ακολουθήσεων», ή μπορώ απλώς να χρησιμοποιήσω ένα συμβάν παρακολούθησης; Μπορείτε να χρησιμοποιήσετε
το συμβάν παρακολούθησης - και για το VOD αυτή είναι η φυσική επιλογή. Ήδη εκπέμπετε ένα
συμβάν Watched Episode (ή watch_series) όταν κάποιος παίζει ένα επεισόδιο· στρέψτε
την ειδοποίηση σε αυτό το συμβάν και το Joryio ειδοποιεί όλους όσοι παρακολούθησαν πρόσφατα
τη σειρά. Καμία εγγραφή ακολούθησης προς δημιουργία ή συντήρηση. Χρησιμοποιήστε οντότητα ακολουθήσεων μόνο
αν θέλετε μια ρητή λίστα «ακολούθησε αυτήν την παράσταση» με συνειδητή εγγραφή, ξεχωριστή από την
παρακολούθηση.
Είναι το ίδιο με την επαναφορά αποθέματος ή διαφορετικό; Η πλευρά του κοινού εδώ χρησιμοποιεί
συμπεριφορά αντί για λίστα αναμονής (αυτή είναι η επιλογή audienceSource: "event"),
και το έναυσμα διαφέρει επίσης: ένα νέο επεισόδιο δεν είναι αλλαγή αποθέματος 0 → >0,
είναι ένας μετρητής επεισοδίων που ανεβαίνει (ή ένα id «τελευταίου επεισοδίου» που αλλάζει). Ίδιος
μηχανισμός, δύο διαφορετικές ρυθμίσεις.
Τι χρειάζεστε - μόνο μία οντότητα:
-
Γονική οντότητα
seriesμε:- ένα πεδίο εμφάνισης όπως
title, - ένα αριθμητικό πεδίο
episodeCount(ή μια συμβολοσειράlatestEpisodeId). - Καμία θυγατρική οντότητα.
- ένα πεδίο εμφάνισης όπως
-
Στη
series, ορίστε:{
"relationshipAlert": {
"enabled": true,
"triggerMode": "increase",
"field": "episodeCount",
"audienceSource": "event",
"intentEvent": "Watched Episode",
"intentRefProperty": "series_id",
"intentLookbackDays": 90,
"eventName": "new_episode",
"cooldownDays": 1
}
}(Προτιμήστε
"triggerMode": "changed"με"field": "latestEpisodeId"αν παρακολουθείτε το νεότερο επεισόδιο με id αντί για τρέχοντα μετρητή.) -
Η σύνδεση είναι η ιδιότητα του συμβάντος. Το player σας στέλνει ήδη, σε κάθε αναπαραγωγή, κάτι σαν:
{ "event": "Watched Episode", "series_id": "S-42", "episode": 12 }Το
intentRefProperty: "series_id"είναι αυτό που συνδέει μια παρακολούθηση με την εγγραφήseries- πρέπει να ταιριάζει με το id ή την τιμή πρωτεύοντος κλειδιού της εγγραφής (
S-42).
- πρέπει να ταιριάζει με το id ή την τιμή πρωτεύοντος κλειδιού της εγγραφής (
-
Πώς ενεργοποιείται: όταν η εισαγωγή καταλόγου σας ανεβάσει το
episodeCountτηςseries/S-428 → 9(μια κανονική ενημέρωση εγγραφής), το Joryio ρωτά ποιοι εκτέλεσανWatched Episodeμεseries_id = S-42τις τελευταίες 90 ημέρες και εκπέμπει ένα συμβάνnew_episodeγια καθέναν από αυτούς. -
Χτίστε ένα journey/καμπάνια που εισάγεται μέσω του
new_episode:New episode of {{ event.name }} is out now. Pick up where you left off →
Αν προτιμάτε ρητή λίστα ακολούθησης αντί για συμπεριφορά παρακολούθησης, κρατήστε το
triggerMode: "increase" αλλά χρησιμοποιήστε το κοινό θυγατρικής οντότητας: προσθέστε μια
οντότητα series_follows (seriesId, userId, User Link → userId), ορίστε
audienceSource: "child_entity", childEntity: "series_follows",
childRefField: "seriesId", και προσθέτετε μια γραμμή ακολούθησης όταν κάποιος πατά Follow.
Επαναφορά αποθέματος έναντι νέου επεισοδίου με μια ματιά
| Επαναφορά εισιτηρίων συναυλίας | Νέο επεισόδιο (VOD) | |
|---|---|---|
| Απαιτούμενες οντότητες | γονική + θυγατρική λίστα αναμονής | μόνο η γονική |
| Κοινό | γραμμές ticket_waitlist (ρητή εγγραφή) | συμβάν Watched Episode (συμπεριφορά) |
audienceSource | child_entity | event |
| Παρακολουθούμενο πεδίο | available (απόθεμα) | episodeCount / latestEpisodeId |
triggerMode | restock (0 → >0) | increase / changed |
| Εκπεμπόμενο συμβάν | back_in_stock | new_episode |
Εξαίρεση ατόμων που έχουν ήδη ενεργήσει
Αν στέλνετε κάποιο διάστημα μετά την κυκλοφορία, μάλλον δεν θέλετε να «σκουντήξετε» άτομα που έχουν ήδη δει το νέο επεισόδιο (ή έχουν ήδη αγοράσει το είδος που επανήλθε σε απόθεμα). Υπάρχουν δύο επίπεδα, και συχνά θα χρησιμοποιήσετε και τα δύο:
1. Παραλείψτε τους τη στιγμή της ενεργοποίησης - excludeEvent
Η ειδοποίηση μπορεί να αφαιρέσει από το κοινό οποιονδήποτε έχει ήδη εκτελέσει ένα συμβάν για τη νέα τιμή αυτής της μετάβασης. Για το παράδειγμα VOD, προσθέστε στη ρύθμιση:
{
"excludeEvent": "Watched Episode",
"excludeRefProperty": "series_id",
"excludeValueProperty": "episode",
"excludeLookbackDays": 30
}
Τώρα, όταν βγαίνει το επεισόδιο 9, το Joryio ειδοποιεί τα άτομα που παρακολούθησαν τη σειρά αλλά
αφαιρεί οποιονδήποτε είδε ήδη το επεισόδιο 9 (series_id = αυτή η σειρά
και episode = η νέα τιμή). Το excludeValueProperty είναι αυτό που το «καρφώνει» στο
συγκεκριμένο νέο επεισόδιο - για να ευθυγραμμιστεί αυτό, η νέα τιμή του πεδίου πρέπει να ταιριάζει με
το id που μεταφέρει το συμβάν παρακολούθησής σας (αυτό είναι πιο καθαρό με triggerMode: "changed"
latestEpisodeId, ή όταν οι αριθμοί επεισοδίων ισούνται με τον μετρητή). Λειτουργεί και για την επαναφορά αποθέματος - ορίστε τοexcludeEventστο συμβάν αγοράς σας για να παραλείψετε τους πρόσφατους αγοραστές.
2. Επανέλεγχος τη στιγμή της αποστολής - η ακριβής απάντηση για καθυστερημένες αποστολές
Η εξαίρεση τη στιγμή της ενεργοποίησης γνωρίζει μόνο ποιος παρακολούθησε μέχρι τη στιγμή που ενεργοποιείται η ειδοποίηση. Αν σκόπιμα περιμένετε 2 ημέρες πριν στείλετε, κάποιοι θα παρακολουθήσουν μέσα σε αυτές τις δύο ημέρες - και μόνο ένας έλεγχος τη στιγμή της αποστολής μπορεί να τους πιάσει. Κάντε το μέσα στο journey:
- Έναυσμα εισόδου:
new_episode. - Αναμονή 2 ημερών.
- Συνθήκη / διακλάδωση συμπεριφοράς: ΔΕΝ έχει εκτελέσει
Watched Episodeόπουepisode={{ trigger.new_value }}τις τελευταίες 2 ημέρες → μόνο αυτός ο κλάδος συνεχίζει προς την αποστολή.
Αυτό επαναξιολογεί κάθε άτομο τη στιγμή ακριβώς πριν από την αποστολή, οπότε όποιος πρόλαβε
στη διάρκεια της αναμονής φιλτράρεται. Χρησιμοποιήστε το excludeEvent (επίπεδο 1) για να κρατήσετε το αρχικό
κοινό σφιχτό, και τη συνθήκη του journey (επίπεδο 2) για να κάνετε μια καθυστερημένη αποστολή ακριβή.
Χρήση του συμβάντος ειδοποίησης
Όπως και να το ονομάσετε, το eventName συμπεριφέρεται όπως κάθε άλλο συμβάν στο Joryio:
- Εμφανίζεται στο εργαλείο επιλογής συμβάντων ως έναυσμα εισόδου journey/καμπάνιας.
- Οι ιδιότητές του (
record_id,new_value,field, μαζί με τα βαθμωτά πεδία της εγγραφής και μια ετικέταname) είναι διαθέσιμες ωςevent.*στη Liquid. - Οι αποστολές εξακολουθούν να τηρούν τη συγκατάθεση, τον αποκλεισμό και τις ώρες ησυχίας, όπως κάθε άλλη αποστολή καναλιού.
Πώς ενεργοποιείται (κάτω από το καπό)
Η μετάβαση εντοπίζεται στη διαδρομή ενημέρωσης της οντότητας και η διανομή γίνεται εκτός του
κρίσιμου μονοπατιού, ώστε ένα αργό κοινό να μην μπλοκάρει ποτέ την εγγραφή. Οι ειδοποιήσεις
αποδιπλοτυπώνονται ανά (επαφή, εγγραφή) για cooldownDays, και μια θυγατρική γραμμή μετρά
μόνο μία φορά ακόμη κι αν πολλές γραμμές επιλύονται στην ίδια επαφή.
Μαζικές εισαγωγές
Οι μαζικές εισαγωγές εγγραφών δεν ενεργοποιούν ειδοποιήσεις από προεπιλογή - ώστε μια πρώτη φόρτωση να μην
ξεσηκώσει ποτέ τους πάντες. Ενεργοποιήστε το ανά εισαγωγή στέλνοντας triggerAlerts: true στο endpoint
μαζικής εισαγωγής. Όταν είναι ενεργοποιημένο και η οντότητα έχει επιχειρησιακό πρωτεύον κλειδί, η εισαγωγή
κάνει upsert-και-diff: οι εγγραφές που υπάρχουν ήδη ενημερώνονται και οι μεταβάσεις τους
ενεργοποιούνται (π.χ. μια νυχτερινή τροφοδοσία αποθέματος ή episodeCount), ενώ οι ολοκαίνουριες γραμμές ενεργοποιούν μόνο
ειδοποιήσεις λειτουργίας changed (οι αριθμητικές λειτουργίες χρειάζονται προηγούμενη τιμή για να κάνουν μετάβαση).
Ξεκινώντας τη ρύθμιση
Μπορείτε να συνδέσετε τις δύο οντότητες και τη ρύθμιση relationshipAlert με το χέρι σήμερα.
Ο AI assistant θα μπορεί επίσης να στήσει ολόκληρη
τη δομή - να δημιουργήσει τη θυγατρική οντότητα ακολουθήσεων/λίστας αναμονής, να ορίσει τη ρύθμιση και να χτίσει
το journey ειδοποίησης - από ένα και μόνο αίτημα.