แจ้งเตือนคำสั่งซื้อ Shopify ถึงมือถือภายในไม่กี่วินาที

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

อัปเดตเมื่อ

สารบัญ

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

Webhook แก้เรื่องนี้ได้ Shopify จะ POST ทุกคำสั่งซื้อไปยัง URL ที่คุณเลือก แล้ว Echobell ก็เปลี่ยน POST นั้นให้เป็นการแจ้งเตือนที่คุณเป็นคนกำหนดว่าจะดังแค่ไหน

เลือก topic ที่คู่ควรกับการขัดจังหวะคุณ

Shopify เรียกประเภทเหตุการณ์ของ webhook ว่า topic สี่อันนี้ครอบคลุมร้านที่ดูแลคนเดียวได้เกือบทั้งหมด

Topicหมายความว่าอะไรความเร่งด่วน
orders/createมีคนสั่งซื้อปกติ
orders/paidชำระเงินผ่านแล้ว ใช้อันนี้ถ้าคุณสนใจเฉพาะเงินที่เข้ามาจริงปกติ
orders/cancelledลูกค้ายกเลิก ควรรู้ก่อนที่คุณจะแพ็กของไวต่อเวลา
refunds/createมีการคืนเงินเกิดขึ้นไวต่อเวลา

สมัครรับ orders/create หรือ orders/paid อย่างใดอย่างหนึ่ง อย่าเอาทั้งคู่ นอกจากคุณอยากได้สองการแจ้งเตือนต่อการขายหนึ่งครั้งจริง ๆ สำหรับร้านส่วนใหญ่ orders/paid คืออันที่ตรงไปตรงมากว่า

ขั้นที่ 1 — สร้างแชนเนล

สร้างแชนเนลใน Echobell ตั้งชื่อประมาณ "คำสั่งซื้อ Shopify" คัดลอก URL ของ webhook แล้วเปิด เฉพาะ POST เพราะ Shopify ส่งด้วย POST เสมอ

ถ้าอยากได้แชนเนลแยกที่ดังกว่าสำหรับการยกเลิกและการคืนเงิน ก็สร้างไว้เลยตอนนี้ แล้วตั้งเป็นแบบไวต่อเวลา

ขั้นที่ 2 — เพิ่ม webhook ใน Shopify

ในหน้าผู้ดูแล Shopify ไปที่ การตั้งค่า → การแจ้งเตือน → Webhook → สร้าง webhook เลือก topic ตั้งรูปแบบเป็น JSON แล้ววาง URL แชนเนลของคุณ

Shopify จะส่ง payload ทดสอบมาให้ตอนกดบันทึก ถ้ามือถือสั่น แปลว่าเส้นทางใช้งานได้

ขั้นที่ 3 — ใส่เฉพาะฟิลด์ที่คุณอ่านจริงลงในเทมเพลต

payload คำสั่งซื้อของ Shopify ยาวมาก มีฟิลด์เกินร้อยต่อหนึ่งคำสั่งซื้อ คุณต้องใช้แค่ไม่กี่อัน

หัวเรื่อง

คำสั่งซื้อใหม่ #{{order_number}} · {{total_price}} {{currency}}

เนื้อหา

{{customer.first_name}} {{customer.last_name}}
{{line_items[0].title}}

line_items เป็นอาเรย์ ดังนั้น line_items[0] คือรายการแรก เทมเพลตของ Echobell เข้าถึงด้วยดัชนีได้ แต่ไม่มีการวนซ้ำ คำสั่งซื้อที่มีสามรายการจะแสดงแค่รายการแรกเท่านั้น ถ้าเรื่องนี้สำคัญ ให้ใส่จำนวนไว้ข้าง ๆ

{{line_items[0].title}} · รวม {{line_items.length}} รายการ

ต่างจาก Stripe ตรงที่ Shopify ส่ง total_price มาเป็นสตริงทศนิยม คือ "49.00" ไม่ใช่ 4900 จึงอ่านได้ถูกต้องโดยไม่ต้องคำนวณอะไรเลย

ขั้นที่ 4 — แยกเส้นทางตาม topic ด้วยเงื่อนไข

ถ้าคุณชี้หลาย topic มาที่แชนเนลเดียว Shopify จะบอกในเฮดเดอร์ว่าอันไหนเป็นอันไหน

header["x-shopify-topic"] == "orders/paid"

นี่คือวิธีที่สะอาดที่สุดในการแยกพฤติกรรม โดยไม่ต้องสร้าง webhook แยกให้แต่ละแชนเนลในหน้าผู้ดูแล

ปลุกฉันเฉพาะตอนมีออร์เดอร์ใหญ่

รูปแบบที่เจ้าของร้านส่วนใหญ่ต้องการจริง ๆ คือ คำสั่งซื้อทุกอันเข้าแชนเนลเงียบ ๆ และเฉพาะอันที่เกินเกณฑ์เท่านั้นที่เข้าแชนเนลที่ดัง

