clickSomo
เปิด ClickSomo

ฟันเนลและทริกเกอร์

ฟันเนลคือกราฟ การรันคือแถวข้อมูล การรอคือช่วงเวลา

นั่นคือโมเดลทั้งหมด และคุณสมบัติที่ยากทุกอย่างของผลิตภัณฑ์นี้ล้วนออกมาจากสามประโยคนี้ การแก้ไขฟันเนลที่กำลังทำงานอยู่ปลอดภัยเพราะสิ่งเหล่านี้ การลองใหม่ไม่สามารถส่งซ้ำได้เพราะสิ่งเหล่านี้ และคนที่ยกเลิกการติดตามในวันอังคารจะไม่ได้รับอะไรเลยในวันพฤหัสบดีเพราะสิ่งเหล่านี้

เมื่อรันจริง ๆ แล้วเกิดอะไรขึ้น

การเผยแพร่ฟันเนลจะสร้าง เวอร์ชันที่เปลี่ยนแปลงไม่ได้ เมื่อมีผู้ติดต่อเข้ามา จะมีแถวหนึ่งปรากฏขึ้น: การรันหนึ่งครั้ง สำหรับผู้ติดต่อรายนี้ ผูกกับเวอร์ชันนั้น ระบุโหนดปัจจุบัน เวลาปลุก และบริบทของตัวเอง

เวิร์กเกอร์จะยืมการรันที่เวลาปลุกผ่านไปแล้ว โดยอ้างสิทธิ์ด้วย SKIP LOCKED เพื่อไม่ให้เวิร์กเกอร์สองตัวรับงานเดียวกัน จากนั้นจะรันโหนดไปเรื่อย ๆ จนถึงจุดรอหรือจุดสิ้นสุด แล้วจึงบันทึกเวลาปลุกครั้งถัดไปและปล่อยงาน

โหนดเป็นฟังก์ชันบริสุทธิ์ของการรัน ผู้ติดต่อ และโหนดนั้น — และผลลัพธ์ของมันจะถูกคอมมิตในธุรกรรมเดียวกับการเดินหน้าของการรัน คุณสมบัติเพียงข้อนี้คือสิ่งที่ทำให้การลองใหม่ปลอดภัย เวิร์กเกอร์ที่ถูกฆ่าในช่วงครึ่งวินาทีระหว่าง "ส่ง" กับ "เดินหน้า" จะเหลือทั้งสองอย่างหรือไม่เหลือเลย ไม่เหลือเพียงอย่างเดียว

และเพราะแอปพลิเคชันเป็นผู้กำหนดเวลาแทนฐานข้อมูล แถวที่เขียนตอนนี้จึงถือว่าครบกำหนดตอนนี้ คอลัมน์กำหนดเวลาที่ใช้ค่าเริ่มต้นจากนาฬิกาของฐานข้อมูลจะยังไม่ครบกำหนดในทันทีที่เขียน และจะพลาดติ๊กที่สร้างมันขึ้นมาเอง — บั๊กที่ดูเหมือนไม่มีอะไรเลยจนกระทั่งข้อความส่งช้าไปหนึ่งชั่วโมง

หนึ่งติ๊กของเวิร์กเกอร์การดำเนินการ
  • 1ยืมงานwake_at <= now(), FOR UPDATE SKIP LOCKED คิวที่ไม่มีการยืมงานจะส่งซ้ำเป็นค่าเริ่มต้น
  • 2รันโหนดรันโหนดตามลำดับจนถึงจุดรอหรือจุดสิ้นสุด แต่ละโหนดจะบันทึกขั้นตอนหนึ่ง: ตัดสินใจอะไร และส่งอะไรออกไป
  • 3คอมมิตผลลัพธ์และการเดินหน้า ในธุรกรรมเดียว นี่คือเคล็ดลับทั้งหมด
  • 4สลีปบันทึก wake_at ครั้งถัดไป ยังไม่มีแถวปลายทางใด ๆ และก็ไม่จำเป็นต้องมี

หนึ่งการรันต่อผู้ติดต่อต่อเวอร์ชัน

สิบสี่ทริกเกอร์

อะไรที่เริ่มการรันได้

บางอย่างเป็นสิ่งที่คุณทำ ส่วนใหญ่เป็นสิ่งที่ลูกค้าของคุณทำหรือไม่ทำ — และการไม่มีการกระทำก็เป็นทริกเกอร์ที่ดีเท่ากับการกระทำเอง

เมื่อเข้ามา

