ผูก Stripe Payment Event เข้ากับ Campaign ต้นทางก่อนเงินจะหายไปในแชท

สรุปสั้น ๆ
Stripe LINE OA conversion tracking ทำได้ด้วยการแนบข้อมูลต้นทางของ Lead ไว้ใน Metadata ของ Payment หรือ Checkout Session ตั้งแต่ตอนสร้างลิงก์ชำระเงิน แล้วใช้ Stripe Webhook ยืนยัน Event ที่ชำระสำเร็จจริง ก่อนส่ง Conversion กลับแพลตฟอร์มโฆษณาที่เชื่อมต่อไว้ตาม Integration ที่รองรับ
ธุรกิจที่ขายบริการหรือคอร์สออนไลน์ราคาสูงจำนวนไม่น้อยเลือกใช้ Stripe เป็นช่องทางรับเงินหลังจากคุยจบในแชท LINE เพราะออกใบเสร็จอัตโนมัติได้ รองรับบัตรเครดิตต่างประเทศ และมีระบบจัดการการสมัครสมาชิกแบบต่อเนื่อง ข้อดีของ Stripe คือมันมี Event ที่ชัดเจนมากว่าใครจ่ายเงินสำเร็จเมื่อไหร่ ต่างจากการโอนผ่านสลิปที่ต้องพึ่งคนตรวจเอง
แต่ปัญหาที่ยังเหลืออยู่คือ Stripe รู้แค่ว่ามีคนจ่ายเงินสำเร็จ ไม่รู้เลยว่าคนคนนั้นมาจากแคมเปญไหน เพราะ Checkout Session หรือ Payment Link ที่สร้างขึ้นมาไม่ได้ผูกกับข้อมูลโฆษณาโดยอัตโนมัติ ถ้าธุรกิจไม่ได้ออกแบบให้แนบข้อมูลต้นทางไว้ตั้งแต่ตอนสร้างลิงก์ชำระเงิน สุดท้ายก็จะเห็นแค่รายชื่อคนจ่ายเงินกับยอดเงิน โดยไม่รู้ว่าควรขอบคุณแคมเปญไหนที่พาลูกค้าคนนั้นมา
บทความนี้จะอธิบายว่าจะผูก Payment Event ของ Stripe เข้ากับ Campaign Attribution อย่างไรให้มีเหตุผลรองรับ ไม่ใช่แค่การเดาจากช่วงเวลาที่เงินเข้าใกล้เคียงกับตอนที่ยิงแอด
Stripe ต่างจากการโอนผ่านสลิปตรงไหนตอนต้องผูกกับ Campaign
ข้อดีของ Stripe คือมันเป็นระบบที่มี Event ชัดเจนในตัวเอง เช่น payment_intent.succeeded หรือ checkout.session.completed ซึ่งบอกได้แน่นอนกว่าสลิปว่ามีการชำระเงินสำเร็จจริงตามกลไกของ Stripe เอง ไม่ต้องพึ่งคนมานั่งตรวจว่าสลิปปลอมหรือไม่
แต่จุดที่เหมือนกับ PromptPay คือ Stripe เองก็ไม่รู้จัก Campaign, UTM หรือ Tracking Link ใด ๆ ทั้งสิ้น มันเห็นแค่ว่ามีการชำระเงินเกิดขึ้นในระบบของมัน ธุรกิจต้องเป็นฝ่ายส่งข้อมูลต้นทางแนบไปพร้อมกับการสร้าง Payment Link หรือ Checkout Session เอง ผ่านช่อง Metadata ที่ Stripe เปิดให้ใช้งาน
ความต่างสำคัญอีกอย่างคือ Stripe มักใช้กับธุรกิจที่ราคาสูงหรือมีรอบการตัดสินใจนานกว่า ทำให้ช่วงเวลาระหว่างคลิกโฆษณากับวันที่จ่ายเงินจริงอาจห่างกันหลายวันถึงหลายสัปดาห์ ยิ่งทำให้การผูกข้อมูลต้นทางไว้ตั้งแต่ต้นสำคัญกว่าการพยายามเดาย้อนหลังจากช่วงเวลา
สร้าง Stripe Payment Link แยกตามแคมเปญได้จริงไหม
ทำได้ในระดับหนึ่ง แต่ต้องเข้าใจข้อจำกัด ถ้าธุรกิจสร้าง Payment Link แยกเป็นชุดต่างหากสำหรับแต่ละแคมเปญ ก็จะพอแยกได้ว่าลิงก์ไหนถูกใช้บ่อยแค่ไหน แต่วิธีนี้จะสร้างภาระดูแลลิงก์จำนวนมากเมื่อแคมเปญเยอะขึ้น และไม่เหมาะกับสถานการณ์ที่แอดมินต้องส่งลิงก์ชำระเงินให้ลูกค้าหลังจากคุยเจรจาราคากันเสร็จแล้ว เพราะราคาสุดท้ายอาจไม่ตรงกับที่ตั้งไว้ล่วงหน้าในลิงก์สำเร็จรูป
แนวทางที่ยืดหยุ่นกว่าคือใช้ Stripe Checkout Session ที่สร้างขึ้นแบบไดนามิกตอนแอดมินกำลังจะปิดการขาย แล้วแนบ Metadata เช่น lead_id, utm_campaign, utm_source เข้าไปในตอนสร้าง Session นั้นเลย วิธีนี้รองรับราคาที่เปลี่ยนแปลงได้ตามการเจรจา และยังเก็บที่มาของ Campaign ไว้ครบ
Stripe Webhook ทำหน้าที่อะไรในการยืนยันว่าเงินเข้าจริง
เมื่อลูกค้าจ่ายเงินสำเร็จ Stripe จะส่ง Event ผ่าน Webhook ไปยัง Endpoint ที่ธุรกิจตั้งค่าไว้ ซึ่งเป็นจุดที่เชื่อถือได้กว่าการรอให้แอดมินมาเช็กหน้า Dashboard เอง เพราะเป็นการแจ้งเตือนแบบ Server to Server ทันทีที่ Event เกิดขึ้นจริงในระบบของ Stripe
สิ่งที่ต้องตั้งค่าให้ถูกต้องคือ Endpoint ต้องพร้อมรับ Event และต้องตรวจสอบ Signature ของ Webhook เพื่อยืนยันว่า Event นั้นมาจาก Stripe จริง ไม่ใช่การปลอมแปลงคำขอเข้ามา เพราะถ้าไม่มีการตรวจ Signature ระบบอาจถูกใครก็ได้ยิง Event ปลอมเข้ามาแล้วทำให้ Conversion ที่ส่งต่อไปยังแพลตฟอร์มโฆษณาผิดเพี้ยน
เมื่อ Webhook ยืนยัน Event สำเร็จแล้ว ระบบฝั่งธุรกิจจะอ่านค่า Metadata ที่แนบไว้ตอนสร้าง Checkout Session ออกมา แล้วนำไปผูกกับ Lead เดิมที่มีที่มาของ Campaign ติดอยู่ ก่อนจะส่ง Conversion กลับแพลตฟอร์มที่เชื่อมต่อ เรื่องกลไกนี้มีรายละเอียดใกล้เคียงกับที่อธิบายไว้ใน การส่ง Event แบบ Server to Server ควรอ่านประกอบกัน
สิ่งที่ต้องตรวจก่อนเชื่อม Stripe Event กับ Campaign Attribution
ก่อนเชื่อว่าระบบทำงานถูกต้องแล้ว ควรตรวจสิ่งเหล่านี้ทุกครั้งที่ตั้งค่าใหม่หรือมีการเปลี่ยนแปลง
- Metadata ที่แนบไปกับ Checkout Session มีค่า utm_campaign หรือ lead_id ครบทุกครั้ง ไม่ใช่บางลิงก์มีบางลิงก์ไม่มี
- Webhook Endpoint ตอบกลับสถานะสำเร็จให้ Stripe ทุกครั้งที่ได้รับ Event ไม่มีปัญหา Timeout หรือ Error ที่ทำให้ Stripe ต้องส่งซ้ำจนเกิด Event ซ้ำ
- มีการตรวจ Signature ของ Webhook ทุกครั้ง ไม่รับ Event ที่ไม่ผ่านการยืนยันแหล่งที่มา
- Currency ที่ตั้งค่าใน Stripe ตรงกับ Currency ที่ใช้รายงานฝั่งแพลตฟอร์มโฆษณา โดยเฉพาะธุรกิจที่รับเงินหลายสกุล
ใช้ Metadata ใน Stripe ผูกกลับไปยัง Lead และ Tracking Link
หัวใจของเรื่องนี้คือ Metadata ไม่ใช่แค่ที่เก็บข้อมูลเสริมเฉย ๆ แต่เป็นสะพานที่เชื่อมโลกของ Stripe กับโลกของ Marketing Attribution เข้าด้วยกัน ถ้าธุรกิจวางแผนตั้งแต่ต้นว่าทุก Checkout Session ต้องมี lead_id ที่อ้างอิงกลับไปยังระบบที่เก็บ Tracking Link ไว้ การผูกข้อมูลย้อนหลังจะทำได้ง่ายมาก
ในทางกลับกัน ถ้าไม่ได้วางแผนตั้งแต่ต้น การพยายามเดาย้อนหลังว่า Order ไหนมาจากแคมเปญไหนจากแค่ชื่อกับอีเมลลูกค้า จะทำได้แค่ระดับ 'อนุมาน' ไม่ใช่ข้อเท็จจริงที่เชื่อถือได้ ยิ่งธุรกิจมีลูกค้าหลายร้อยคนต่อเดือน การอนุมานแบบนี้ยิ่งคลาดเคลื่อนสูง
ธุรกิจที่เคยตั้งค่า WooCommerce คู่กับ LINE OA ตามที่อธิบายไว้ใน การผูก Order เว็บกับ Lead ในแชท จะคุ้นเคยกับหลักการเดียวกัน เพียงแต่ Stripe ใช้ Metadata แทนการเขียน Order Note ด้วยมือ ซึ่งลดความผิดพลาดจากมนุษย์ได้มากกว่า
ธุรกิจที่ใช้ Stripe Subscription ต้องคิดเรื่อง Attribution ต่างจากการขายครั้งเดียวยังไง
ธุรกิจที่ขายคอร์สออนไลน์หรือบริการแบบสมาชิกรายเดือนผ่าน LINE OA มักไม่ได้ใช้ Stripe แค่รับเงินครั้งเดียว แต่ใช้ Stripe Subscription ที่เรียกเก็บเงินซ้ำทุกรอบบิลอัตโนมัติ จุดนี้ทำให้เรื่อง Attribution ซับซ้อนขึ้นอีกชั้น เพราะ Event ที่เกิดขึ้นไม่ได้มีแค่ตอนสมัครครั้งแรก แต่ยังมี invoice.paid ที่เกิดซ้ำทุกเดือนตามรอบบิลของลูกค้าแต่ละคน
คำถามที่ธุรกิจต้องตอบให้ชัดตั้งแต่ต้นคือ จะนับ Conversion ที่ส่งกลับแพลตฟอร์มโฆษณาแค่ตอนสมัครสมาชิกครั้งแรกเท่านั้น หรือจะนับทุกรอบบิลที่ต่ออายุสำเร็จด้วย ถ้าเลือกนับทุกรอบบิล ต้องระวังไม่ให้ Smart Bidding ของแพลตฟอร์มโฆษณาเข้าใจผิดว่ามีลูกค้าใหม่เกิดขึ้นทุกเดือน ทั้งที่ความจริงเป็นแค่ลูกค้าเดิมที่จ่ายเงินซ้ำ เพราะจะทำให้ระบบเรียนรู้ผิดทิศทางว่าแคมเปญไหนสร้างลูกค้าใหม่ได้ดี ทั้งที่จริงแล้วกำลังนับซ้ำจากฐานลูกค้าเดิม
แนวทางที่ปลอดภัยกว่าคือแยก Event สองแบบให้ชัดในระบบภายใน คือ 'First Subscription Created' ที่ผูกกับ Lead และ Campaign ต้นทางแล้วส่งเป็น Conversion แบบ New Customer กับ 'Renewal Payment' ที่นับไว้เพื่อดู Customer Lifetime Value และอัตราการยกเลิกสมาชิก แต่ไม่จำเป็นต้องส่งกลับแพลตฟอร์มโฆษณาในฐานะ Conversion ใหม่ทุกครั้ง เพราะเป้าหมายของงบโฆษณาคือหาลูกค้าใหม่ ไม่ใช่วัดว่าลูกค้าเดิมยังจ่ายเงินต่อหรือไม่
อีกจุดที่ควรตรวจคือกรณีลูกค้ายกเลิกสมาชิกกลางทาง เพราะ Stripe จะส่ง Event เช่น customer.subscription.deleted กลับมา ซึ่งธุรกิจควรบันทึกไว้เพื่อคำนวณ Churn Rate แยกต่างหาก และไม่ควรปล่อยให้ตัวเลข Conversion ที่เคยส่งไปแล้วค้างอยู่โดยไม่มีบริบทว่าลูกค้าคนนั้นยกเลิกไปแล้วตั้งแต่เดือนไหน มิฉะนั้นเวลาเปรียบเทียบ Cost per Acquisition ระหว่างแคมเปญ จะไม่เห็นว่าแคมเปญไหนได้ลูกค้าที่อยู่ยาวกว่ากัน
เทียบ Stripe กับช่องทางรับเงินอื่นตอนต้องผูกกับ Attribution
แต่ละช่องทางรับเงินมีจุดแข็งจุดอ่อนต่างกันตอนต้องเชื่อมกับ Campaign Attribution ตารางนี้สรุปภาพรวมให้เห็นก่อนตัดสินใจว่าจะเน้นช่องทางไหน:
| ช่องทางรับเงิน | มี Event ยืนยันอัตโนมัติไหม | ต้องเติมอะไรเพื่อผูก Campaign |
|---|---|---|
| Stripe | มี ผ่าน Webhook | แนบ Metadata ตั้งแต่สร้าง Checkout Session |
| PromptPay/โอนเงิน | ไม่มี ต้องคนยืนยัน | ผูก Lead ID กับ Tracking Link ก่อนถึงขั้นตอนโอน |
| Opn Payments | มี ผ่าน Webhook/API | ตั้งค่า Reference หรือ Metadata ตาม Integration ที่รองรับ |
ตัวอย่างสมมติ: ผูกยอด Stripe กับ UTM แล้วเจออะไรบ้าง
สมมติธุรกิจขายคอร์สออนไลน์ยิงแอดสองแคมเปญพร้อมกัน แคมเปญ A เจาะกลุ่มคนที่เคยดูวิดีโอฟรีมาก่อน แคมเปญ B เจาะกลุ่มเป้าหมายใหม่ทั้งหมด ในเดือนนั้นแคมเปญ A มี Checkout Session ที่จ่ายสำเร็จ 8 รายการ รวมมูลค่า 96,000 บาท ส่วนแคมเปญ B มี 14 รายการ รวมมูลค่า 84,000 บาท
ถ้าดูแค่จำนวนรายการ แคมเปญ B ดูมีคนซื้อเยอะกว่า แต่พอดูมูลค่าเฉลี่ยต่อรายการ แคมเปญ A อยู่ที่ 12,000 บาทต่อรายการ ในขณะที่แคมเปญ B อยู่ที่ 6,000 บาทต่อรายการ ซึ่งบอกได้ว่ากลุ่มคนที่เคยดูวิดีโอฟรีมาก่อนมีแนวโน้มเลือกแพ็กเกจราคาสูงกว่ากลุ่มเป้าหมายใหม่ที่เพิ่งรู้จักแบรนด์ ข้อมูลนี้จะเห็นได้ก็ต่อเมื่อ Metadata ผูก Lead กับ Campaign ไว้ครบทุกรายการเท่านั้น
ตัวเลขตัวอย่างนี้เป็นกรอบวิเคราะห์เท่านั้น ธุรกิจจริงต้องดูข้อมูลของตัวเองประกอบ เพราะพฤติกรรมลูกค้าคอร์สออนไลน์แต่ละหมวดไม่เหมือนกัน และควรดู การนำยอดขายกลับไปยัง Google Ads ควบคู่กันเมื่อต้องการให้ระบบโฆษณาเรียนรู้จากข้อมูลมูลค่าจริงแทนที่จะดูแค่จำนวน Order
ทำแบบนี้แล้วพัง เพราะอะไร
ทำแบบนี้แล้วพัง เพราะใช้ Payment Link สำเร็จรูปตัวเดียวส่งให้ลูกค้าทุกคนโดยไม่แนบ Metadata อะไรเลย เพราะดูเหมือนง่ายและเร็วในระยะสั้น แต่พอต้องการรู้ว่าใครมาจากแคมเปญไหน ก็ไม่มีข้อมูลอะไรให้ย้อนดูเลย
ทำแบบนี้แล้วพัง เพราะตั้งค่า Webhook Endpoint ไว้แต่ไม่เคยทดสอบว่ารับ Event จริงได้หรือไม่ พอเซิร์ฟเวอร์มีปัญหาชั่วคราวหรือ Endpoint เปลี่ยนที่อยู่โดยไม่ได้อัปเดต Stripe ก็ไม่มีใครรู้ว่า Event หายไปหลายวันจนกว่าจะมีคนสังเกตว่ารายงานยอดขายไม่ขยับ
ทำแบบนี้แล้วพัง เพราะไม่ตรวจ Signature ของ Webhook แล้วเปิดรับ Event จากทุกคำขอที่ยิงเข้ามา ทำให้เสี่ยงต่อการมี Event ปลอมปนเข้าไปในระบบ ซึ่งกระทบทั้งความน่าเชื่อถือของ Revenue และ Conversion ที่ส่งกลับแพลตฟอร์มโฆษณา
สรุป
Stripe ให้ Event ที่เชื่อถือได้เรื่องการชำระเงินสำเร็จ แต่ตัวมันเองไม่รู้จัก Campaign หรือ UTM ใด ๆ ธุรกิจต้องเป็นฝ่ายวางแผนแนบข้อมูลต้นทางไว้ใน Metadata ตั้งแต่ตอนสร้าง Checkout Session ไม่ใช่พยายามเดาย้อนหลังทีหลัง
สิ่งที่ควรทำต่อจากนี้คือตรวจดูว่า Checkout Session ที่ใช้อยู่ตอนนี้แนบ lead_id หรือข้อมูลแคมเปญไว้ครบหรือยัง แล้วทดสอบ Webhook Endpoint ให้แน่ใจว่ารับ Event ได้จริงก่อนเริ่มใช้งานเต็มรูปแบบ
- Stripe มี Event ยืนยันการจ่ายเงินชัดเจน แต่ไม่รู้จัก Campaign เองโดยอัตโนมัติ
- ต้องแนบ Metadata เช่น lead_id และ utm_campaign ตั้งแต่ตอนสร้าง Checkout Session
- Webhook ต้องมีการตรวจ Signature และกันซ้ำด้วย Event ID เสมอ
- เทียบมูลค่าเฉลี่ยต่อ Order ควบคู่กับจำนวน Order ก่อนสรุปว่าแคมเปญไหนคุ้มค่ากว่า
คำถามที่พบบ่อย
Stripe LINE OA conversion tracking ต้องมี Developer มาช่วยตั้งค่าไหม
ส่วนที่เกี่ยวกับ Webhook Endpoint และการแนบ Metadata ตอนสร้าง Checkout Session มักต้องมีคนที่เข้าใจโค้ดหรือ API ช่วยตั้งค่า เพราะเป็นการเขียนโปรแกรมเชื่อมระบบ ไม่ใช่แค่คลิกตั้งค่าในหน้า Dashboard อย่างเดียว
ถ้าลูกค้าขอคืนเงินหลังจ่ายผ่าน Stripe แล้ว ต้องทำอะไรกับ Conversion ที่ส่งไปแล้ว
ควรส่ง Conversion Adjustment หรือปรับยอดย้อนหลังตามกลไกที่แพลตฟอร์มโฆษณานั้นรองรับ เพื่อไม่ให้ Revenue ที่รายงานไปแล้วสูงเกินจริงจากยอดที่ถูกคืนไปแล้ว
Metadata ใน Stripe เก็บข้อมูลได้จำกัดไหม
มีข้อจำกัดเรื่องจำนวนและขนาดของ Metadata ตามเอกสารของ Stripe ที่ควรตรวจสอบล่าสุดก่อนออกแบบ จึงควรเก็บเฉพาะค่าที่จำเป็นจริง เช่น lead_id หรือรหัสอ้างอิงสั้น ๆ แทนการยัดข้อมูลดิบจำนวนมากเข้าไปทั้งหมด
ใช้ Stripe คู่กับ PromptPay พร้อมกันได้ไหมสำหรับธุรกิจเดียว
ได้ หลายธุรกิจเปิดทั้งสองช่องทางให้ลูกค้าเลือก แต่ต้องออกแบบให้ทั้งสองฝั่งมีวิธีผูกกลับไปยัง Lead และ Campaign ต้นทางเหมือนกัน ไม่ใช่ทำระบบติดตามให้ Stripe อย่างเดียวแล้วปล่อย PromptPay ไปตามยถากรรม
Webhook ของ Stripe ส่ง Event ซ้ำได้ไหม และต้องกันซ้ำยังไง
ส่งซ้ำได้ในบางกรณี เช่นถ้า Endpoint ตอบกลับช้าจน Stripe คิดว่าล้มเหลว ควรใช้ Event ID ที่ Stripe ส่งมาเป็นกุญแจกันซ้ำ ไม่บันทึกหรือส่ง Conversion ซ้ำสำหรับ Event ID เดียวกัน
ต้องส่ง Conversion ไปทุกแพลตฟอร์มที่เชื่อมต่อไว้พร้อมกันไหม
ไม่จำเป็นต้องส่งทุกแพลตฟอร์มพร้อมกันเสมอไป ขึ้นอยู่กับว่าธุรกิจใช้งบโฆษณากับแพลตฟอร์มไหนอยู่จริง และแต่ละแพลตฟอร์มมีวิธีตั้งค่า Conversion Action ที่ต่างกัน ควรเลือกส่งเฉพาะที่เชื่อมต่อและตั้งค่าไว้ถูกต้องแล้วเท่านั้น
ลองตรวจด้วยตัวเอง
ตรวจ Tracking โฆษณาเข้า LINE
ใส่ URL หน้า Landing ของคุณ แล้วดูว่าเส้นทาง Ads → LINE ของคุณวัดผลได้จริงหรือขาดตรงไหน
ตรวจ Tracking ฟรี →ใช้ฟรี ไม่ต้องสมัคร ไม่เก็บข้อมูลที่คุณกรอก
อ่านต่อแบบเจาะลึก
รู้ว่าโฆษณาเข้า LINE ทำยอดขายจริงแค่ไหน
linli ติดตามลูกค้าตั้งแต่คลิกโฆษณา กดเพิ่มเพื่อน ทักแชท จนปิดการขาย พร้อมส่ง Conversion กลับแพลตฟอร์มโฆษณา เริ่มฟรี 14 วัน
ทดลองใช้ฟรี 14 วันบทความที่เกี่ยวข้อง

เชื่อม Opn Payments แบบ Webhook กับแบบเข้าไปดูเองใน Dashboard ต่างกันตรงไหนตอนผูก Campaign

แอดมินปิดแชทได้เป็นร้อยเคสต่อวัน แต่เจ้าของยังไม่รู้ว่าเคสไหนสร้างเงินจริง