สร้างแชนเนลที่สอง ตั้งเป็นไวต่อเวลา ชี้ webhook ของ orders/paid อีกอันมาที่นี่ แล้วใส่เงื่อนไขให้มัน

total_price > 500

จากนี้วันธรรมดาจะเป็นเสียงหึ่ง ๆ อยู่เบื้องหลัง ส่วนคำสั่งซื้อ 900 ยูโรจะเป็นสิ่งที่คุณรู้สึกได้

สิ่งที่วิธีนี้ไม่ได้ทำให้

ไม่มีการตรวจสอบ HMAC Shopify เซ็นทุก webhook ด้วยเฮดเดอร์ X-Shopify-Hmac-Sha256 แต่ Echobell ไม่ตรวจสอบมัน สิ่งเดียวที่กันคนแปลกหน้าไว้ได้จึงคือ URL แชนเนลของคุณ ให้เก็บเป็นความลับ เปิด เฉพาะ POST ไว้ และถ้าการแจ้งเตือนคำสั่งซื้อปลอมจะสร้างความเสียหายจริง ให้เอาเอนด์พอยต์ของคุณเองไปวางไว้ข้างหน้าเพื่อตรวจ HMAC แล้วค่อยให้มันเรียก Echobell

Shopify อาจส่ง webhook เดิมมาสองครั้ง มันจะลองส่งซ้ำเมื่อล้มเหลว และการส่งซ้ำนั้นไม่ได้ตัดตัวซ้ำออก ให้ถือว่าการแจ้งเตือนคือสัญญาณให้ไปดูคำสั่งซื้อ ไม่ใช่ตัวนับจำนวนคำสั่งซื้อ หน้าผู้ดูแล Shopify คือแหล่งข้อมูลที่ถูกต้อง

topic เกี่ยวกับสต็อกจะกลายเป็นเสียงรบกวนอย่างรวดเร็ว inventory_levels/update ทำงานทุกครั้งที่สต็อกขยับ รวมถึงตอนที่คุณแก้เอง ถ้าอยากได้การแจ้งเตือนของใกล้หมด ต้องกรองให้เข้มมาก ไม่งั้นยังไม่ทันเที่ยงคุณก็จะเสียใจ

คำถามที่พบบ่อย

ต้องใช้แอปของ Shopify ไหม

ไม่ต้อง webhook ที่อยู่ใต้ การตั้งค่า → การแจ้งเตือน มีมาให้ในหน้าผู้ดูแลอยู่แล้ว ไม่ต้องมีแอป ไม่ต้องมีบัญชีพาร์ตเนอร์ และไม่ต้องเขียนโค้ด

ให้คนที่คลังเห็นคำสั่งซื้อโดยไม่เห็นหน้าผู้ดูแล Shopify ได้ไหม

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

ควรใส่ชื่อลูกค้าลงในการแจ้งเตือนไหม

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

ถ้าถูกขอคืนเงินผ่านบัตร จะได้รับสายไหม

ร้านที่ใช้ Shopify Payments จะได้รับข้อพิพาทผ่าน topic disputes/create ให้ชี้อันนั้นไปที่แชนเนลแบบสายเรียกเข้า เพราะมันเป็นเหตุการณ์เดียวในกลุ่มคำสั่งซื้อที่มีกำหนดเวลาติดมาด้วย

สรุป

หนึ่ง webhook หนึ่งเทมเพลต และอีกหนึ่งเงื่อนไขถ้าคุณอยากได้เวอร์ชันที่ดัง ใช้เวลาราวห้านาที และมันมาแทนการนั่งกดรีเฟรชหน้าคำสั่งซื้อ

ดาวน์โหลด Echobell สำหรับ iPhone หรือ รับบน Google Play แล้วลองสั่งซื้อทดสอบสักหนึ่งรายการ ดูว่ามันมาถึงก่อนอีเมลยืนยันเสียอีก


เนื้อหาที่เกี่ยวข้อง

บทความที่เกี่ยวข้อง

ให้แจ้งเตือนเมื่อคำสั่งยาว ๆ ในเทอร์มินัลทำงานเสร็จ

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

อ่านต่อ

แจ้งเตือนการชำระเงิน Stripe: ให้โทรศัพท์ดังตอนที่เงินกำลังเสี่ยง

ส่ง webhook ของ Stripe เข้ามือถือด้วยระดับความเร่งด่วนที่เหมาะกับแต่ละเหตุการณ์ — เก็บเงินสำเร็จก็แจ้งเบา ๆ ส่วนข้อพิพาทที่มีกำหนดตอบกลับให้โทรเข้ามาเลย

อ่านต่อ

สายโทรแจ้งเตือนจาก Uptime Kuma: ทำให้มือถือของคุณดังจริง ๆ

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

อ่านต่อ