FROM CACHE - jp_header
このコミュニティはピアツーピアサポートに移行しました。Shopify サポートは今後、このコミュニティへのサービスを提供いたしません。これからもぜひ、他のマーチャントやパートナーとつながり、サポートし合い、経験を共有してください。 当社の行動規範に違反する行動や削除を希望するコンテンツがありましたら、引き続きご報告ください

Shopify Flowを用いて、同じ商品を2回購入してくれた顧客にアクションをする方法

解決済

Shopify Flowを用いて、同じ商品を2回購入してくれた顧客にアクションをする方法

るん
Shopify Partner
86 3 11

いつもお世話になっております。

 

同じ商品を2回購入してくれた顧客にメールを送りたいです。

Shopify FlowとKlaviyoを使って送る方法を考えています。

 

1回目の購入時→顧客タグに「商品ハンドル」のタグを追加

2回目の購入時→顧客タグの中に今回購入した商品ハンドルのタグがあるかを判定し、あったらKlaviyoのTrack an Eventを実行

 

という方法を考えていたのですが、「顧客タグの中に今回購入した商品ハンドルのタグがあるかを判定」部分がうまくいきません。

どのように設定すれば、良いでしょうか?

 

それとも全く別の方法がありますでしょうか?

よろしくお願いいたします。

1 件の受理された解決策

Qcoltd
Shopify Partner
1098 449 444

成功

@るん 様

 

Run Codeを利用されるのが良いかと思います。

 

Flowの全体図です。最後のLog outputをKlaviyoのアクションにご変更ください。

screenshot_20240930_01.png

 

Run Codeの内容です。

screenshot_20240930_02.png

 

input

{
  order {
    lineItems {
      product {
        handle
      }
    }
    customer {
      tags
    }
  }
}

 

code

export default function main(input) {
  let isSecondPurchase = false;
  const handles = input.order.lineItems.map(lineItem => lineItem.product.handle);
  handles.forEach(handle => {
    if(!isSecondPurchase) isSecondPurchase = input.order.customer.tags.includes(handle);
  })
  return {
    isSecondPurchase: isSecondPurchase
  }
}

 

output

type Output {
  isSecondPurchase: Boolean!
}

 

 

十分に検証はしていませんので、

うまく動作しない場合は、Run Codeのcode を見直していただくと良いかと思います。

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/

元の投稿で解決策を見る

3件の返信3

Qcoltd
Shopify Partner
1098 449 444

成功

@るん 様

 

Run Codeを利用されるのが良いかと思います。

 

Flowの全体図です。最後のLog outputをKlaviyoのアクションにご変更ください。

screenshot_20240930_01.png

 

Run Codeの内容です。

screenshot_20240930_02.png

 

input

{
  order {
    lineItems {
      product {
        handle
      }
    }
    customer {
      tags
    }
  }
}

 

code

export default function main(input) {
  let isSecondPurchase = false;
  const handles = input.order.lineItems.map(lineItem => lineItem.product.handle);
  handles.forEach(handle => {
    if(!isSecondPurchase) isSecondPurchase = input.order.customer.tags.includes(handle);
  })
  return {
    isSecondPurchase: isSecondPurchase
  }
}

 

output

type Output {
  isSecondPurchase: Boolean!
}

 

 

十分に検証はしていませんので、

うまく動作しない場合は、Run Codeのcode を見直していただくと良いかと思います。

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/
るん
Shopify Partner
86 3 11

株式会社Q (キュー)田辺様

 

いつもお世話になっております。

今回も丁寧にご回答いただき、ありがとうございます。

 

こんな方法があるのですね。

Run Codeは使用したことがなく、よく理解していないのですが、勉強してみようと思います。

もしよろしければ、簡単に解説をお願いしても良いでしょうか?

よろしくお願いいたします。

Qcoltd
Shopify Partner
1098 449 444

@るん 様

 

codeの解説、でよかったでしょうか?

 

codeにコメントを入れてみました。

export default function main(input) {

  // 同じ商品を2回購入しているかのフラグ
  let isSecondPurchase = false;

  // 注文のlineItemsからproduct.handleを取り出して、配列に変換。["handle1","handle2","handle3"]のような配列が出来上がる
  const handles = input.order.lineItems.map(lineItem => lineItem.product.handle);

  // handelsの要素1つずつ(注文があった商品のハンドル)が顧客タグに含まれるかを調査
  handles.forEach(handle => {
    // まだ、同じ商品を2回購入していることが確認できていない場合
    if(!isSecondPurchase) {
      // 顧客タグに、商品ハンドルが含まれていれば、同じ商品を2回購入しているかのフラグをtrueに、そうでなければ、falseにする
      isSecondPurchase = input.order.customer.tags.includes(handle);
    }
  })

  // outputに渡す値
  return {
    isSecondPurchase: isSecondPurchase
  }
}

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/