Shopifyの自動化(オートメーション)を使って、単純に「毎月月初に顧客メタフィールドを更新する(全ての顧客のメタフィールドをfalseへ変更する)」というのを設定したいのですが、うまくいきません。
どのように設定したらいいでしょうか?
Topic summary
ユーザーは毎月月初に全顧客のメタフィールドを自動的に更新(falseに変更)したい。
提案された解決策:
-
推奨方法: Matrixifyなどのアプリを使用した一括変更が最も簡単で確実。
-
Shopify Flowでの実装案:
- トリガー:Scheduled time(毎月1日に設定)
- アクション:Get customer data で顧客データを取得
- For each loop(繰り返し処理)で各顧客に対して以下を実行:
- メタフィールドをfalseに更新
- 「target_metafield:false」タグを追加
- 「target_metafield:true」タグを削除
重要な制約:
- Get customer dataは最大100件の顧客データしか扱えない
- 顧客が100人以上いる場合、フローを複製して10分おきに実行する必要がある
- この方法は動作未確認で不具合の可能性あり
回答者は、Shopify Flowより一括変更アプリの使用を強く推奨している。
興味があり調査してみました。
結論から申しますと、
Matrixifyなどを使用してMetafeildを一括変更した方が良いかもしれません。
https://apps.shopify.com/excel-export-import?locale=ja
さて、
「Shopifyの自動化(オートメーション)」というのはShopify Flowのことを指していると思われますので、Shopify Flowで実現しようとするとどうなるかについても回答いたします。
しかし上述の通り、Shopify Flowで実現するより、
Matrixifyなどで一括変更した方が簡単かつ間違いがないと考えています。
なお、これから説明する内容は動作確認をしておりませんので、
何か不具合がある可能性もあります。
まず、下図のようなフローを組みます。
- トリガー: Scheduled time
https://help.shopify.com/ja/manual/shopify-flow/reference/triggers/scheduled-time
毎月1日に実行するよう設定します。
- アクション: Get customer data
https://help.shopify.com/ja/manual/shopify-flow/reference/actions/get-customer-data
下図のように設定をします。
「クエリを編集」に設定されている
tag_not: '_taget_metafield:false'
が今回の設定の肝になります。
「顧客データの取得」は、データの絞り込みにメタフィールドを利用できません。
そのため、メタフィールドと顧客タグの両方に値を埋め込むことで絞り込みを行います。
- 繰り返し処理: For each loop (iterate)
3つ作成しますが、内容はどれも下図と同じです。
- それぞれの繰り返し処理において下記を実行します。
- メタフィールドのアップデート
- 顧客タグ「_taget_metafield:true」を削除
- 顧客タグ「_taget_metafield:false」を追加
このフローによって、
顧客タグ「_taget_metafield:false」を持たない顧客(逆にいうと、「_taget_metafield:true」を持っている顧客)を100件絞り込み、そのそれぞれの顧客に対して、
メタフィールドをfalseにアップデートしつつ、
顧客タグ「_taget_metafield:true」を外し、
顧客タグ「_taget_metafield:false」を追加する、
という処理をします。
(※本来、メタフィールドのアップデートが完了したら、顧客タグの編集を行う、というフローを組みたかったのですが、仕様上断念しました。)
さて、
このやり方の問題点の1つとして、Get Customer Dataは、
100件の顧客データしか扱えない事が挙げられます。
もし、質問者様のストアに100目以上の顧客が登録されている場合、
フローを複製し、毎月1日に10分おきほとで、それぞれのFlowを予定時刻実行するようにします。
※100件のデータ処理を完了するのに10分で足りるかは試してみないとなんとも言えません。もっと長くした方が良いかもしれませんし、もっと早く完了できるかもしれません。
なお、
フローを複数作成するのではなく、
1つのフロー中で完結する方法もあります。
For Eachのthenからwait 10分に繋ぎ、
そこから際にGet Customer Dataを繋いで、
同様の処理を十分に顧客全員を更新できる数まで増やします。
このやり方の問題01
顧客数が多すぎる場合、各処理を作ったり複製したりするだけでも大変。
このやり方の問題02
フローを複製する方法も、フローの中で処理を複製する方法も、
繰り返し処理の中にミスがあるとき、
全てのフローや処理を修正する必要があり大変。
このやり方の問題03
問題、というはわけではないのですが、
顧客タグも併用するため、
対象のメタフィールドを更新する処理に、
顧客タグの編集処理を必ず加える必要があり、
少し手間です。
そのようなわけで、
Matrixifyなどでの一括更新をおすすめしています。
ご参考まで。
(キュー田辺)


