# Supabase + Brew

เริ่มระบบอัตโนมัติของ Brew จากเว็บฮุกฐานข้อมูลของตาราง auth.users ใน Supabase รวมถึงเหตุการณ์ที่อนุมานได้สำหรับการยืนยันอีเมล การเปลี่ยนรหัสผ่าน การอัปเกรดจากผู้ใช้นิรนามเป็นผู้ใช้จริง และการแบนหรือยกเลิกแบน

URL หลัก: https://brew.new/th/browse/integrations/supabase

- ทิศทาง: ข้อมูลขาเข้า
- การเชื่อมต่อ: คีย์ลับเว็บฮุก
- ทริกเกอร์จากเหตุการณ์การยืนยันตัวตน

## ความสามารถที่ใช้ได้แล้ว

- **ทริกเกอร์จากเหตุการณ์**: เริ่มระบบอัตโนมัติของ Brew จากเว็บฮุกฐานข้อมูลของตาราง auth.users ใน Supabase รวมถึงเหตุการณ์ที่อนุมานได้สำหรับการยืนยันอีเมล การเปลี่ยนรหัสผ่าน และการเข้าสู่ระบบ

## เปลี่ยนเหตุการณ์การยืนยันตัวตนให้เป็นอีเมลที่มีประโยชน์

เชื่อมต่อ Supabase เพื่อเริ่มส่งอีเมลที่ตรงกับแบรนด์เมื่อมีผู้สมัครใช้งาน ยืนยันอีเมล เปลี่ยนรหัสผ่าน หรือถูกแบน สคริปต์ตั้งค่าจะเพิ่มทริกเกอร์ฐานข้อมูลให้ตาราง auth.users ของคุณ และ Brew จะแปลงการเปลี่ยนแปลงแต่ละครั้งเป็นหนึ่งใน 12 ทริกเกอร์ของระบบอัตโนมัติ

Supabase Auth ยังคงดูแลการเข้าสู่ระบบ, ลิงก์ยืนยัน, Magic Link และการรีเซ็ตรหัสผ่าน ส่วน Brew สร้างและส่งอีเมลที่ตามมาหลังการเปลี่ยนแปลงเหล่านั้น


## สิ่งที่คุณสร้างได้

- อีเมลต้อนรับ: เริ่มจาก auth.user.email_confirmed เพื่อให้อีเมลฉบับแรกถึงเฉพาะที่อยู่ที่ยืนยันแล้ว Brew อนุมานเหตุการณ์นี้จากการอัปเดตที่ตั้งค่า email_confirmed_at เท่านั้น ผู้ใช้ที่แถวถูกสร้างขึ้นโดยยืนยันอีเมลไว้แล้วจึงทำให้เกิดเพียง auth.user.created ตรวจสอบว่าโปรเจกต์ของคุณเป็นกรณีใด แล้วเลือกทริกเกอร์เพียงตัวเดียวเพื่อไม่ให้ส่งอีเมลต้อนรับซ้ำ
- อีเมลต้อนรับเมื่อผู้เยี่ยมชมสมัครบัญชี: auth.user.upgraded_from_anonymous เกิดขึ้นเมื่อ is_anonymous เปลี่ยนจาก true เป็น false ซึ่งก็คือตอนที่ผู้ใช้นิรนามกลายเป็นบัญชีถาวร
- อีเมลแจ้งเปลี่ยนรหัสผ่าน: auth.user.password_changed เกิดขึ้นเมื่อ encrypted_password มีการเปลี่ยนแปลงใด ๆ โดยเพย์โหลดไม่มีข้อมูลรหัสผ่าน ให้ลิงก์ไปยังหน้ากู้คืนบัญชีของคุณเอง เผื่อในกรณีที่ผู้ใช้ไม่ได้เปลี่ยนรหัสผ่านเอง
- อีเมลแจ้งเปลี่ยนที่อยู่อีเมล: auth.user.email_changed มีที่อยู่เดิมใน previousValue และที่อยู่ใหม่ใน newValue โดย Brew จะส่งไปยังที่อยู่ใหม่
- อีเมลติดตามคำเชิญ: auth.user.invited เกิดขึ้นเมื่อมีการอัปเดตที่ตั้งค่า invited_at โดย Supabase Auth จะส่งลิงก์คำเชิญเอง และอีเมลจาก Brew ช่วยเพิ่มข้อมูลแนะนำการใช้งานได้ ส่งคำเชิญทดสอบจริงจากโปรเจกต์ของคุณก่อนจะใช้ทริกเกอร์นี้
- อีเมลแจ้งการระงับบัญชี: auth.user.banned เกิดขึ้นเมื่อมีการตั้งค่า banned_until และมีค่านั้นใน newValue ส่วน auth.user.unbanned เกิดขึ้นเมื่อ banned_until ถูกล้างค่า
- อีเมลยืนยันการลบบัญชี: auth.user.deleted เกิดขึ้นเมื่อแถวถูกลบ และยังมีที่อยู่อีเมลจากแถวนั้นอยู่

