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

Ειδοποιήσεις σχέσεων οντοτήτων

Οι ειδοποιήσεις σχέσεων είναι η γενικευμένη εκδοχή του 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 - Εισιτήρια συναυλίας ξανά σε διαθεσιμότητα

Στόχος: μια παράσταση εξαντλείται· όταν κυκλοφορήσουν ξανά εισιτήρια, ειδοποιήστε όλους όσοι ζήτησαν να ενημερωθούν.

  1. Γονική οντότητα concert_tickets με ένα αριθμητικό πεδίο available.

  2. Θυγατρική οντότητα ticket_waitlist με πεδία ticketId (η παράσταση/εγγραφή που αναφέρει) και email. Ορίστε το User Link της στο email.

  3. Στην concert_tickets, ορίστε:

    {
    "relationshipAlert": {
    "enabled": true,
    "triggerMode": "restock",
    "field": "available",
    "childEntity": "ticket_waitlist",
    "childRefField": "ticketId",
    "eventName": "back_in_stock",
    "cooldownDays": 30
    }
    }
  4. Όταν κάποιος πατά «Ειδοποίησέ με», η εφαρμογή/ο ιστότοπός σας προσθέτει μια γραμμή στην ticket_waitlist: { ticketId: "SHOW-A", email: "fan@example.com" }.

  5. Όταν το 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 Episodewatch_series) όταν κάποιος παίζει ένα επεισόδιο· στρέψτε την ειδοποίηση σε αυτό το συμβάν και το Joryio ειδοποιεί όλους όσοι παρακολούθησαν πρόσφατα τη σειρά. Καμία εγγραφή ακολούθησης προς δημιουργία ή συντήρηση. Χρησιμοποιήστε οντότητα ακολουθήσεων μόνο αν θέλετε μια ρητή λίστα «ακολούθησε αυτήν την παράσταση» με συνειδητή εγγραφή, ξεχωριστή από την παρακολούθηση.

Είναι το ίδιο με την επαναφορά αποθέματος ή διαφορετικό; Η πλευρά του κοινού εδώ χρησιμοποιεί συμπεριφορά αντί για λίστα αναμονής (αυτή είναι η επιλογή audienceSource: "event"), και το έναυσμα διαφέρει επίσης: ένα νέο επεισόδιο δεν είναι αλλαγή αποθέματος 0 → >0, είναι ένας μετρητής επεισοδίων που ανεβαίνει (ή ένα id «τελευταίου επεισοδίου» που αλλάζει). Ίδιος μηχανισμός, δύο διαφορετικές ρυθμίσεις.

Τι χρειάζεστε - μόνο μία οντότητα:

  1. Γονική οντότητα series με:

    • ένα πεδίο εμφάνισης όπως title,
    • ένα αριθμητικό πεδίο episodeCount (ή μια συμβολοσειρά latestEpisodeId).
    • Καμία θυγατρική οντότητα.
  2. Στη 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 αντί για τρέχοντα μετρητή.)

  3. Η σύνδεση είναι η ιδιότητα του συμβάντος. Το player σας στέλνει ήδη, σε κάθε αναπαραγωγή, κάτι σαν:

    { "event": "Watched Episode", "series_id": "S-42", "episode": 12 }

    Το intentRefProperty: "series_id" είναι αυτό που συνδέει μια παρακολούθηση με την εγγραφή series

    • πρέπει να ταιριάζει με το id ή την τιμή πρωτεύοντος κλειδιού της εγγραφής (S-42).
  4. Πώς ενεργοποιείται: όταν η εισαγωγή καταλόγου σας ανεβάσει το episodeCount της series/S-42 8 → 9 (μια κανονική ενημέρωση εγγραφής), το Joryio ρωτά ποιοι εκτέλεσαν Watched Episode με series_id = S-42 τις τελευταίες 90 ημέρες και εκπέμπει ένα συμβάν new_episode για καθέναν από αυτούς.

  5. Χτίστε ένα 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 (συμπεριφορά)
audienceSourcechild_entityevent
Παρακολουθούμενο πεδίοavailable (απόθεμα)episodeCount / latestEpisodeId
triggerModerestock (0 → >0)increase / changed
Εκπεμπόμενο συμβάνback_in_stocknew_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:

  1. Έναυσμα εισόδου: new_episode.
  2. Αναμονή 2 ημερών.
  3. Συνθήκη / διακλάδωση συμπεριφοράς: ΔΕΝ έχει εκτελέσει 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 ειδοποίησης - από ένα και μόνο αίτημα.