Documentation menu

Shopify

Shopifyストアを接続すると、その顧客をMailInAppの連絡先リストに同期し、実際のストアイベントでジャーニーをトリガーし、収益をキャンペーンやバリアントに紐付けて確認できるようになります。

ストアを接続する

設定 → 連携から、ストアのmyshopify.comドメインを入力し、Connect Shopifyを押します。Shopify自身のOAuth画面に遷移し、アクセスを承認します。MailInAppがリクエストするのはread_customersread_ordersread_products(いずれも読み取り専用)、そして以下で説明する使い切りの割引コードを発行するためのwrite_discountsだけです — ストアの商品・注文・顧客そのものへの書き込みアクセスを求めることは一切ありません。承認すると、MailInAppはそのストア専用の連絡先リストを作成し、バックグラウンドで初回の顧客バックフィルを開始します(1接続あたり最大5,000件の顧客まで)。それを超える顧客数を持つストアは、その後もShopify自身のWebhookを通じてリストを増やし続けますが、上限を超えた分の一括バックフィルだけは行われません。

Shopifyアプリストア自体からインストールした場合、MailInAppのアカウントを一度も作っていなくても、MailInAppはストア自身のメールアドレスを使って自動的にアカウントを用意します — サインイン済みの状態でランディングし、ストアはすでに接続されています。

Shopifyの接続は一度限りの30ドルの料金で、Shopify自身のBilling APIを通じてこのフローの一部として課金されます。すべてのプラン(Freeを含む)で利用できます。後でアプリをアンインストールした場合、この料金は返金されません — ただし同じMailInAppアカウントで後から再接続する場合は無料です。

連携でできること

  • 顧客の同期 — Shopifyの顧客は、この連携専用の連絡先リストに入り、その後はShopify自身のWebhook(customers/create、および以下のトリガー用のcheckouts/createorders/paid)によって最新の状態に保たれます。定期的な再ポーリングは行いません。
  • ジャーニーのトリガー — 接続済みのストアは、ジャーニーのカート放棄トリガー(チェックアウトを開始したが完了していない)と購入トリガー(注文が支払われた)を発火できるため、ウェルカムシリーズやカート放棄の自動化を、MailInApp自身の商品ブロックのチェックアウトだけでなく、実際のShopifyの活動に基づいて実行できます。ジャーニーを参照してください。
  • 収益の紐付け — 注文自身のキャンペーンやバリアントが特定できる場合、ネイティブチェックアウトの注文がすでに生成しているのと同じ回答およびA/Bテストの収益数値に取り込まれます。
  • 購入履歴セグメントと割引オファー — 注文の明細行が顧客と一緒に同期されるため、オーディエンスフィルターで「日付AからBの間に商品Xを購入した」といった条件にマッチさせられます(購入履歴を参照)。また、プロジェクトはマッチした受信者ごとに使い切りのShopify割引コードを発行でき、自分のストアのチェックアウトで引き換えられます(割引オファーを参照)。以降の注文はorders/paidWebhookから自動的に同期されますが、この機能が公開される前に接続済みのストア、またはより古い履歴を持つストアは、設定 → 連携から一度だけの注文履歴のバックフィルを実行する必要があります — Shopifyがそのストアに対して完全な注文履歴を別途承認していない限り、おおよそ直近60日分に制限されます。カタログからインポートした商品ブロックは、オーディエンスフィルターを必要とせずに、その商品だけに限定した独自の商品ごとの割引を個別に発行できます — ストアネイティブな割引Shopify商品割引コードを参照してください。
  • スタジオ向けの商品カタログ — ストア自身の公開中の商品一覧もMailInAppに同期され、顧客と同じ頻度で自動的に更新されます(専用ボタンは不要です)。商品ブロックストアからインポートピッカーはこの同期済みカタログを検索し、実際の商品からブロックの名前・説明・画像・価格を入力します — これは一度だけのコピーであり、ライブで連動するリンクではないため、送信済みのメールが確認した内容から後でずれることはありません。各商品自身のページ(Shopifyのハンドルから生成)も同期され、利用可能な場合はブロックを外部ストアのチェックアウトへリンクに設定してそのページへ直接向けます — そのため、インポートした商品はこれ以上何も設定しなくてもShopifyストアで販売できる状態になります。代わりに接続済みのStripeアカウントで決済を受けたい場合は、手動でMailInAppチェックアウトに戻してください。この機能が公開される前に接続済みのストアは、Shopifyが要求する新しいread_products権限を許可するために、DisconnectしてからConnect Shopifyし直す必要があります — それまではピッカーには何も表示されません。

接続状態と再接続

Shopifyは、MailInAppに対して短命のアクセストークン(有効期限は約1時間)と、ローテーションするリフレッシュトークンを発行します。MailInAppはこのペアをバックグラウンドで自動的に更新するため、通常の利用では顧客の同期・ジャーニーのトリガー・割引コードの発行はすべて、あなたが何もしなくても動き続けます。

もしShopifyがこのリフレッシュトークンを無効化・失効させた場合 — たとえばアプリがMailInApp以外の場所でアンインストールされて再インストールされた、Shopify管理画面からアクセスが手動で取り消された、あるいは長期間の非アクティブによりトークンが単に期限切れになった、といったケースです — MailInAppは古い認証情報のまま黙って再試行するのではなく、意図的に処理を止め、設定 → 連携でそのストアの状態を再接続が必要と表示します。これはバグではなく、セキュリティ上の保護措置です。MailInAppは、Shopify自身の画面を通じてあなたが新しいOAuth許可を承認しない限り、あなたに代わって再認証することは決してありません。

この状態が表示された場合は、設定 → 連携からDisconnectをクリックし、続けてConnect Shopifyをもう一度行うことで、クリーンなトークンペアを取得してください。これには数秒しかかからず、一度限りの接続料金が再度請求されることもなく、すでに同期済みの連絡先や注文にも影響しません — 新しい接続が承認されると、同期はそのまま再開されます。

連携を解除する

設定のDisconnectは、同期と以降のすべてのWebhook処理を即座に停止します。すでに同期済みの顧客は連絡先リストに残ります — 他のプロジェクトの送信オーディエンスとして既に使われている可能性があるため、連携を解除しても連絡先が削除されることはありません。Shopify側からアプリをアンインストールした場合も、最初は同じ動作です。約48時間後、Shopify自身のデータ削除Webhookが発火すると、同期済みの連絡先とカートのレコードも完全に消去されます — これはすべてのShopifyアプリが守るべき標準の猶予期間です。