## เหตุการณ์การเข้าสู่ระบบไม่ได้หมายถึงการกลับมาใช้งาน

auth.user.signed_in เกิดขึ้นเมื่อ last_sign_in_at เปลี่ยน การรีเฟรชโทเค็นของ Supabase ก็เปลี่ยนคอลัมน์นี้ด้วย เหตุการณ์นี้จึงอาจเกิดซ้ำหลายครั้งขณะที่ผู้ใช้ยังเข้าสู่ระบบอยู่ และไม่ได้แสดงว่ามีคนกลับมาใช้งานหลังจากหายไปนาน

เหตุการณ์นี้ยังเป็นเหตุการณ์ที่อนุมานได้ซึ่งมีลำดับความสำคัญต่ำที่สุด เมื่อการอัปเดตเดียวกันยืนยันอีเมลหรืออัปเกรดผู้ใช้นิรนาม Brew จะส่งเหตุการณ์นั้นออกมาแทน auth.user.signed_in

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

ทดสอบทั้งสองเส้นทาง: ผู้ใช้ที่ไม่ได้ใช้งานจะได้รับอีเมลถามไถ่ ส่วนผู้ใช้ที่มีการใช้งานก่อนการตรวจสอบจะไม่ได้รับ


## ตั้งค่า Supabase ใน Brew

- เปิดหน้า “การเชื่อมต่อ” เลือก Supabase แล้วเลือก “สร้าง URL เว็บฮุก” Brew จะใส่ URL นั้นไว้ใน SQL สำหรับตั้งค่าให้แล้ว
- สร้างคีย์ลับสำหรับลงนามด้วย openssl rand -hex 32 โดย Brew และ Supabase ไม่ได้ออกคีย์นี้ให้ และ Brew กำหนดให้คีย์ยาวอย่างน้อย 16 อักขระ
- ใน Supabase ให้เปิด SQL Editor แล้ววาง SQL สำหรับตั้งค่า แทนที่ตัวยึดตำแหน่งของคีย์ลับด้วยคีย์ลับของคุณ แล้วจึงรัน โดย SQL นี้จะเปิดใช้ส่วนขยาย pgcrypto และ pg_net แล้วจัดเก็บคีย์ลับไว้ใน Supabase Vault และเพิ่มทริกเกอร์ฐานข้อมูลให้ auth.users สำหรับการเพิ่ม การอัปเดต และการลบแถว
- วางคีย์ลับเดียวกันลงใน Brew แล้วเลือก “เชื่อมต่อ” จากนั้น Brew จะสร้างทริกเกอร์ให้ครบทั้ง 12 เหตุการณ์ โดยไม่มีสวิตช์เปิดหรือปิดเหตุการณ์
- หลังเชื่อมต่อแล้ว ให้สร้างผู้ใช้ทดสอบใน Supabase ที่ Authentication > Users สถานะใน Brew จะเปลี่ยนจาก “รอเหตุการณ์ทดสอบ” เป็น “เชื่อมต่อแล้ว” และส่วน “เหตุการณ์ล่าสุด” จะแสดงเหตุการณ์ที่ส่งมาพร้อมสถานะ “ลายเซ็นถูกต้อง”
- สร้างระบบอัตโนมัติ เลือกเหตุการณ์ Supabase ที่ใช้ แล้วส่งทดสอบขณะที่ยังเป็น “ฉบับร่าง” เฉพาะระบบอัตโนมัติที่ “ทำงานอยู่” เท่านั้นที่จะทำงานเมื่อได้รับเหตุการณ์ที่ตรงกัน
- คุณต้องมีสิทธิ์รัน SQL กับสคีมา auth, ติดตั้งส่วนขยาย และเขียนข้อมูลลงใน Supabase Vault ทั้งนี้การรัน SQL ซ้ำหลังเปลี่ยนคีย์ลับใหม่นั้นปลอดภัย

