Blog

ブログ

Shopify

「easyPoints」で初回購入特典を実装する

Shopifyのポイントアプリ(easyPoints)を入れた案件で、初回購入特典をFlowで組んだときの理解ログ。 結論だけ見れば「タグで付与済みを管理する」だけの話なんだけど、 そこに行き着くまでに、自分の思い込みが3回崩れたので残しておく。

発端:新規会員登録特典が使えなかった

やりたかったのは「初めて買ってくれた人に500pt」。 アプリの標準機能には「新規会員登録特典」があるので、最初はそれで行けると思っていた。

無理だった。ストアが新しいお客様アカウント(メールにコードが飛んでくる方式)だったから。 開発元の回答は「登録時の付与はできない。ただし初回購入時ならShopify Flowで実現できる」。

ここで頭の中がこう切り替わった。

× 会員登録したとき → ポイント
○ 初めて買ってくれたとき → ポイント

同じ「初回特典」でも、フックするタイミングを別のイベントに置き換えるという発想。 これは他のアプリ制約でも使えそうなので覚えておきたい。

前提

Shopify Flow が入っていること(無料)

easyPoints が入っていて、Flow連携のアクションが使えること

顧客タグを運用で触らないこと(後述)

1. ワークフローを作る

Flow → ワークフローを作成 → トリガーに Order fulfilled を選ぶ。

「注文作成」ではなく「発送済み」にしているのは、キャンセルされた注文にポイントを付けないため。 代わりに分割出荷で複数回起動するので、あとの条件とキーで受け止める。

2. 条件(Condition)を2つ、ANDで置く

Customer number of orders <= 1 AND Customer tags doesn’t contain 初回特典付与済み

​

== 1

ではなく

<= 1

にする。テスト注文は注文回数に数えられず0になるため

実際に保存される式はこうなる(UIでは「等しい」に見えることがある)

((order.customer.numberOfOrders <= 1) && (order.customer.tags none? |tags_item| (tags_item == ‘初回特典付与済み’)))

​

3. True の分岐に easyPoints のアクションを置く

Adjust Point Balance を追加して、4つのフィールドを埋める。

フィールド入れる値意味
Customer ID{{ order.customer.id }}誰に付けるか
Point Value500付けるポイント数
Note初回購入ボーナスポイント履歴に残る理由
Idempotency Key{{ order.id | remove: “gid://shopify/Order/” }}同じ注文で二重に付けないためのキー

Idempotency Key は、注文IDから

gid://shopify/Order/

を取り除いて数字だけにしている。 同じキーで2回来たら、アプリ側が「もう処理した」と判断して弾いてくれる。

4. その下に Add customer tags を置く

タグは

初回特典付与済み

。条件で使う文字列と完全に一致させる。

5. 保存して、ワークフローをオンにする

作っただけでは動かない。ステータスが「アクティブ」になっているか確認する。

6. 動かして、3か所を見る

Flow の「最近の実行」:結果が「完了2件」なら、付与とタグ付けの2アクションが走っている

easyPoints の履歴:付与されたポイント数と有効期限

顧客ページのタグ:

初回特典付与済み

が付いたか

分割出荷を試すなら、1つの注文の商品を別々に発送済みにして、 2回目・3回目の実行結果が「なし」になり、ポイントが増えないことを見る。

二重付与を防ぐ仕組みは2段ある

役割が違うので、どちらも入れておく。

仕組み防げる範囲
Idempotency Key同じ注文の中での重複(=分割出荷で複数回起動したとき)
顧客タグ別の注文をまたいだ重複(=2回目の注文でまた初回特典が付く)

※今回のテストでは3回目の実行が条件で止まったので、 キーとタグのどちらが効いたかまでは切り分けていない。

やり直したいとき

顧客ページからタグ

初回特典付与済み

を消す → もう一度付与される状態に戻る

付いてしまったポイントは、easyPoints 側で手動調整する

同じ注文でやり直す場合、Idempotency Key が同じだと弾かれる可能性がある(未検証)

運用で決めておくこと

ポイントが付くのは注文時ではなく発送時。お客様への案内文に影響する

顧客タグを手で消さない。消すともう一度もらえる

ポイント数を変えるときは Point Value を書き換えるだけ

購入金額に応じた通常ポイントは別の仕組み。アプリ側でポイントプログラムを開始しないと動かない