form_submit, list_join, contact_created, tag_added และ segment_enter เซกเมนต์เป็นเงื่อนไขแบบเรียลไทม์ ดังนั้น "เข้าสู่เซกเมนต์" ครอบคลุมทุก "ได้กลายเป็น" ที่คุณระบุได้ — สั่งซื้อสามครั้ง เงียบไปเก้าสิบวัน ใช้จ่ายเกินเกณฑ์

เมื่อทำบางอย่าง

page_visit จากสนิปเปตของเว็บไซต์, message_opened, link_clicked, booking_made และ payment_made การเปิดข้อความก็เป็นอีเวนต์บนผู้ติดต่อเช่นกัน ฟันเนลหนึ่งจึงรอปฏิกิริยาต่อสิ่งที่มันส่งล่าสุดได้

เวลา หรือคุณ

date_field พร้อมระยะเผื่อ — วันเกิด การต่ออายุ "ครบหนึ่งปี" ก่อนกำหนดเจ็ดวันหรือหลังกำหนดสามวัน schedule สำหรับแบบทำซ้ำ manual สำหรับประกาศที่คุณส่งเพราะคุณตัดสินใจเอง

แอปพลิเคชันของคุณเอง

api_event เป็นอีเวนต์ที่กำหนดเองซึ่งคุณส่งจากโค้ดของคุณเองด้วยโทเคนของคุณเอง ทุกอย่างที่ผลิตภัณฑ์ของคุณรู้จะกลายเป็นทริกเกอร์ได้: เปิดใช้งานแล้ว ชวนเพื่อนร่วมงาน ใช้ครบโควตา ยกเลิก ส่งออกข้อมูล นี่คือตัวที่เปลี่ยนเครื่องมือส่งอีเมลให้เป็นส่วนหนึ่งของผลิตภัณฑ์ของคุณ

การกลับเข้าใหม่ ตัดสินใจครั้งเดียว

ฟันเนลจะกลับเข้าใหม่ได้หรือไม่ได้ และฐานข้อมูลเป็นผู้บังคับ: หนึ่งการรันต่อผู้ติดต่อต่อฟันเนล เว้นแต่คุณจะระบุเป็นอย่างอื่น ทริกเกอร์เดียวกันยิงสองครั้งในวินาทีเดียวกันไม่สามารถสร้างการรันสองครั้งโดยบังเอิญได้

เงื่อนไขการเข้า

เมื่อทริกเกอร์ยิง ข้อกำหนดการเข้าจะตัดสินว่าผู้ติดต่อรายนี้มีสิทธิ์หรือไม่ — เป็นเงื่อนไขเซกเมนต์ที่วางไว้หน้าประตู ถูกกว่าการใช้โหนดเงื่อนไขที่ขั้นแรก และทำให้กราฟพูดถึงสิ่งที่จะเกิดขึ้น แทนที่จะพูดถึงว่าใครได้รับอนุญาตให้เข้า

สิบสี่อย่างที่เริ่มมันได้ สิบหกอย่างที่เกิดขึ้นต่อไปได้

สิบหกการกระทำและเจ็ดโหนดการไหล

ฟันเนลทำอะไรได้ และตัดสินใจอย่างไร

ส่งบางอย่าง

send_email, send_sms, send_push, send_letter — สี่ช่องทาง กราฟเดียว — บวกกับ notify_team สำหรับกรณีที่คนที่ต้องรับรู้ทำงานกับคุณ

แก้ไขผู้ติดต่อ

add_tag, remove_tag, add_to_list, remove_from_list, set_field การทำเครื่องหมายผู้ติดต่อระหว่างทางคือสิ่งที่ทำให้เซกเมนต์ของฟันเนลถัดไปง่ายขึ้น

เชื่อมต่อภายนอก

http_request ไปยังที่ใดก็ได้ที่คุณต้องการ, create_payment ผ่านบัญชีที่เชื่อมต่อของคุณเอง และ book_slot ผ่านทรัพยากรการจอง ผู้จ่ายยังเป็นของคุณ ไม่มีใครกลายเป็นลูกค้าของเรา

ย้ายระหว่างฟันเนล

enter_funnel และ exit_funnel สร้างลำดับต้อนรับหนึ่งชุดแล้วเรียกใช้จากสี่ที่ แทนที่จะดูแลสำเนาสี่ชุดที่จะแตกต่างกันไปเมื่อถึงเดือนมีนาคม

สร้าง ณ เวลาส่ง

