clickSomo
Άνοιγμα ClickSomo

Funnels & ενεργοποιήσεις

Ένα funnel είναι γράφημα. Μια εκτέλεση είναι μια γραμμή. Μια αναμονή είναι ένας χρόνος.

Αυτό είναι όλο το μοντέλο, και κάθε δύσκολη ιδιότητα που έχει αυτό το προϊόν βγαίνει από αυτές τις τρεις προτάσεις. Η επεξεργασία ενός ζωντανού funnel είναι ασφαλής χάρη σε αυτές. Μια επανάληψη δεν μπορεί να στείλει διπλό μήνυμα χάρη σε αυτές. Και ένας άνθρωπος που διαγράφεται την Τρίτη δεν ακούει τίποτα την Πέμπτη χάρη σε αυτές.

Τι πραγματικά συμβαίνει όταν εκτελείται

Η δημοσίευση ενός funnel γράφει μια αμετάβλητη έκδοση. Κάποιος μπαίνει, και εμφανίζεται μια γραμμή: ένα run, για αυτή την επαφή, δεμένο με αυτή την έκδοση, που κρατά τον τρέχοντα κόμβο, μια ώρα αφύπνισης και το δικό του context.

Ένας worker μισθώνει τα runs των οποίων η ώρα αφύπνισης έχει παρέλθει, διεκδικώντας τα με SKIP LOCKED, ώστε δύο workers να μην μπορούν να πάρουν το ίδιο. Εκτελεί κόμβους μέχρι να φτάσει σε αναμονή ή σε τερματικό, και μετά γράφει την επόμενη ώρα αφύπνισης και το αφήνει.

Ένας κόμβος είναι καθαρή συνάρτηση του run, της επαφής και του κόμβου — και τα effects του δεσμεύονται στην ίδια συναλλαγή με την προώθηση του ίδιου του run. Αυτή η μοναδική ιδιότητα είναι που κάνει την επανάληψη ασφαλή. Ένας worker που σκοτώνεται στο μισό δευτερόλεπτο μεταξύ «αποστολής» και «προώθησης» αφήνει είτε και τα δύο είτε τίποτα, ποτέ το ένα.

Και επειδή την ώρα την παρέχει η εφαρμογή και όχι η βάση δεδομένων, μια γραμμή που γράφεται τώρα λήγει τώρα. Μια στήλη προγραμματισμού που προεπιλέγεται στο ρολόι της βάσης δεν είναι ακόμη ληξιπρόθεσμη τη στιγμή που γράφεται, και χάνει το ίδιο το tick που τη δημιούργησε — ένα bug που δεν φαίνεται καθόλου μέχρι ένα μήνυμα να αργήσει μία ώρα.

Ένα tick του workerΕκτέλεση
  • 1Μίσθωσηwake_at <= now(), FOR UPDATE SKIP LOCKED. Μια ουρά χωρίς μισθώσεις στέλνει διπλά από προεπιλογή.
  • 2ΕκτέλεσηΚόμβους με τη σειρά μέχρι μια αναμονή ή ένα τερματικό. Κάθε ένας γράφει ένα βήμα: τι αποφάσισε, τι εξέπεμψε.
  • 3ΥποβάλετεEffects και προώθηση, μία συναλλαγή. Αυτό είναι όλο το κόλπο.
  • 4ΑδράνειαΓράφεται το επόμενο wake_at. Δεν υπάρχουν ακόμη downstream γραμμές, και δεν χρειάζεται να υπάρχουν.

Ένα run ανά επαφή ανά έκδοση

Δεκατέσσερις ενεργοποιητές

Τι μπορεί να ξεκινήσει ένα run

Μερικά από αυτά είναι πράγματα που κάνετε εσείς. Τα περισσότερα είναι πράγματα που κάνει — ή δεν κάνει — ο πελάτης σας, και η απουσία μιας ενέργειας είναι εξίσου καλός ενεργοποιητής με την ίδια την ενέργεια.

Φτάνουν