## เหตุการณ์ Supabase ที่รองรับ

auth.user.created, auth.user.updated และ auth.user.deleted มาจากการเพิ่ม การอัปเดต และการลบแถวใน auth.users ส่วนเหตุการณ์อื่น Brew อนุมานจากการอัปเดตโดยเปรียบเทียบแถวเดิมกับแถวใหม่

การอัปเดตหนึ่งครั้งทำให้เกิดเหตุการณ์เดียว เมื่อหลายคอลัมน์เปลี่ยนพร้อมกัน รายการแรกที่ตรงตามลำดับนี้จะถูกใช้: email_confirmed, phone_confirmed, upgraded_from_anonymous, email_changed, password_changed, banned, unbanned, invited, signed_in ส่วนการอัปเดตที่ไม่ตรงกับรายการใดเลยจะมาเป็น auth.user.updated

Brew รองรับประเภทเหตุการณ์ 12 ประเภทต่อไปนี้:

- auth.user.created
- auth.user.updated
- auth.user.deleted
- auth.user.email_confirmed
- auth.user.phone_confirmed
- auth.user.email_changed
- auth.user.password_changed
- auth.user.signed_in
- auth.user.banned
- auth.user.unbanned
- auth.user.invited
- auth.user.upgraded_from_anonymous

## การซิงค์ผู้ติดต่อและการปรับเนื้อหาเฉพาะบุคคล

เหตุการณ์ที่ยืนยันแล้วแต่ละรายการซึ่งมีที่อยู่อีเมลจริงจะสร้างหรืออัปเดตผู้ติดต่อใน Brew โดยจับคู่ตามอีเมล ไม่ว่าจะมีระบบอัตโนมัติใช้เหตุการณ์นั้นหรือไม่ก็ตาม หากมีข้อมูล Brew จะบันทึกชื่อ-นามสกุล, supabase_user_id, supabase_phone, supabase_role, supabase_full_name, supabase_avatar_url และ supabase_provider ด้วย

บางเหตุการณ์ยังตั้งค่าฟิลด์เกี่ยวกับวงจรชีวิตของบัญชีด้วย โดย supabase_account_status จะเป็น active, invited, banned หรือ deleted ส่วน supabase_email_verified_at, supabase_phone_verified_at และ supabase_last_sign_in_at มาจากเหตุการณ์การยืนยันและการเข้าสู่ระบบที่ตรงกัน

ใช้สคีมาเพย์โหลดที่ประกาศไว้ของเหตุการณ์ที่เลือกสำหรับแท็กตัวแปร ทุกเหตุการณ์มี email และหากมีข้อมูล จะมี firstName, lastName, fullName, displayName, avatarUrl, phone, role, provider, createdAt, lastSignInAt และ emailConfirmedAt ด้วย ชื่อและรูปโปรไฟล์มาจาก raw_user_meta_data โดยมีค่าสำรองสำหรับผู้ที่สมัครผ่าน OAuth ส่วน timestamp ทั้งสามเป็นเวลาแบบ Unix หน่วยวินาที

เหตุการณ์ที่อนุมานได้จะเพิ่ม previousValue, newValue หรือทั้งสองฟิลด์ ซึ่งเก็บค่าเดิมและค่าใหม่ของคอลัมน์เป็นข้อความ โดย auth.user.password_changed ไม่มีทั้งสองฟิลด์ ส่วน provider เก็บวิธีสมัครใช้งาน เช่น email, google หรือ github คุณจึงแยกโฟลว์ต้อนรับตามวิธีที่ผู้ใช้สมัครได้

ID ผู้ใช้ของ Supabase ไม่ใช่แท็กตัวแปร แต่ Brew จะจัดเก็บไว้ในผู้ติดต่อเป็น supabase_user_id เพื่อใช้กรองและแบ่งเซกเมนต์

การมีบัญชี Supabase ไม่ถือเป็นความยินยอมรับอีเมลการตลาด ให้บันทึกความยินยอมตอนสมัครใช้งาน และตรวจสอบก่อนส่งอีเมลโปรโมชัน