ai_generate จะเติมตัวแปร merge ให้รายชื่อติดต่อแต่ละราย โดยนับใช้โควตาของคุณและแคชตาม hash ของครีเอทีฟและคุณลักษณะของรายชื่อติดต่อ — มิฉะนั้นคุณจะต้องจ่ายเงินต่อผู้รับในทุกครั้งที่ส่ง

รอ, แยกเส้นทาง, แตกสาขา, รวมกลับ

wait รับค่าเป็นระยะเวลา, วันที่เวลา, วันในสัปดาห์พร้อมเวลา หรือฟิลด์วันที่พร้อมออฟเซ็ต condition คือเงื่อนไขการแบ่งกลุ่มที่มีทางใช่และทางไม่ split คือการแบ่ง A/B/n พร้อมน้ำหนัก join นำเส้นทางที่แตกออกกลับมารวมกัน

goal — โหนดที่สำคัญที่สุด

เป้าหมายจะยุติการทำงานของลำดับสำหรับทุกคนที่ไปถึงมัน พวกเขาจองแล้ว ซื้อแล้ว หรือตอบกลับแล้ว: ส่วนที่เหลือของลำดับจะถูกยกเลิกเฉพาะตัวพวกเขา ไม่มีใครได้รับข้อความ "เราคิดถึงคุณ" ในวันรุ่งขึ้นหลังจากที่พวกเขากลับมาแล้ว และนี่คือโหนดที่ป้องกันเรื่องนั้น

throttle และ quiet_hours

Throttle ควบคุมจังหวะการส่งจำนวนมากเพื่อไม่ให้กล่องจดหมายที่มีเพดานอัตราต่ำถูกยิงจนถูกระงับ Quiet hours จะกุมข้อความไว้จนถึงเวลาที่เหมาะสม — ใช้ที่ระดับข้อความ ไม่ใช่คัดลอกไปใส่ทุกสาขาของกราฟ

ตรวจสอบก่อนจะรันได้

ตัวตรวจสอบปฏิเสธสิ่งเดียวกันทั้งกับคุณและกับ AI

กราฟจะถูกตรวจสอบก่อนเผยแพร่ได้ และการตรวจสอบนี้ไม่ใช่แค่คำแนะนำ มันคือเส้นทางโค้ดเดียวกันไม่ว่าจะเป็นคนวาด funnel หรือโมเดลสร้างขึ้น ซึ่งเป็นเหตุผลเดียวที่ทำให้ funnel ที่สร้างโดย AI น่าเชื่อถือได้เลย

มีจุดเริ่มต้นเพียงจุดเดียว

การมีโหนดเริ่มต้นสองจุดคือความกำกวมที่ไม่มีใครสังเกตเห็น จนกระทั่งครึ่งหนึ่งของรายการได้รับลำดับที่ผิด

ทุกโหนดต้องเข้าถึงได้

สาขาที่ถูกทิ้งขาดนั้นเป็นได้ทั้งความผิดพลาด หรือข้อความที่คุณคิดว่ากำลังจะส่งออกแต่จริง ๆ ไม่ได้ส่ง ทั้งสองกรณีควรได้รับการแจ้งเตือน

วงรอบต้องมีการรอ

ลูปที่ไม่มีการรออยู่ข้างในคือลูปอนันต์ที่มีการส่งข้อความอยู่ตรงกลาง กฎนี้คือเส้นแบ่งระหว่าง funnel กับเหตุฉุกเฉิน

ทุกการส่งต้องมีครีเอทีฟ

โหนด send_email ที่ไม่มีครีเอทีฟและหัวเรื่องจะเผยแพร่ไม่ได้ ข้อความที่มีหัวเรื่องถูกต้องแต่เนื้อหาว่างเปล่าเป็นความล้มเหลวที่เกิดขึ้นจริง และมันถูกปฏิเสธที่นี่

ทุกตัวแปรต้องเป็นที่รู้จัก

ตัวแปร merge จะถูกตรวจสอบตอนเผยแพร่ {{frist_name}} เป็นคำสะกดผิดที่คุณเห็นตอนกำลังแก้ไข ไม่ใช่ "สวัสดีครับ ," ที่ไปปรากฏในกล่องจดหมายสี่หมื่นใบ

จากนั้นจำลองดู

ทดลองรันรายชื่อติดต่อจริงผ่านกราฟทั้งหมด แล้วอ่านย้อนกลับเส้นทางที่เดินและข้อความทุกฉบับที่จะถูกส่ง พร้อมวันที่จะส่ง ไม่มีอะไรหลุดออกไปข้างนอก

กรณีที่ยุ่งยาก

