Shopifyアプリ間で顧客メタフィールドのデータの持ち方が異なる場合に、Shopify Flowでデータ型を変換して引き渡す方法を紹介します。マーチャントが既にインストール済みのShopifyアプリが利用しているメタフィールドへ、別のアプリが利用しているメタフィールドからデータを渡し、データを一つのメタフィールドへ集約したい時などに活用できます。
今回のケースでは、自社アプリ「CRM PLUS on LINE」とBonify社のアプリ「Customer Account Fields」でデータの整合性をとる必要があり、実際に実現できたので記事にしました。
※ワークフローの自動化アプリ「Shopify Flow」を利用するため、Shopify(ベーシックプラン・スタンダードプラン・プレミアムプラン)及びShopify Plusにて実現可能な方法です。(2023年7月27日追記)
どんなケースだったのか
Shopifyの会員登録ページのデフォルト項目にはない情報(生年月日等)を会員登録ページに追加したい場合、なにかしらShopifyアプリを導入して解決することが多いかと思います。
弊社のアプリ「CRM PLUS on LINE」では、LINEログインを利用した会員登録フォームに「生年月日・お気に入り店舗」の項目を追加し、取得した情報をメタフィールドやタグに保存する機能を持っています。(関連プレスリリースはこちら)
ただし「CRM PLUS on LINE」が対応しているのは、Shopify Plus環境かつLINEアカウントで会員登録をするケースのみです。LINEアカウントで会員登録しない場合(一般的なメールアドレスでの会員登録フォーム等)、生年月日やお気に入り店舗などの追加情報の取得は、他社アプリが担っているか独自のカスタマイズが行われています。今回のケースでは、Bonify社のアプリ「Customer Account Fields」が担っていました。
つまり、
- LINEアカウントでの会員登録時に取得した生年月日情報:「CRM PLUS on LINE」のメタフィールドとタグ
- メールアドレスでの会員登録時に取得した生年月日情報:「Customer Account Fileds」のメタフィールド
にそれぞれ情報が保存される状況になっています。
全顧客の追加情報(生年月日などメタフィールドに保存する情報)は、「Customer Account Fields」のメタフィールドに集約したいという要望だったのですが、今回は「CRM PLUS on LINE」と「Customer Account Fields」で生年月日のデータの持ち方が異なっており、そのまま引き渡すことはできないというケースでした。
アプリ間での「生年月日」データ型の違い
「CRM PLUS on LINE」では生年月日を yyyy-mm-dd の型(日付型)で顧客メタフィールドへ保存しつつ、誕生日月にクーポンが送信できるよう、年・月・日をバラして顧客タグを付与しています。
一方、「Customer Account Fields」は年・月・日をバラバラに数値で顧客メタフィールドに保存する設定になってました。「Customer Account Fields」は柔軟に設定が可能で日付型でメタフィールドに保存させることもできます。今回はおそらく誕生日月が扱いやすいようこのような定義にしたと思われます。
データ型が違って困ったなーというのが最初の感想だったんですが、ここでShopify Flowの知見が役に立ちました。
日付型の生年月日データを数値型に変換するワークフロー構築例
いろいろと試行錯誤した結果、ワークフローはこうなりました。
LINEログインでの会員登録時に、「CRM PLUS on LINE」が設定した顧客メタフィールドのデータを「アクション」欄の指示に従って、「Customer Account Fields」の年・月・日欄へ、それぞれデータをアップデートするというワークフローです。
「アクション」の具体的な挙動の設定は下記のようになっています。
指定したメタフィールドへ別のメタフィールドのデータの型を変換してアップデートする、というアクションです。このワークフロー内の「アクション」に設定されている3つでは、年と月と日をそれぞれ変換しています。見やすく清書します。
{% for metafields_item in customer.metafields %} {% if metafields_item.namespace == 'crmplus' %} {% if metafields_item.key == 'birthday' %} {{ metafields_item.value | date: "%Y" }} {% endif %} {% endif %} {% endfor %}
{% for metafields_item in customer.metafields %} {% if metafields_item.namespace == 'crmplus' %} {% if metafields_item.key == 'birthday' %} {{ metafields_item.value | date: "%-m" }} {% endif %} {% endif %} {% endfor %}
{% for metafields_item in customer.metafields %} {% if metafields_item.namespace == 'crmplus' %} {% if metafields_item.key == 'birthday' %} {{ metafields_item.value | date: "%-d" }} {% endif %} {% endif %} {% endfor %}
3行目までの記述は3つとも同じで、ざっくり解説すると
顧客メタフィールド内でネームスペースが「crmplus」かつキーが「birthday」
という条件を付与するための記述です。
続く{{ metafields_item.value | date: ” ” }} で yyyy/mm/dd の日付型データから 年・月・日だけをそれぞれ抽出します。
{{ metafields_item.value | date: "%Y" }}
{{ metafields_item.value | date: "%m" }}
{{ metafields_item.value | date: "%d" }}
Yだけ大文字なのが曲者ですね。
上記のままの状態だと、月・日の値が一桁の場合、 01 というように0がつきます。月・日を01から1に変換したい場合は「-」を加えて数値型に変換します。
{{ metafields_item.value | date: "%-m" }}
{{ metafields_item.value | date: "%-d" }}
これで生年月日データを「CRM PLUS on LINE」の日付型から「Customer Account Fields」で定義していた数値型に変えて、「Customer Account Fields」の顧客メタフィールドへ引き渡せました。
Shopify Flowはやりたいことが実現できた瞬間がうぉおおお!という感じでテンションが上がります。日付データの型変換の記述は、弊社CTOの佐藤さんが調べてくれたおかげで実現できました。チームワークです。みんなでやる仕事って楽しいですね!
Shopify FlowでLINEが配信できるアプリ「CRM PLUS on LINE」
我々が提供する Shopifyアプリ「CRM PLUS on LINE」はShopify Flowに対応してLINE配信ができます。アプリ名の通りCRM的に使えるワークフローを沢山用意しているので、ShopifyとLINEで実現したいことがありましたらお気軽にご相談ください!