# Clerk + Brew

เริ่มระบบอัตโนมัติของ Brew จากเหตุการณ์เว็บฮุกของ Clerk เมื่อมีผู้ใช้สมัครใช้งาน องค์กรมีการเปลี่ยนแปลง มีการสมัครสมาชิกแบบชำระเงิน หรือมีผู้ลงชื่อในรายชื่อรอ

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

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

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

- **ทริกเกอร์จากเหตุการณ์**: เริ่มระบบอัตโนมัติของ Brew จากเหตุการณ์เว็บฮุกของ Clerk 13 รายการ ในหมวดผู้ใช้ องค์กร การเรียกเก็บเงิน และรายชื่อรอ

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

เชื่อมต่อ Clerk เพื่อเริ่มส่งอีเมลที่ตรงกับแบรนด์เมื่อมีผู้สมัครใช้งาน เข้าร่วมองค์กร เริ่มการสมัครสมาชิกผ่าน Clerk Billing หรือลงชื่อในรายชื่อรอของคุณ โดย Clerk จะลงนามเว็บฮุกทุกรายการ และ Brew จะเปลี่ยนเหตุการณ์ 13 ประเภทให้เป็นทริกเกอร์ของระบบอัตโนมัติ

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


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

- อีเมลต้อนรับ: user.created เกิดขึ้นเมื่อมีผู้ใช้ใหม่สมัครใช้งาน นอกจากชื่อแล้ว ยังมี username, imageUrl และ lastSignInAt ให้ใช้ด้วย
- อีเมลแนะนำการใช้งานสำหรับทีม: organizationMembership.created มี organizationName, organizationSlug และ roleName ของสมาชิกใหม่ ไม่ว่าสมาชิกจะเข้าร่วมด้วยการตอบรับคำเชิญหรือถูกเพิ่มเข้ามาโดยตรง ทั้งนี้ organizationInvitation.accepted ก็เกิดขึ้นเมื่อมีการตอบรับคำเชิญเช่นกัน จึงควรเลือกทริกเกอร์เพียงตัวเดียวเพื่อไม่ให้ส่งอีเมลต้อนรับซ้ำ
- อีเมลติดตามคำเชิญ: organizationInvitation.created, organizationInvitation.accepted และ organizationInvitation.revoked ส่งถึงที่อยู่อีเมลที่ได้รับเชิญ และมี roleName, status และ expiresAt แต่ไม่มีชื่อองค์กร ผู้เชิญ หรือลิงก์สำหรับตอบรับคำเชิญ
- อีเมลต้อนรับผู้สมัครสมาชิก: subscription.created มี planName, planSlug, planAmount, currency, periodStart และ periodEnd
- อีเมลเตือนช่วงทดลองใช้: subscriptionItem.freeTrialEnding เกิดขึ้นไม่นานก่อนที่ช่วงทดลองใช้ฟรีของ Clerk Billing จะเปลี่ยนเป็นการสมัครสมาชิกแบบชำระเงิน พร้อม planName, planAmount, currency และ periodEnd
- อีเมลแจ้งเลยกำหนดชำระ: subscriptionItem.pastDue เกิดขึ้นเมื่อรายการในการสมัครสมาชิกไม่ได้ชำระเงินตามกำหนด ให้ลิงก์ไปยังหน้าการเรียกเก็บเงินของคุณเอง
- อีเมลติดตามหลังการยกเลิกและหลังช่วงทดลองใช้ที่ถูกทิ้ง: subscriptionItem.canceled เกิดขึ้นเมื่อรายการถูกยกเลิก ส่วน subscriptionItem.abandoned มักหมายความว่าช่วงทดลองใช้สิ้นสุดลงโดยไม่มีวิธีการชำระเงินที่บันทึกไว้
- อีเมลยืนยันการลงชื่อในรายชื่อรอ: waitlistEntry.created เกิดขึ้นเมื่อมีที่อยู่อีเมลใหม่เข้าสู่รายชื่อรอใน Clerk ของคุณ