เจ็ดสิ่งที่ทำให้เอนจินแบบง่ายพัง

ทุกข้อในนี้คือการทดสอบที่มีนาฬิกาแบบกำหนดผลลัพธ์ล่วงหน้าอยู่เบื้องหลัง เพราะแต่ละข้อทำให้การใช้งานที่ดูถูกต้องสมบูรณ์แบบพังทันทีที่เจอความจริง

สิ่งที่เอนจินถูกทดสอบด้วยการพิสูจน์ว่าผิด
  • 1Funnel ที่วนกลับเข้าหาตัวเองถูกต้อง พบได้ทั่วไป และไม่มีปัญหา — ตราบใดที่วงรอบมีการรออยู่ข้างใน ซึ่งเป็นสิ่งที่ตัวตรวจสอบบังคับ
  • 2มีคนยกเลิกการติดตามระหว่างทางการกดคัดกรองจะตรวจสอบตอนส่ง ไม่ใช่ตอนเข้าคิว การตรวจสอบตอนเข้าคิวจะส่งเมลไปหาคนที่ยกเลิกไปแล้วระหว่างช่วงรอ
  • 3Funnel ถูกแก้ไขขณะที่มีคนอยู่ข้างในหนึ่งหมื่นคนพวกเขาจะเดินต่อบนเวอร์ชันที่ตัวเองเข้ามา จนถึงจบ ส่วนผู้เข้าใหม่จะเดินบนเวอร์ชันใหม่
  • 4ทริกเกอร์เดียวกันยิงซ้ำภายในหนึ่งวินาทีได้เพียงหนึ่งการรัน เพราะความไม่ซ้ำเป็นดัชนี ไม่ใช่การตรวจสอบแล้วตามด้วยการแทรก
  • 5รายชื่อติดต่อถูกลบระหว่างการรันการรันจะสิ้นสุดลง การลบข้อมูลที่ยังทิ้งลำดับข้อความที่ระบุถึงใครบางคนไว้ ไม่ใช่การลบข้อมูลที่แท้จริง
  • 6การรอคร่อมการเปลี่ยนเวลาออมแสง"สามวันที่เวลาเก้าโมงเช้า" หมายถึงเก้าโมงเช้าทั้งก่อนและหลังการเปลี่ยนเวลา
  • 7เวิร์กเกอร์ถูกฆ่าระหว่างการส่งกับการเดินหน้าเอฟเฟกต์และการเบิกเงินล่วงหน้าเป็นธุรกรรมเดียวกัน ไม่ใช่เกิดทั้งคู่ ก็ไม่เกิดเลย

นาฬิกาแบบกำหนดผลลัพธ์ได้แต่ละการทดสอบทำลายการใช้งานที่ดูเป็นไปได้

แคมเปญคืออีกครึ่งหนึ่ง

ฟันเนลคือสิ่งที่ตอบสนอง ส่วน แคมเปญ คือการส่งสารครั้งเดียวแบบเรียกเข้าเอง: กลุ่มผู้รับ ตารางเวลา การจำกัดอัตราส่ง และการส่ง เป็นสิ่งที่มีรูปแบบต่างออกไป และถูกแยกไว้โดยเจตนา มิใช่แกล้งทำเป็นฟันเนลที่มีโหนดเดียว

มีสองกฎที่ทำให้ปลอดภัย กลุ่มผู้รับจะถูก สร้างขึ้นเป็นรูปธรรมเพียงครั้งเดียว และปฏิเสธการรันซ้ำ — การคำนวณใหม่จะเพิ่มทุกคนที่เข้าร่วมหลังจากการส่งเริ่มต้นอย่างเงียบ ๆ และดัชนีกันซ้ำจะปิดบังสิ่งนั้นโดยบล็อกรายการซ้ำที่มันสร้างขึ้นเอง และตัวนับจะถูก คำนวณใหม่จากเหตุการณ์การส่งมอบ ไม่ใช่เพิ่มค่าในที่เดิม ดังนั้น webhook ที่ส่งซ้ำจึงไม่สามารถเบิกความในรายงานได้

จะใช้อะไรดี: ถ้าเกิดขึ้นเพราะสิ่งที่บุคคลนั้นทำ มันคือฟันเนล ถ้าเกิดขึ้นเพราะสิ่งที่ท่านตัดสินใจในวันอังคารวันหนึ่ง มันคือแคมเปญ ระบบการตลาดอัตโนมัติจำนวนไม่น้อยพังทลายเพราะบังคับให้แบบที่สองอยู่ในรูปของแบบแรก