# Supabase + Brew

Kích hoạt tự động hóa trong Brew từ database webhook trên bảng auth.users của Supabase, bao gồm các sự kiện phái sinh khi xác nhận email, đổi mật khẩu, nâng cấp từ tài khoản ẩn danh lên tài khoản thật, cũng như cấm hoặc bỏ cấm.

URL chính tắc: https://brew.new/vi/browse/integrations/supabase

- Chiều dữ liệu: Dữ liệu vào
- Kết nối: Webhook secret
- Trình kích hoạt sự kiện xác thực

## Tính năng đang hoạt động

- **Trình kích hoạt sự kiện**: Kích hoạt tự động hóa trong Brew từ database webhook trên bảng auth.users của Supabase, bao gồm các sự kiện phái sinh khi xác nhận email, đổi mật khẩu và đăng nhập.

## Biến sự kiện xác thực thành email hữu ích

Kết nối Supabase để bắt đầu gửi email chuẩn thương hiệu khi có người đăng ký, xác nhận email, đổi mật khẩu hoặc bị cấm. Một script thiết lập sẽ thêm trigger cơ sở dữ liệu vào bảng auth.users của bạn, và Brew biến mỗi thay đổi thành một trong 12 trình kích hoạt tự động hóa.

Supabase Auth vẫn chịu trách nhiệm về đăng nhập, liên kết xác nhận, magic link và đặt lại mật khẩu. Brew tạo và gửi các email theo sau những thay đổi đó.


## Bạn có thể xây dựng gì

- Email chào mừng: bắt đầu từ sự kiện auth.user.email_confirmed để email đầu tiên chỉ đến các địa chỉ đã xác minh. Brew chỉ suy ra sự kiện này từ một lệnh cập nhật có đặt giá trị cho email_confirmed_at, nên nếu hàng của người dùng được tạo ra ở trạng thái đã xác nhận sẵn, bạn sẽ chỉ nhận được auth.user.created. Hãy kiểm tra trường hợp nào áp dụng cho dự án của bạn, rồi chỉ chọn một trình kích hoạt để tránh gửi email chào mừng trùng lặp.
- Email chào mừng khi khách chuyển thành tài khoản chính thức: sự kiện auth.user.upgraded_from_anonymous xảy ra khi is_anonymous chuyển từ true sang false, tức là lúc người dùng ẩn danh trở thành tài khoản chính thức.
- Thông báo đổi mật khẩu: sự kiện auth.user.password_changed xảy ra khi encrypted_password có bất kỳ thay đổi nào. Payload không mang theo dữ liệu mật khẩu. Hãy dẫn liên kết tới trang khôi phục tài khoản của riêng bạn, phòng khi người dùng không phải là người thực hiện thay đổi.
- Thông báo đổi email: sự kiện auth.user.email_changed mang theo địa chỉ cũ trong previousValue và địa chỉ mới trong newValue. Brew gửi email tới địa chỉ mới.
- Email tiếp nối lời mời: sự kiện auth.user.invited xảy ra khi một lệnh cập nhật đặt giá trị cho invited_at. Supabase Auth tự gửi liên kết mời, còn email từ Brew có thể bổ sung thông tin hướng dẫn bắt đầu. Hãy gửi thử một lời mời thật từ dự án của bạn trước khi dựa vào trình kích hoạt này.
- Thông báo tạm khóa tài khoản: sự kiện auth.user.banned xảy ra khi banned_until được đặt giá trị, và mang theo giá trị đó trong newValue. auth.user.unbanned xảy ra khi giá trị của banned_until bị xóa.
- Xác nhận xóa tài khoản: sự kiện auth.user.deleted xảy ra khi hàng bị xóa và vẫn có địa chỉ email từ hàng đó.

## Sự kiện đăng nhập không có nghĩa là người dùng quay lại

Sự kiện auth.user.signed_in xảy ra khi last_sign_in_at thay đổi. Việc Supabase làm mới token cũng thay đổi cột này, nên sự kiện có thể xảy ra nhiều lần trong lúc người dùng vẫn đang đăng nhập. Sự kiện này không cho thấy ai đó đã quay lại sau một thời gian dài vắng mặt.

Đây cũng là sự kiện phái sinh có mức ưu tiên thấp nhất. Khi cùng lệnh cập nhật đó cũng xác nhận email hoặc nâng cấp người dùng ẩn danh, Brew sẽ phát sự kiện tương ứng thay vì auth.user.signed_in.