## เหตุการณ์องค์กรต้องมีผู้สร้างที่ Brew รู้จัก

organization.created ไม่มีที่อยู่อีเมล Brew จะค้นหา ID ผู้ใช้ของผู้สร้างจากตัวตนที่เคยพบในเหตุการณ์ Clerk ก่อนหน้าของการเชื่อมต่อปัจจุบัน หากพบอีเมลจริง เหตุการณ์จะดำเนินต่อตามปกติ แต่หากไม่พบ Brew จะบันทึกเหตุการณ์นั้นว่าระบุผู้รับไม่ได้ ไม่สร้างผู้ติดต่อ และไม่เริ่มระบบอัตโนมัติ

ให้สมัครรับ user.created ไว้ด้วย เพื่อให้ Brew รู้ที่อยู่อีเมลของผู้สร้าง สำหรับอีเมลที่ต้องถึงผู้รับทุกครั้ง ให้ใช้ organizationMembership.created ซึ่งมีที่อยู่อีเมลของสมาชิก


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

- เปิดหน้า “การเชื่อมต่อ” เลือก Clerk แล้วเลือก “สร้าง URL เว็บฮุก”
- ในแดชบอร์ด Clerk ให้เปิด Webhooks แล้วเพิ่มเอนด์พอยต์โดยใช้ URL ของ Brew
- ให้เอนด์พอยต์สมัครรับเหตุการณ์ที่รองรับทั้ง 13 รายการในกลุ่ม user, organization, organizationInvitation, organizationMembership, paymentAttempt, subscription, subscriptionItem และ waitlistEntry แล้วจึงสร้างเอนด์พอยต์
- แสดงคีย์ลับสำหรับลงนามของเอนด์พอยต์ซึ่งขึ้นต้นด้วย whsec_ วางลงใน Brew แล้วเลือก “เชื่อมต่อ” โดย Brew จะตรวจสอบเว็บฮุกที่ส่งมาทุกรายการตามข้อกำหนด Standard Webhooks (Svix)
- ใน Clerk ให้เปิดแท็บ Testing ของเอนด์พอยต์ เลือก user.created แล้วเลือก “Send Example” สถานะใน Brew จะเปลี่ยนจาก “รอเหตุการณ์ทดสอบ” เป็น “เชื่อมต่อแล้ว” ตัวอย่างนี้ใช้ยืนยันเว็บฮุกเท่านั้น โดย Brew จะไม่เพิ่มผู้ติดต่อและไม่เริ่มระบบอัตโนมัติ
- เมื่อเลือก “เชื่อมต่อ” Brew จะสร้างทริกเกอร์ให้ครบทั้ง 13 เหตุการณ์ โดยไม่มีสวิตช์เปิดหรือปิดเหตุการณ์
- สร้างระบบอัตโนมัติ เลือกเหตุการณ์ Clerk ที่ใช้ แล้วส่งทดสอบขณะที่ยังเป็น “ฉบับร่าง” เฉพาะระบบอัตโนมัติที่ “ทำงานอยู่” เท่านั้นที่จะทำงานเมื่อได้รับเหตุการณ์ที่ตรงกัน

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

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

- user.created
- organization.created
- organizationInvitation.created
- organizationInvitation.accepted
- organizationInvitation.revoked
- organizationMembership.created
- paymentAttempt.created
- subscription.created
- subscriptionItem.freeTrialEnding
- subscriptionItem.pastDue
- subscriptionItem.canceled
- subscriptionItem.abandoned
- waitlistEntry.created

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

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

user.created ยังบันทึก clerk_username, clerk_image_url, clerk_signed_up_at และ clerk_last_sign_in_at ด้วย เหตุการณ์คำเชิญและการเป็นสมาชิกองค์กรจะบันทึก clerk_organization_id, clerk_org_role และ clerk_org_role_name โดยคำเชิญจะเพิ่ม clerk_org_invitation_status ส่วนการเป็นสมาชิกจะเพิ่ม clerk_organization_name และ clerk_organization_slug

