# Shopify + Brew

Shopify の顧客、注文、チェックアウト、フルフィルメントのイベントで、Brew のオートメーションを起動できます。ウェルカム、領収書、チェックアウト離脱、発送のフローに活用できます。

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

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

## 提供中の機能

- **イベントトリガー**：Shopify の顧客、注文、チェックアウト、フルフィルメントのイベントで、Brew のオートメーションを起動できます。ウェルカム、領収書、チェックアウト離脱、発送のフローに活用できます。

## ストアのイベントを、役立つメールに

Shopify を接続すると、顧客の登録、注文の支払い、チェックアウトの作成、フルフィルメントの発送をきっかけに、ブランドらしいメールを送れるようになります。Brew は、顧客、注文、チェックアウト、フルフィルメントにわたる13種類の Shopify Webhook トピックに対応しています。

セットアップには、Shopify 管理画面で作成する Webhook を使います。Shopify アプリ、クライアントID、OAuthは必要ありません。注文、支払い、フルフィルメントは、引き続き Shopify が担当します。Brew が担当するのは、メールの作成と送信です。


## 作れるもの

- 顧客向けのウェルカムメール：customers/create は、Shopify で顧客レコードが作成されたときに発火します。
- 注文確認と領収書：orders/create は注文が入ったときに、orders/paid は支払いがキャプチャされたときに発火します。どちらにも orderNumber、totalPrice、currency、financialStatus が含まれます。重複を避けるため、メッセージごとにどちらか一方を選んでください。
- キャンセルの通知：orders/cancelled は、注文がキャンセルされたときに発火し、注文番号と支払いステータスを含みます。
- 発送通知：fulfillments/create には、フルフィルメントに追跡情報があれば trackingNumber と trackingUrl が含まれます。注文の発送時には orders/fulfilled も発火しますが、こちらには追跡情報のフィールドがありません。発送メールごとに、トリガーはどちらか一方を選んでください。
- フルフィルメントのフォローアップ：fulfillments/update は、フルフィルメントが変更されたときに発火します。fulfillmentStatus は pending、success、failure などのフルフィルメントの処理状況で、配達完了の確認ではありません。配達後のお礼やレビュー依頼には、アプリケーションで配達を確認したあとに限り、Brew のカスタムイベントを送信してください。
- チェックアウトのリマインダー：checkouts/create は、チェックアウトが作成されたときに発火し、チェックアウトを再開するためのリンクである abandonedCheckoutUrl を含む場合があります。
- 同じ内容が Shopify と Brew の両方から顧客に届かないよう、Shopify の顧客向け通知と調整してください。

## チェックアウトのリマインダーには、状態の確認が必要

checkouts/create が発火するのは、顧客がチェックアウトを離脱したときではなく、チェックアウトが作成されたときです。リマインダーのフローはその時点で始まり、待機します。注文が入っても、すでに始まっている実行は止まりません。

「待機」のあと、条件は shopify_last_order_status や shopify_last_order_at など、コンタクトのフィールドの現在の値を読み取ります。これらが表すのは、このチェックアウトではなく、Brew が把握している最新の注文です。そのため、このチェックアウトが注文につながったことの証明にはなりません。

checkouts/update は、決まった時間が経ったときではなく、チェックアウトが変更されるたびに発火します。そのため、これだけでは、時間を決めて送る2回目のリマインダーには使えません。

メールアドレスのないチェックアウトでは、同じ Shopify 顧客IDのメールアドレスを Brew がすでに把握している場合を除き、オートメーションは開始されません。公開する前に、注文につながるチェックアウトと、つながらないチェックアウトの両方をテストしてください。


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

- 「連携サービス」を開いて Shopify を選び、「Webhook URL を生成」を選択します。
- 独自のストアドメインではなく、acme.myshopify.com のような myshopify.com ドメインを入力します。Brew は、すべての Webhook で、このドメインを X-Shopify-Shop-Domain ヘッダーと照合します。
- Shopify 管理画面で「設定 → 通知」を開き、「Webhook」までスクロールします。Shopify は、各トピックをそのトピック用に作成された Webhook にしか送らないため、使う予定のイベントごとに Webhook を1つずつ作成します。形式にはJSONを選び、Brew のURLを貼り付けて、最新のAPIバージョンを選択します。
- 「Webhook」セクションの下部にある署名シークレットをコピーします。ストアのすべての Webhook は、同じシークレットで署名されます。Brew に貼り付けて「接続」を選択します。
- 作成した各 Webhook のメニューを開き、「テストを送信」を選択します。最初のテストで Brew のステータスが「テストイベント待ち」から「接続済み」に変わり、テストごとに、そのイベントが受信済みになります。テストは Webhook の検証にだけ使われます。Brew がコンタクトを追加したり、オートメーションを開始したりすることはありません。
- 接続すると、13種類すべてのトピックのトリガーが作成されます。イベントごとに有効・無効を切り替えるスイッチはありませんが、Shopify で Webhook を作成していないトピックが発火することはありません。
- オートメーションを作成して Shopify イベントを選択し、まだ下書きのうちにテストを送信します。一致するイベントが届いたときに実行されるのは、稼働中のオートメーションだけです。

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