form_submit, list_join, contact_created, tag_added και segment_enter. Ένα segment είναι ένα ζωντανό κατηγόρημα, οπότε το «μπαίνει στο segment» καλύπτει κάθε «έγινε» που μπορείτε να εκφράσετε — τρεις παραγγελίες, ενενήντα μέρες σιωπή, δαπάνη πάνω από ένα όριο.

Κάνουν κάτι

page_visit από το snippet του site, message_opened, link_clicked, booking_made και payment_made. Το άνοιγμα ενός μηνύματος είναι από μόνο του ένα event στην επαφή, οπότε ένα funnel μπορεί να περιμένει αντίδραση στο τελευταίο πράγμα που έστειλε.

Ο χρόνος, ή εσείς

date_field με μια μετατόπιση — ένα γενέθλιο, μια ανανέωση, «ένας χρόνος από τότε», επτά μέρες πριν ή τρεις μέρες μετά. schedule για το επαναλαμβανόμενο. manual για την ανακοίνωση που στέλνετε επειδή το αποφασίσατε.

Η δική σας εφαρμογή

Το api_event είναι ένα custom event που δημοσιεύετε από τον δικό σας κώδικα με το δικό σας token. Οτιδήποτε ξέρει το προϊόν σας γίνεται ενεργοποιητής: ενεργοποίηση, πρόσκληση συναδέλφου, επίτευξη του ορίου, ακύρωση, εξαγωγή. Αυτό είναι αυτό που μετατρέπει ένα εργαλείο αποστολών σε μέρος του προϊόντος σας.

Επανεισδοχή, αποφασισμένη μία φορά

Ένα funnel είναι είτε επανεισδύσιμο είτε όχι, και η βάση δεδομένων το επιβάλλει: ένα run ανά επαφή ανά funnel, εκτός αν πείτε διαφορετικά. Η ίδια ενεργοποίηση που πυροδοτείται δύο φορές στο ίδιο δευτερόλεπτο δεν μπορεί να παράγει κατά λάθος δύο runs.

Συνθήκες εισόδου

Ένας ενεργοποιητής πυροδοτείται και το entry spec αποφασίζει αν αυτή η συγκεκριμένη επαφή είναι επιλέξιμη — ένα κατηγόρημα segment μπροστά στην πόρτα. Φθηνότερο από έναν κόμβο συνθήκης στο πρώτο βήμα, και κρατά το γράφο να αφορά τι συμβαίνει, όχι ποιος επιτρέπεται να μπει.

Δεκατέσσερα πράγματα μπορούν να το ξεκινήσουν. Δεκαέξι πράγματα μπορούν να συμβουν μετά.

Δεκαέξι ενέργειες και επτά κόμβοι ροής

Τι μπορεί να κάνει ένα funnel, και πώς αποφασίζει

Στείλτε κάτι

send_email, send_sms, send_push, send_letter — τέσσερα κανάλια, ένας γράφος — συν notify_team όταν αυτός που πρέπει να μάθει δουλεύει για εσάς.

Αλλάξτε την επαφή

add_tag, remove_tag, add_to_list, remove_from_list, set_field. Το να σημειώνετε κάποιον καθώς προχωράτε είναι αυτό που κάνει το segment του επόμενου funnel απλό.

Φτάστε έξω

http_request σε ό,τι θέλετε, create_payment στον δικό σας συνδεδεμένο λογαριασμό, και book_slot σε έναν πόρο κρατήσεων. Ο πληρώντας παραμένει δικός σας· κανείς δεν γίνεται πελάτης μας.

Μετακινηθείτε μεταξύ funnels

enter_funnel και exit_funnel. Χτίστε μία ακολουθία καλωσορίσματος και καλέστε την από τέσσερα σημεία, αντί να συντηρείτε τέσσερα αντίγραφα που αποκλίνουν ως τον Μάρτιο.

Δημιουργία τη στιγμή της αποστολής

Το ai_generate γεμίζει τις μεταβλητές συγχώνευσης ανά επαφή, μετρημένο στο quota σας και αποθηκευμένο σε cache με βάση το hash του creative και των χαρακτηριστικών της επαφής — αλλιώς θα πληρωνατε ανά παραλήπτη σε κάθε μεμονωμένη αποστολή.

