この記事について
オンラインとオフラインで顧客を紐付けるために、Shopifyの顧客IDをPOSの会員番号として使用するアイデアを採用しました。この設計判断の背景と実装方法を解説します。
課題と解決策
直面した課題
解決策: Shopify IDを会員番号に
顧客ID = gid://shopify/Customer/8840734670934
8840734670934(Shopify IDの数字部分)
会員番号(customerNo)= 8840734670934
Shopify ID → 数字抽出 → POS会員番号で検索 → 顧客特定
なぜこのアプローチを選んだのか
他の選択肢との比較
方式3を選んだ理由
- シンプルさ: 追加のシステムやデータベースが不要
- 信頼性: Shopifyが発行するIDは確実にユニーク
- 運用容易性: 対応表のメンテナンスが不要
- 障害耐性: 単純な仕組みなので障害点が少ない
Shopify顧客IDの構造
GraphQL形式のID
Shopifyの顧客IDは、GraphQL APIでは以下の形式で返されます。
形式: gid://shopify/Customer/8840734670934
数字部分の抽出
gid://shopify/Customer/8840734670934
最後の "/" 以降を抽出
8840734670934(17桁程度の数字)
ポイント: この数字がPOSの会員番号になる
POSへの会員番号登録
登録タイミング
顧客がオンラインで会員登録を完了
Shopify Admin APIで顧客を作成、IDが発番される
GraphQL形式のIDから数字部分を抽出
抽出した数字を会員番号としてPOSに登録
POS側のデータ構造
ポイント: 会員番号フィールドを「Shopify IDの格納場所」として活用。POSの標準機能を流用しているので追加開発は最小限
照合時の処理
ポイント取得時の流れ
セッションにShopify顧客IDが保存されている
Shopify ID: gid://shopify/Customer/8840734670934
8840734670934
会員番号 = 8840734670934 で検索
ポイント残高: 1250pt
画面にポイント表示
この設計の利点
開発面
運用面
考慮事項
会員番号の桁数
事前確認ポイント:
- POSの会員番号は何桁まで対応?
- 数字のみ?英数字も可?
- 先頭ゼロの扱いは?
- POS側のフィールド仕様を確認し、Shopify IDが収まることを確認する
既存POS会員の扱い
既存の会員番号: 00001(連番)
メールで照合 → 既存会員発見 → 会員番号をShopify IDに上書き
新会員番号: 8840734670934、ポイント残高: そのまま維持
補足: 古い会員番号は履歴として別フィールドに保存も検討
この仕組みがもたらす効果
システム設計として
- 追加の複雑性を導入せずに紐付けを実現
- Shopifyをマスターとした一貫性のあるデータ管理
- 将来の拡張(他システム連携)にも対応しやすい
ビジネスとして
- オムニチャネル体験の基盤が確立
- どのチャネルでも同一顧客として認識
- 顧客データの統合分析が可能に