## Brew ส่งอีเมลยืนยันตัวตนแทน Supabase ไหม?

ไม่ส่ง เพราะ Supabase Auth ยังคงส่งลิงก์ยืนยัน, Magic Link, คำเชิญ และอีเมลรีเซ็ตรหัสผ่านผ่านการตั้งค่าอีเมลของตัวเอง เช่น SMTP ที่กำหนดเอง ส่วน Brew จะเริ่มระบบอัตโนมัติหลังการเปลี่ยนแปลงเหล่านั้นไปถึง auth.users แล้ว และ Supabase แนะนำให้แยกโดเมนผู้ส่งสำหรับอีเมลยืนยันตัวตนและอีเมลการตลาด


## ทำไมมีเหตุการณ์เข้ามาแต่ไม่มีการส่งอีเมล?

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


## ข้อจำกัดและการแก้ปัญหา

- Brew อ่านเฉพาะ auth.users เท่านั้น สำหรับเหตุการณ์จากตารางอื่น ให้สร้างทริกเกอร์ที่กำหนดเองใน Brew แล้วเรียกทริกเกอร์นั้นผ่าน API ของ Brew จากแอปพลิเคชันของคุณหรือจาก Supabase Edge Function
- Brew สร้าง แบน หรือลบผู้ใช้ Supabase ไม่ได้ และไม่ได้ส่งอีเมลของ Supabase Auth
- หากเหตุการณ์ที่ส่งมาไม่ผ่านการตรวจสอบลายเซ็น แสดงว่าคีย์ลับใน Supabase Vault ไม่ตรงกับคีย์ลับใน Brew ให้สร้างคีย์ลับใหม่ รัน SQL สำหรับตั้งค่าอีกครั้งด้วยคีย์นั้น แล้วเชื่อมต่อ Supabase ใน Brew อีกครั้งด้วยค่าเดียวกัน
- หากไม่มีเหตุการณ์เข้ามาเลย ให้รัน SQL สำหรับตั้งค่าอีกครั้ง แล้วตรวจสอบว่าได้ติดตั้ง pgcrypto แล้ว และคีย์ลับใน Vault ตรงกับคีย์ลับใน Brew
- หลังเกิด auth.user.email_changed แล้ว Brew จะสร้างหรืออัปเดตผู้ติดต่อที่ใช้ที่อยู่ใหม่ ส่วนผู้ติดต่อที่ใช้ที่อยู่เดิมจะคงไว้ตามเดิม
- auth.user.deleted จะตั้งค่า supabase_account_status เป็น deleted แต่ไม่ได้ลบผู้ติดต่อออกจาก Brew
- ตรวจสอบความยินยอมและวัตถุประสงค์ของอีเมลแต่ละฉบับ การซิงค์ผู้ใช้ Supabase ไม่ได้ทำให้คุณมีสิทธิ์ส่งอีเมลโปรโมชัน

## แหล่งอ้างอิงและคู่มือการตั้งค่า

- [เปรียบเทียบเครื่องมืออีเมลที่ใช้กับ Supabase](/th/blog/best-email-tools-for-supabase-auth-emails-product-events-and-lifecycle-campaigns)
- [คู่มือการตั้งค่า Supabase](https://docs.brew.new/integrations/import/supabase)
- [สร้างระบบอัตโนมัติ](https://docs.brew.new/create-emails/build-an-automation)
- [แท็กตัวแปร](https://docs.brew.new/create-emails/merge-tags)
- [สิ่งที่คุณส่งได้ด้วย Brew](https://docs.brew.new/get-started/what-you-can-send)
- [เว็บฮุกฐานข้อมูลของ Supabase](https://supabase.com/docs/guides/database/webhooks)
- [ฟิลด์ผู้ใช้ของ Supabase](https://supabase.com/docs/guides/auth/users)
- [SMTP ที่กำหนดเองของ Supabase](https://supabase.com/docs/guides/auth/auth-smtp)

## ที่เกี่ยวข้อง

- [การเชื่อมต่อทั้งหมด](https://brew.new/th/browse/integrations.md)
- [สมัครใช้งาน](https://brew.new/th/sign-up.md)
- เว็บไซต์: https://brew.new