Αναμονή, διακλάδωση, διαίρεση, ένωση

Το wait δέχεται μια διάρκεια, μια ημερομηνία-ώρα, μια ημέρα εβδομάδας με ώρα ή ένα πεδίο ημερομηνίας με μετατόπιση. Το condition είναι ένα κατηγόρημα τμήματος με ένα «ναι» και ένα «όχι». Το split είναι A/B/n με βάρη. Το join επανενώνει τις διακλαδώσεις.

goal — ο στόχος που μετράει

Ένας στόχος τερματίζει τη ροή για όποιον τον φτάσει. Κράτησε, αγόρασε, απάντησε: η υπόλοιπη ακολουθία ακυρώνεται ειδικά για εκείνον. Κανείς δεν λαμβάνει «σου λείπουμε» την επόμενη μέρα που επέστρεψε, και αυτός είναι ο κόμβος που το αποτρέπει.

throttle και quiet_hours

Το throttle ρυθμίζει τον ρυθμό μιας μαζικής αποστολής ώστε ένα γραμματοκιβώτιο με χαμηλό όριο να μην οδηγηθεί σε αναστολή. Οι ώρες ησυχίας κρατούν ένα μήνυμα μέχρι μια ευπρεπή ώρα — εφαρμόζονται στο επίπεδο του μηνύματος, δεν αντιγράφονται σε κάθε διακλάδωση του γραφήματος.

Έλεγχος πριν την εκτέλεση

Ο επικυρωτής αρνείται τα ίδια πράγματα για εσάς και για την AI

Ένα γράφημα ελέγχεται πριν δημοσιευτεί, και ο έλεγχος δεν είναι συμβουλευτικός. Είναι η ίδια διαδρομή κώδικα είτε ο χοάνη τη σχεδίασε άνθρωπος είτε τη παρήγαγε μοντέλο, και αυτός είναι ο μόνος λόγος που οι παραγόμενες χοάνες είναι αξιόπιστες.

Ακριβώς μία είσοδος

Δύο κόμβοι εισόδου είναι μια ασάφεια που κανείς δεν προσέχει μέχρι η λάθος μισή λίστα να λάβει τη λάθος ακολουθία.

Κάθε κόμβος προσβάσιμος

Μια ορφανή διακλάδωση είναι είτε λάθος είτε ένα μήνυμα που νομίζετε ότι φεύγει και δεν φεύγει. Και τα δύο αξίζουν ειδοποίηση.

Κάθε κύκλος πρέπει να περιέχει αναμονή

Ένας βρόχος χωρίς αναμονή είναι ένας άπειρος βρόχος με μια αποστολή στη μέση. Αυτός ο κανόνας είναι η διαφορά ανάμεσα σε μια χοάνη και ένα περιστατικό.

Κάθε αποστολή έχει το δημιουργικό της

Ένας κόμβος send_email χωρίς δημιουργικό και θέμα δεν μπορεί να δημοσιευτεί. Το μήνυμα με το σωστό θέμα και κενό σώμα είναι πραγματική αποτυχία· απορρίπτεται εδώ.

Κάθε μεταβλητή είναι γνωστή

Οι μεταβλητές συγχώνευσης επικυρώνονται κατά τη δημοσίευση. Το {{frist_name}} είναι τυπογραφικό λάθος που βλέπετε κατά την επεξεργασία, όχι ένα «Γεια σου ,» που φτάνει σε σαράντα χιλιάδες εισερχόμενα.

Στη συνέχεια, προσομοιώστε το

Εκτελέστε δοκιμαστικά έναν πραγματικό επαφό σε όλο το γράφημα και διαβάστε τη διαδρομή που ακολουθήθηκε και κάθε μήνυμα που θα στέλνονταν, με την ημέρα του. Τίποτα δεν βγαίνει έξω.

Οι δύσκολες περιπτώσεις

Επτά πράγματα που σπάνε μια αφελή μηχανή