เหตุการณ์การเรียกเก็บเงินจะบันทึก clerk_subscription_status และ clerk_plan_name โดยบางเหตุการณ์จะเพิ่ม clerk_plan_slug, clerk_subscription_period_end หรือ clerk_is_trialing ด้วย ส่วน paymentAttempt.created จะบันทึก clerk_last_payment_attempt_status และ clerk_last_payment_attempt_at และ waitlistEntry.created จะบันทึก clerk_waitlist_status

ใช้สคีมาเพย์โหลดที่ประกาศไว้ของเหตุการณ์ที่เลือกสำหรับแท็กตัวแปร ทุกเหตุการณ์มี email, firstName, lastName และ createdAt ส่วนฟิลด์อื่นขึ้นอยู่กับเหตุการณ์ เช่น planName, planAmount, roleName, organizationName และ grandTotalFormatted ค่า planAmount และ grandTotalAmount อยู่ในหน่วยย่อยที่สุดของสกุลเงิน ดังนั้น 2000 จึงเท่ากับ $20.00 ในสกุล USD ส่วน timestamp เป็นเวลาแบบ Unix หน่วยวินาที

ID ของออบเจ็กต์ Clerk เช่น ID ผู้ใช้, ID องค์กร และ ID การสมัครสมาชิก ไม่ใช่แท็กตัวแปร ส่วน ID ผู้ใช้จะถูกบันทึกไว้ในผู้ติดต่อเป็น clerk_user_id

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


## ใช้ paymentAttempt.created ส่งอีเมลแจ้งการชำระเงินไม่สำเร็จได้ไหม?

ไม่เสมอไป Brew ได้รับเฉพาะ paymentAttempt.created เท่านั้น ไม่ได้รับการอัปเดตของความพยายามชำระเงินครั้งนั้นในภายหลัง ฟิลด์ status อาจเป็น pending, paid หรือ failed แต่การชำระเงินที่ไม่สำเร็จหลังจากสร้างความพยายามชำระเงินไปแล้วจะมาถึง Brew เป็นเหตุการณ์ที่ไม่รองรับ สำหรับการชำระเงินที่เลยกำหนด ให้ใช้ subscriptionItem.pastDue และหากต้องการแสดงยอดรวมในเนื้อหาอีเมล ให้ใช้ grandTotalFormatted ซึ่งเก็บค่าที่จัดรูปแบบไว้แล้ว เช่น $22.00


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

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


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

- Brew สร้างหรือแก้ไขผู้ใช้ องค์กร หรือการสมัครสมาชิกใน Clerk ไม่ได้
- เฉพาะ 13 เหตุการณ์ในรายการเท่านั้นที่เริ่มระบบอัตโนมัติได้ ส่วนเหตุการณ์อื่นของ Clerk เช่น การอัปเดตและการลบผู้ใช้ จะถูกบันทึกว่าเป็นเหตุการณ์ที่ไม่รองรับ
- หาก Clerk แจ้งรหัส 401 ทุกครั้งที่ส่งเว็บฮุก แสดงว่าคีย์ลับสำหรับลงนามใน Brew ไม่ตรงกับคีย์ลับของเอนด์พอยต์ใน Clerk ให้แสดงคีย์ลับปัจจุบันใน Clerk แล้วเชื่อมต่ออีกครั้งด้วยคีย์นั้น
- Brew กำหนดให้คีย์ลับสำหรับลงนามต้องขึ้นต้นด้วย whsec_ และยาวอย่างน้อย 24 อักขระ
- ตรวจสอบความยินยอมและวัตถุประสงค์ของอีเมลแต่ละฉบับ การซิงค์ผู้ใช้ Clerk ไม่ได้ทำให้คุณมีสิทธิ์ส่งอีเมลโปรโมชัน

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

- [คู่มือการตั้งค่า Clerk](https://docs.brew.new/integrations/import/clerk)
- [สร้างระบบอัตโนมัติ](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)
- [ภาพรวมเว็บฮุกของ Clerk](https://clerk.com/docs/guides/development/webhooks/overview)

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

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