Để gửi email hỏi thăm người dùng không còn hoạt động, hãy xác định ai không còn hoạt động ngay trong ứng dụng của bạn, dựa trên dữ liệu hoạt động của chính ứng dụng. Chỉ kích hoạt một sự kiện tùy chỉnh riêng trong Brew cho những người dùng đủ điều kiện, và để một tự động hóa ở trạng thái Đang hoạt động gửi email hỏi thăm từ sự kiện đó.

Hãy thử nghiệm cả hai trường hợp: người dùng không còn hoạt động sẽ nhận email hỏi thăm; người dùng đã hoạt động trước thời điểm kiểm tra thì không.


## Thiết lập Supabase trong Brew

- Mở mục Tích hợp, chọn Supabase rồi chọn Tạo URL webhook. Brew điền sẵn URL đó vào SQL thiết lập.
- Tạo một signing secret bằng lệnh openssl rand -hex 32. Cả Brew và Supabase đều không cấp secret này, và Brew yêu cầu secret dài ít nhất 16 ký tự.
- Trong Supabase, mở SQL Editor và dán SQL thiết lập. Thay giá trị giữ chỗ của secret bằng secret của bạn rồi chạy. SQL này bật pgcrypto và pg_net, lưu secret vào Supabase Vault và thêm vào auth.users một trigger cơ sở dữ liệu cho các thao tác thêm, cập nhật và xóa.
- Dán cùng secret đó vào Brew rồi chọn Kết nối. Khi đó, Brew tạo trình kích hoạt cho cả 12 sự kiện. Không có công tắc bật/tắt cho từng sự kiện.
- Sau khi kết nối, hãy tạo một người dùng thử trong Supabase tại Authentication > Users. Trạng thái trong Brew chuyển từ “Đang chờ sự kiện thử nghiệm” sang “Đã kết nối”, và mục Sự kiện gần đây hiển thị lần gửi đó kèm trạng thái “chữ ký hợp lệ”.
- Tạo một tự động hóa, chọn sự kiện Supabase cho tự động hóa đó rồi gửi thử khi tự động hóa vẫn ở trạng thái Bản nháp. Chỉ những tự động hóa ở trạng thái Đang hoạt động mới chạy khi có sự kiện khớp được gửi đến.
- Bạn cần có quyền chạy SQL trên lược đồ auth, cài đặt extension và ghi vào Supabase Vault. Chạy lại SQL sau khi xoay vòng secret là an toàn.

## Các sự kiện Supabase được hỗ trợ

Các sự kiện auth.user.created, auth.user.updated và auth.user.deleted đến từ các thao tác thêm, cập nhật và xóa trên auth.users. Brew suy ra các sự kiện còn lại từ một lệnh cập nhật bằng cách so sánh hàng cũ với hàng mới.

Mỗi lệnh cập nhật tạo ra một sự kiện. Khi nhiều cột cùng thay đổi, kết quả khớp đầu tiên theo thứ tự sau sẽ được chọn: email_confirmed, phone_confirmed, upgraded_from_anonymous, email_changed, password_changed, banned, unbanned, invited, signed_in. Lệnh cập nhật không khớp với mục nào trong số này sẽ đến dưới dạng auth.user.updated.

Brew hỗ trợ 12 loại sự kiện sau:

- 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

## Đồng bộ liên hệ và cá nhân hóa

Mỗi sự kiện đã xác minh có địa chỉ email thật đều tạo hoặc cập nhật một liên hệ trong Brew (khớp theo email), bất kể có tự động hóa nào dùng sự kiện đó hay không. Khi có dữ liệu, Brew điền tên, họ, supabase_user_id, supabase_phone, supabase_role, supabase_full_name, supabase_avatar_url và supabase_provider.

Một số sự kiện còn điền các trường vòng đời. Trường supabase_account_status nhận giá trị active, invited, banned hoặc deleted. Các trường supabase_email_verified_at, supabase_phone_verified_at và supabase_last_sign_in_at được lấy từ các sự kiện xác nhận và đăng nhập tương ứng.

Dùng lược đồ payload đã khai báo của sự kiện được chọn cho thẻ cá nhân hóa. Mọi sự kiện đều có email, và khi có dữ liệu thì có thêm firstName, lastName, fullName, displayName, avatarUrl, phone, role, provider, createdAt, lastSignInAt và emailConfirmedAt. Tên và ảnh đại diện được lấy từ raw_user_meta_data, kèm giá trị dự phòng cho các lượt đăng ký qua OAuth. Ba trường dấu thời gian ở dạng Unix, tính bằng giây.