Κάθε ένα από αυτά είναι ένα τεστ με ντετερμινιστικό ρολόι πίσω του, γιατί το καθένα σπάει μια υλοποίηση που φαίνεται απολύτως σωστή μέχρι να συναντήσει την πραγματικότητα.

Σε τι δοκιμάζεται η μηχανήΔιάψευση
  • 1Μια χοάνη που βρόχιζει στον εαυτό τηςΝόμιμη, συνηθισμένη και απολύτως δεκτή — αρκεί ο κύκλος να περιέχει αναμονή, κάτι που ο επικυρωτής επιμένει.
  • 2Κάποιος απεγγράφεται εν μέσω ροήςΟ αποκλεισμός ελέγχεται κατά την αποστολή, όχι κατά την εισαγωγή στην ουρά. Ο έλεγχος κατά την εισαγωγή στέλνει μήνυμα σε όσους έφυγαν κατά τη διάρκεια της αναμονής.
  • 3Η χοάνη επεξεργάζεται με δέκα χιλιάδες άτομα μέσαΣυνεχίζουν τη διαδρομή στην έκδοση που μπήκαν, μέχρι το τέλος. Οι νέοι μπαίνουν στη νέα.
  • 4Ο ίδιος trigger ενεργοποιείται δύο φορές σε ένα δευτερόλεπτοΜία εκτέλεση, γιατί η μοναδικότητα είναι ένας δείκτης και όχι ένας έλεγχος που ακολουθείται από εισαγωγή.
  • 5Ένας επαφός διαγράφεται εν μέσω εκτέλεσηςΗ εκτέλεση τερματίζεται. Μια διαγραφή που αφήνει μια ακολουθία ακόμα απευθυνμένη σε κάποιον δεν είναι διαγραφή.
  • 6Μια αναμονή εκτείνεται σε αλλαγή θερινής ώρας«Τρεις ημέρες στις εννιά το πρωί» σημαίνει εννιά το πρωί και στις δύο πλευρές της αλλαγής ώρας.
  • 7Ένας worker σκοτώνεται ανάμεσα στην αποστολή και την προώθησηΤα αποτελέσματα και η προώθηση είναι μία συναλλαγή. Είτε συνέβησαν και τα δύο είτε τίποτα.

Ντετερμινιστικό ρολόιΚάθε τεστ καταρρίπτει μια εύλογη υλοποίηση

Οι καμπάνιες είναι το άλλο μισό

Ένα χωνί αντιδρά. Μια καμπάνια είναι η εφάπαξ μαζική αποστολή: ένα κοινό, ένα πρόγραμμα, ένας περιορισμός ρυθμού και μία αποστολή. Είναι κάτι διαφορετικής φύσης και διατηρείται σκόπιμα χωριστά, αντί να προσποιείται ότι είναι ένα χωνί με έναν μόνο κόμβο.

Δύο κανόνες το καθιστούν ασφαλές. Το κοινό υλοποιείται μία φορά και αρνείται να εκτελεστεί δεύτερη — η εκ νέου επίλυση θα πρόσθετε αθόρυβα όλους όσους μπήκαν αφότου ξεκίνησε η αποστολή, και το ευρετήριο αφαίρεσης διπλοτύπων θα το απόκρυπτε, εμποδίζοντας τα διπλότυπα που θα δημιουργούσε. Και οι μετρητές επαναϋπολογίζονται από τα γεγονότα παράδοσης, δεν αυξάνονται ποτέ επιτόπου, ώστε ένα webhook που επαναλαμβάνεται να μην μπορεί να διογκώσει μια αναφορά.

Ποιο να χρησιμοποιήσετε: αν συμβαίνει λόγω κάτι που έκανε το άτομο, είναι χωνί. Αν συμβαίνει λόγω κάτι που αποφασίσατε κάποια Τρίτη, είναι καμπάνια. Αξιοσημείωτα μεγάλο μέρος της αυτοματοποίησης μάρκετινγκ πάει στραβά επειδή το δεύτερο εξαναγκάζεται να πάρει τη μορφή του πρώτου.