Brew は、次の13種類の Webhook トピックに対応しています：

- customers/create
- customers/update
- customers/delete
- customers/enable
- customers/disable
- orders/create
- orders/paid
- orders/cancelled
- orders/fulfilled
- checkouts/create
- checkouts/update
- fulfillments/create
- fulfillments/update

## コンタクトの同期とパーソナライズ

実際のメールアドレスを含む検証済みのイベントを受け取ると、オートメーションで使われているかどうかにかかわらず、Brew はメールアドレスで照合してコンタクトを作成または更新します。データがある場合、Brew は姓名、shopify_customer_id、shopify_shop_domain を設定します。

注文イベントでは、shopify_last_order_number、shopify_last_order_total、shopify_last_order_currency、shopify_last_order_at が更新されます。orders/create、orders/paid、orders/cancelled では shopify_last_order_status も設定され、orders/fulfilled では shopify_last_fulfillment_status が設定されます。フルフィルメントのイベントでは shopify_last_tracking_number、shopify_last_tracking_url、shopify_last_fulfillment_status が、チェックアウトのイベントでは shopify_last_checkout_url が更新されます。

customers/delete、customers/disable、customers/enable は、shopify_account_status をそれぞれ deleted、disabled、active に設定します。Brew がコンタクトを削除したり、配信停止にしたりすることはないため、必要な場面ではこのフィールドで絞り込んでください。

差し込みタグには、選択したイベントで宣言されているペイロードのスキーマを使います。すべてのイベントに、値があれば email、firstName、lastName、currency、shopDomain、createdAt が含まれます。注文イベントには orderNumber、totalPrice、financialStatus、fulfillmentStatus が、チェックアウトのイベントには totalPrice と abandonedCheckoutUrl が、フルフィルメントのイベントには trackingNumber、trackingUrl、fulfillmentStatus が加わります。

totalPrice は、Shopify が注文の通貨で送る金額です。セント単位ではなく、49.95のような値になります。ペイロードに注文の明細は含まれず、Shopify オブジェクトのIDは差し込みタグにはなりません。

Shopify の顧客 Webhook にはマーケティングの同意情報が含まれなくなったため、Brew はこの情報を受け取りません。同意は別途記録し、プロモーションメールを送る前に確認してください。


## Brew は返金やカートのイベントに対応していますか？

いいえ。Shopify には orders/refunded トピックがなく、返金の Webhook には顧客の情報が含まれません。carts/update には受信者を特定する情報がないため、Brew はこのイベントをもとに安全にメールを送れません。これらのトピックの Webhook は追加しないでください。


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

イベントの受信とメールの送信は、別々のステップです。一致するオートメーションが稼働中であることを確認してから、そのフィルター、実行履歴、受信者が対象に含まれるかどうか、送信ドメインを確認してください。「テストを送信」による配信はテストイベントとして表示され、オートメーションを開始することはありません。Brew が把握していない顧客のイベントにメールアドレスがない場合は、受信者不明として記録されます。


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

- Brew は、Shopify の顧客、注文、フルフィルメントを変更できません。
- 401エラーとともに shop_domain_mismatch が返される場合は、Brew に入力したドメインが、Webhook を送信しているストアと一致していません。正規の myshopify.com ドメインで再接続してください。
- Shopify で署名シークレットをローテーションした場合は、新しい値で接続し直してください。Brew で使うシークレットは、16文字以上である必要があります。
- トリガーに「イベントはまだありません」と表示される場合は、そのトピックの Shopify Webhook を作成し、そこからテストを送信してください。
- 注文の Webhook には、顧客名が含まれないことがあります。firstName には、既定の呼びかけなど、差し込みタグの代替値を設定してください。
- 各メールの同意状況と目的を確認してください。Shopify の顧客を同期しても、プロモーションメールを送ってよいことにはなりません。

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

- [Shopify セットアップガイド](https://docs.brew.new/integrations/import/shopify)
- [オートメーションを作成する](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)
- [Shopify の Webhook](https://shopify.dev/docs/apps/build/webhooks)

## 関連リンク

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