Shopify アプリに関する話題はこちら
shopify flowのスケジュール実行で顧客データを取得したいのですが、例えば「90日経過」のタグが付いていて最終購入日から120日以上経過している顧客を取得するクエリはどのように書けばよいでしょうか?
クエリの書き方が見つからず困っております。
解決済! ベストソリューションを見る。
成功
> 「90日経過」のタグが付いて
こちらは下記のようにクエリを設定します。
tag:'90日以内'
> 最終購入日から120日以上経過している
こちらについては設定できないように思いました。
クエリに、設定できる項目は、おそらく下記のページにて紹介されているものだけです。
https://shopify.dev/api/admin-graphql/2022-07/queries/customers
accepts_marketing
country
customer_date
email
last_abandoned_order_date
order_date
orders_count
phone
state
tag
tag_not
total_spent
updated_at
こういったことならできます。
顧客タグに'90日以内'を持ち、かつ、合計購入金額が3万円未満
tag:'90日以内' AND total_spent:<30000
最終購入日で絞り込みたい場合は、
下記のようにすれば惜しいところまでは行けます。
Get Customer Data
↓
for each
↓
条件: last_orderのcreated_atがいついつより前
最後の「条件」において、
具体的な日付より前、しか設定できないのが難点です。
「何日前」という指定ができません。
カスタムフィールドをうまく使えばいくかもしれません。
カスタムフィールドを使って、
「最終購入日より何日前」を実現するアイデアは、
下記の投稿を参考にしていただければと思います。
ご参考まで。
(キュー田辺)
成功
> 「90日経過」のタグが付いて
こちらは下記のようにクエリを設定します。
tag:'90日以内'
> 最終購入日から120日以上経過している
こちらについては設定できないように思いました。
クエリに、設定できる項目は、おそらく下記のページにて紹介されているものだけです。
https://shopify.dev/api/admin-graphql/2022-07/queries/customers
accepts_marketing
country
customer_date
email
last_abandoned_order_date
order_date
orders_count
phone
state
tag
tag_not
total_spent
updated_at
こういったことならできます。
顧客タグに'90日以内'を持ち、かつ、合計購入金額が3万円未満
tag:'90日以内' AND total_spent:<30000
最終購入日で絞り込みたい場合は、
下記のようにすれば惜しいところまでは行けます。
Get Customer Data
↓
for each
↓
条件: last_orderのcreated_atがいついつより前
最後の「条件」において、
具体的な日付より前、しか設定できないのが難点です。
「何日前」という指定ができません。
カスタムフィールドをうまく使えばいくかもしれません。
カスタムフィールドを使って、
「最終購入日より何日前」を実現するアイデアは、
下記の投稿を参考にしていただければと思います。
ご参考まで。
(キュー田辺)
田中さま
詳しいご説明ありがとうございます。
何日前という設定をするのは難しいのですね。
一旦タグの部分の設定をためしてみて、期間の部分については他の方法も試してみようと思います。
またわからない点があればご質問させていただきます。
たびたびで申し訳ないのですが、タグ付けでのデータ取得まではうまくいきましたが、
そのあとメタフィールドのアップデートのところでエラーとなって先に進めない状況です。
Get Customer Data
↓
for each
↓
Update customer metafield
valueの内容
{% assign elapsedday = 240 | times: 24 | times: 60 | times: 60 %}
{% assign currentday = 'today' | date: '%s' %}
{% assign lastorderfrom = getCustomerData.lastOrder.createdAt | date: '%s' | plus: elapsedday %}
{% if lastorderfrom <= currentday %}true{% else %}false{% endif %}
最終注文日に240日をプラスして、本日の日付より前の場合はtrueになるようにしたいのですが、エラーになってしまいます。
修正方法をご教授いただければ幸いです。
@yo0406 様
ロジックの正しさは確認しておりませんが、
おそらく下記のようにすることでエラーが出なくなります。
{%- assign elapsedday = 240 | times: 24 | times: 60 | times: 60 -%}
{%- assign currentday = 'today' | date: '%s' | plus: 0 -%}
{%- assign lastorderfrom = getCustomerData.lastOrder.createdAt | date: '%s' | plus: elapsedday -%}
{%- if lastorderfrom <= currentday -%}true{%- else -%}false{%- endif -%}
どうやら、
currentdayが数値として扱われておらず、
if文で、lastorderfromと比較する際にエラーが出るようです。
(lastorderfromは数値、currentdayは数値ではない、ので、異なる型を比較しようとしてエラー。)
そのため、
currentdayにplus: 0することで、数値にキャストしています。
また、各liquidタグを{%- -%}に変更しました。
こうすることで、liquidタグ周辺の改行や空白が除去されます。
ご参考まで。
(キュー田辺)
田辺様
早速のご返信ありがとうございます。
データの型が違っていたのですね。
修正頂いたコードで一度試してみます。
Shopifyの請求書の支払いが失敗したという通知を受け取って驚いたことはありますか。初めての支払いでエラーが発生したり、これまで何の問題もなく支払いできていたのに突然失敗し...
By Minami_ Sep 8, 20242023年2月、Shopifyはcheckout.liquidを廃止し、Checkout Extensibilityに移行することを発表いたしました。この新しいチェックアウト...
By JasonH Aug 15, 2024「味噌の可能性を、とき放つ」をコンセプトに、豊かな自然に恵まれた信州で味噌の製造販売を行う新田醸造。江戸末期に創業した老舗のみそ屋さんですが、2024年春、顧客層や販売範囲の...
By Minami_ Jul 30, 2024