Các sự kiện phái sinh bổ sung previousValue, newValue hoặc cả hai, chứa giá trị cũ và mới của cột dưới dạng văn bản. Sự kiện auth.user.password_changed không có trường nào trong hai trường này. Trường provider chứa phương thức đăng ký, chẳng hạn email, google hoặc github, để bạn có thể điều hướng luồng chào mừng theo cách người dùng đăng ký.

ID người dùng Supabase không phải là thẻ cá nhân hóa. Brew lưu ID này trên liên hệ dưới dạng supabase_user_id để lọc và phân khúc.

Tài khoản Supabase không đồng nghĩa với việc người dùng đã đồng ý nhận email tiếp thị. Hãy ghi nhận sự đồng ý khi người dùng đăng ký và kiểm tra trước khi gửi email quảng cáo.


## Brew có thay thế email xác thực của Supabase không?

Không. Supabase Auth vẫn gửi liên kết xác nhận, magic link, lời mời và email đặt lại mật khẩu qua thiết lập email riêng của Supabase, chẳng hạn SMTP tùy chỉnh. Brew khởi chạy tự động hóa sau khi những thay đổi đó được ghi vào auth.users. Supabase khuyến nghị dùng tên miền gửi riêng cho email xác thực và email tiếp thị.


## Vì sao sự kiện đã xuất hiện nhưng không có email nào được gửi?

Nhận sự kiện và gửi email là hai bước riêng biệt. Hãy xác nhận có một tự động hóa khớp đang ở trạng thái Đang hoạt động, rồi kiểm tra bộ lọc và lịch sử thực thi của tự động hóa đó, điều kiện của người nhận và tên miền gửi. Sự kiện của người dùng không có địa chỉ email, chẳng hạn người dùng ẩn danh chưa thêm email, sẽ không tạo liên hệ và không khởi chạy tự động hóa nào.


## Giới hạn và khắc phục sự cố

- Brew chỉ đọc auth.users. Với sự kiện từ các bảng khác, hãy tạo một trình kích hoạt tùy chỉnh trong Brew rồi kích hoạt qua API của Brew từ ứng dụng của bạn hoặc từ một Supabase Edge Function.
- Brew không thể tạo, cấm hay xóa người dùng Supabase, và cũng không gửi email của Supabase Auth.
- Nếu các lần gửi không vượt qua bước kiểm tra chữ ký, secret trong Supabase Vault không khớp với secret trong Brew. Hãy tạo secret mới, chạy lại SQL thiết lập với secret đó, rồi kết nối lại Supabase trong Brew bằng cùng giá trị.
- Nếu không có lần gửi nào đến, hãy chạy lại SQL thiết lập, rồi xác nhận pgcrypto đã được cài đặt và secret trong Vault khớp với secret trong Brew.
- Sau sự kiện auth.user.email_changed, Brew tạo hoặc cập nhật liên hệ ở địa chỉ mới. Liên hệ ở địa chỉ cũ được giữ nguyên.
- Sự kiện auth.user.deleted đặt supabase_account_status thành deleted. Sự kiện này không xóa liên hệ khỏi Brew.
- Xem lại sự đồng ý và mục đích của từng email. Việc đồng bộ người dùng Supabase không có nghĩa là bạn được phép gửi email quảng cáo.

## Nguồn và hướng dẫn thiết lập

- [So sánh các công cụ email cho Supabase](/vi/blog/best-email-tools-for-supabase-auth-emails-product-events-and-lifecycle-campaigns)
- [Hướng dẫn thiết lập Supabase](https://docs.brew.new/integrations/import/supabase)
- [Tạo một tự động hóa](https://docs.brew.new/create-emails/build-an-automation)
- [Thẻ cá nhân hóa](https://docs.brew.new/create-emails/merge-tags)
- [Những gì bạn có thể gửi bằng Brew](https://docs.brew.new/get-started/what-you-can-send)
- [Database webhook của Supabase](https://supabase.com/docs/guides/database/webhooks)
- [Các trường người dùng của Supabase](https://supabase.com/docs/guides/auth/users)
- [SMTP tùy chỉnh của Supabase](https://supabase.com/docs/guides/auth/auth-smtp)

## Liên quan

- [Tất cả tích hợp](https://brew.new/vi/browse/integrations.md)
- [Đăng ký](https://brew.new/vi/sign-up.md)
- Website: https://brew.new
