# Supabase + Brew

Supabase の auth.users のデータベース Webhook で、Brew のオートメーションを起動できます。メールアドレスの確認、パスワードの変更、匿名から正式なアカウントへの切り替え、利用停止とその解除を表す派生イベントにも対応しています。

正規URL：https://brew.new/ja/browse/integrations/supabase

- データの方向：データ取り込み
- 接続方式：Webhook シークレット
- 認証イベントのトリガー

## 提供中の機能

- **イベントトリガー**：Supabase の auth.users のデータベース Webhook で、Brew のオートメーションを起動します。メールアドレスの確認、パスワードの変更、ログインを表す派生イベントにも対応しています。

## 認証イベントを、役立つメールに

Supabase を接続すると、新規登録、メールアドレスの確認、パスワードの変更、利用停止をきっかけに、ブランドらしいメールを送れるようになります。セットアップ用のスクリプトが auth.users テーブルにデータベーストリガーを追加し、Brew が各変更を、12種類あるオートメーションのトリガーのいずれかに変えます。

ログイン、確認リンク、マジックリンク、パスワードリセットは、引き続き Supabase Auth が担当します。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 カスタムイベントを送信し、そのイベントをもとに、稼働中のオートメーションから様子伺いのメールを送ります。

両方のパスをテストしてください。休眠ユーザーには様子伺いのメールが届き、判定の前にアクティブだったユーザーには届かないことを確認します。


## Brew で Supabase をセットアップする

- 「連携サービス」を開いて Supabase を選び、「Webhook URL を生成」を選択します。そのURLは、セットアップ用のSQLにあらかじめ入力されています。
- openssl rand -hex 32 で署名シークレットを作成します。このシークレットは Brew も Supabase も発行しません。Brew では16文字以上が必要です。
- Supabase で「SQL Editor」を開き、セットアップ用のSQLを貼り付けます。シークレットのプレースホルダーを自分のシークレットに置き換えてから、実行します。このSQLは、pgcrypto と pg_net を有効にし、シークレットを Supabase Vault に保存して、auth.users の挿入、更新、削除で動くデータベーストリガーを追加します。
- 同じシークレットを Brew に貼り付けて「接続」を選択します。接続すると、12種類すべてのイベントのトリガーが作成されます。イベントごとに有効・無効を切り替えるスイッチはありません。
- 接続したら、Supabase の「Authentication → Users」でテストユーザーを作成します。Brew のステータスが「テストイベント待ち」から「接続済み」に変わり、「最近のイベント」に、その配信が「署名OK」付きで表示されます。
- オートメーションを作成して Supabase イベントを選択し、まだ下書きのうちにテストを送信します。一致するイベントが届いたときに実行されるのは、稼働中のオートメーションだけです。
- auth スキーマに対するSQLの実行、拡張機能のインストール、Supabase Vault への書き込みを行う権限が必要です。シークレットをローテーションしたあとにSQLを再実行しても、問題はありません。

## 対応している Supabase イベント

auth.user.created、auth.user.updated、auth.user.deleted は、auth.users での挿入、更新、削除から発生します。それ以外のイベントは、Brew が更新前と更新後の行を比較して、更新から派生させます。

1回の更新で発生するイベントは1つです。複数の列が同時に変わった場合は、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で登録したユーザーについては代替の取得元も使われます。3つのタイムスタンプは、いずれも秒単位の Unix 時間です。

派生イベントには previousValue、newValue、またはその両方が加わり、列の変更前と変更後の値がテキストで入ります。auth.user.password_changed には、どちらも含まれません。provider には email、google、github などの登録方法が入るため、登録方法に応じてウェルカムフローを振り分けられます。

Supabase のユーザーIDは差し込みタグにはなりません。Brew はこれを supabase_user_id としてコンタクトに保存し、フィルターやセグメント化に使えるようにします。

Supabase のアカウントがあるだけでは、マーケティングメールの受信に同意したことにはなりません。登録時に同意を記録し、プロモーションメールを送る前に確認してください。


## Brew は Supabase の認証メールの代わりになりますか？

いいえ。確認リンク、マジックリンク、招待、パスワードリセットは、これまでどおり Supabase Auth が、カスタムSMTPなど独自のメール設定を通じて送信します。Brew がオートメーションを開始するのは、それらの変更が auth.users に反映されたあとです。Supabase は、認証メールとマーケティングメールで送信ドメインを分けることを推奨しています。


## イベントが表示されているのに、メールが送信されないのはなぜですか？

イベントの受信とメールの送信は、別々のステップです。一致するオートメーションが稼働中であることを確認してから、そのフィルター、実行履歴、受信者が対象に含まれるかどうか、送信ドメインを確認してください。メールアドレスをまだ登録していない匿名ユーザーなど、メールアドレスのないユーザーのイベントでは、コンタクトは作成されず、オートメーションも開始されません。


## 制限事項とトラブルシューティング

- Brew が読み取るのは auth.users だけです。ほかのテーブルのイベントを使うには、Brew でカスタムトリガーを作成し、アプリケーションや Supabase Edge Function から Brew APIを通じて発火させてください。
- Brew は、Supabase のユーザーを作成、利用停止、削除することはできず、Supabase Auth のメールも送信しません。
- 配信が署名の検証に失敗する場合は、Supabase Vault のシークレットが Brew のものと一致していません。新しいシークレットを生成し、それを使ってセットアップ用のSQLを再実行してから、同じ値で Brew の Supabase を再接続してください。
- 配信が1件も届かない場合は、セットアップ用のSQLを再実行してから、pgcrypto がインストールされていること、Vault のシークレットが Brew のものと一致していることを確認してください。
- auth.user.email_changed のあと、Brew は新しいアドレスのコンタクトを作成または更新します。古いアドレスのコンタクトは変更されません。
- auth.user.deleted は supabase_account_status を deleted に設定しますが、Brew からコンタクトを削除することはありません。
- 各メールの同意状況と目的を確認してください。Supabase のユーザーを同期しても、プロモーションメールを送ってよいことにはなりません。

## 出典とセットアップガイド

- [Supabase 向けメールツールの比較](/ja/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 のデータベース Webhook](https://supabase.com/docs/guides/database/webhooks)
- [Supabase のユーザーフィールド](https://supabase.com/docs/guides/auth/users)
- [Supabase のカスタムSMTP](https://supabase.com/docs/guides/auth/auth-smtp)

## 関連リンク

- [すべての連携サービス](https://brew.new/ja/browse/integrations.md)
- [新規登録](https://brew.new/ja/sign-up.md)
- ウェブサイト：https://brew.new
