メインコンテンツへスキップ

概要

カート放棄は、失われた収益を回復するための最もインパクトの大きい機会の一つです。カートを放棄したほとんどのユーザーはまだ購入する意思があり、タイムリーなリマインダーが必要なだけです。 このガイドでは、OneSignalで以下を実行する自動カート放棄Journeyを構築する方法を説明します:
  • カートアクティビティの検出
  • 短い非アクティブ期間の待機
  • パーソナライズされたリマインダーの送信
  • 購入またはカート削除後のメッセージ送信即時停止
以下のいずれかを使用して実装できます:
  • Custom Events(ほとんどの実装に推奨)
  • Tags(よりシンプルで、限定的なユースケース)
適切な選択は、メッセージに表示したいデータとそのデータの出所によって異なります。

構築する内容

このガイドを完了すると、以下が得られます:
  • OneSignalに送信されるカートアクティビティ(TagsまたはCustom Eventsを経由)
  • 明確なコード定義の放棄シグナル
  • カートデータをパーソナライズするメッセージテンプレート
  • 以下を実行するJourney:
    • 放棄シグナルが受信されたときに開始
    • 送信前に待機
    • カート放棄メッセージを送信
    • カートが空になるか購入されたときに即座に終了
  • メッセージと収益のパフォーマンスを測定するAnalytics

トラッキング方法の選択

Custom EventsまたはTagsを使用してカートアクティビティを追跡できます。
  • Custom Eventsを使用する場合:
    • 非アクティブ期間後に放棄を検出できる
    • リッチなカートデータ(アイテム、画像、価格)が必要
    • イベントが放棄ごとに1回だけ発火することを保証できる
  • Tagsを使用する場合:
    • デフォルトで状態ベースの安全性が必要
    • シンプルなカートデータのみが必要
    • セグメント制御のエントリーとエグジットを好む
このガイドでは両方のアプローチを示します。Custom Eventsはより柔軟性がありますが、より注意が必要です。

カート放棄のモデリング方法

OneSignalはカートが放棄されたタイミングを自動的に判断しませんカートが放棄されたタイミングは、あなた自身のコードまたはシステムで判断し、OneSignalに通知します。
cart_abandonedの意味 cart_abandonedイベントは状態遷移を表す必要があります - カートがアクティブだった → ユーザーがエンゲージメントを停止した → カートが放棄されたとみなされる。 このイベントは以下の場合に送信する必要があります:
  • 意味のある非アクティブ期間の後(例:1時間)
  • カートにまだアイテムが含まれている場合のみ
カートの更新ごとにcart_abandonedを送信しないでくださいこのイベントを繰り返し送信すると、ユーザーがJourneyに複数回再エントリーし、スパムになる可能性があります。

Journeysが放棄シグナルを使用する方法

OneSignalがcart_abandonedを受信すると:
  • ユーザーがJourneyにエントリーする資格を得ます
  • 待機期間により自然に戻る時間が与えられます
  • エグジットしない場合のみメッセージが送信されます
  • cart_emptiedが受信されるとユーザーは即座にエグジットします
Journeysはタイミングと繰り返しを制御します — 放棄を判断するわけではありません。

セットアップ

ステップ1. カートデータとソースを計画する

表示したいカート情報そのデータの出所を決定してください。 一般的なカートデータには以下が含まれます:
  • 商品名、画像、価格、数量
  • カート内のアイテム数
  • カートに戻るディープリンク
データソースによってイベントの送信方法が決まります:
データソース推奨方法
アプリまたはウェブサイトOneSignal Frontend SDK
バックエンドまたはデータベースOneSignal REST API
サードパーティプラットフォーム統合ベースのCustom Events
このステップの終わりまでに、どのデータを送信するかどのように送信するかがわかります。

ステップ2. カート状態シグナルをOneSignalに送信する

カート状態の変更を表すシグナルを送信する必要があります。
シグナル目的
cart_abandonedカートアクティビティが検出され、未解決
cart_updatedカートの内容が変更
cart_emptiedカートがクリアまたは購入完了
イベント名とタグ名は、SDK/API呼び出し、セグメント、Journeyルール、Liquidテンプレート間で正確に一致する必要があります。
OneSignal WebまたはMobile SDKを使用してCustom EventsまたはTagsを送信します。
SDKメソッド説明
trackEventCustom Eventを送信(Mobile SDKWeb SDK
addTagsTagを追加(Mobile SDKWeb SDK
removeTagsTagを削除(Mobile SDKWeb SDK
Custom Eventの例
cart_abandonedイベントは、ユーザーがカートに入ったり更新したりしたときではなく、カートの非アクティブ期間の後に送信する必要があります。cart_emptiedイベントは、カートが空になるか購入が完了したときに即座に送信する必要があります。
OneSignal.User.trackEvent("cart_abandoned", {
  product_name: "24 Pack of Acorns",
  product_image: "https://i.imgur.com/ssPCfbC.png",
  product_price: 12.99,
  product_quantity: 1,
  cart_url: "https://yourdomain.com/cart"
});
Tagの例
この例では、cart_updatedタグをカートが最後に更新された時刻を表すUnixタイムスタンプ(秒単位)に設定します。ブール値(true/false)も使用できますが、タイムスタンプはTime Operatorsでより柔軟性を提供します。
OneSignal.User.addTags({
  cart_updated: unix_timestamp_seconds,
  product_name: "24 Pack of Acorns",
  product_image: "https://i.imgur.com/ssPCfbC.png",
  product_price: "$12.99",
  product_quantity: "1",
  cart_url: "https://yourdomain.com/username/cart"
})
cart_emptiedシグナルを送信しないと、ユーザーは購入後もカート放棄メッセージを受信し続ける可能性があります。

ステップ3. カート放棄メッセージテンプレートを作成する

カートデータを動的に参照するメッセージテンプレートを作成します。 このセクションで使用されるコンセプトの詳細については、以下を参照してください:
Liquid構文形式を使用してイベントプロパティを参照します:
Liquid
{{journey.event.name.properties.property_name | default: "fallback_value"}}
メッセージ
Liquid
You left {{journey.event.cart_abandoned.properties.product_name | default: "items"}} in your cart.
画像
Liquid
{{journey.event.cart_abandoned.properties.product_image | default: "https://i.imgur.com/ssPCfbC.png"}}
起動URL
Liquid
{{journey.event.cart_abandoned.properties.cart_url | default: "https://yourdomain.com/cart"}}
product_image直接的な一般公開されている画像URLでない場合、画像は表示されません。product_imageがオンラインで利用可能な画像ファイルの名前である場合、以下の形式を使用して画像を参照できます: https://yourdomain.com/images/{{journey.event.cart_abandoned.properties.product_image | default: "stock_image"}}.png
Custom Eventsを使用したカート放棄テンプレートの例
メールの例、ヘルプ、またはもっとインスピレーションが必要ですか?

ステップ4. カート放棄セグメントを作成する(Tagsのみ)

このステップは、Tagsを使用してカートアクティビティを追跡している場合のみ必要です。Custom Eventsを使用している場合は、このステップをスキップできます。
セグメントはJourneyにエントリーできるユーザーを決定します。詳細はセグメントを参照してください。 User Tagフィルターを選択して、cart_updatedタグがexistsのユーザーを追跡し、AND Last Sessionフィルターをless than 7 days agoに設定します
cart_updatedタグが存在し、最後のセッションが7日以内であるTagフィルター付きカート放棄セグメント
カートを更新し、過去7日以内にアプリまたはウェブサイトを訪問したユーザーを追跡できるようになりました。以下のいずれかの条件が満たされると、ユーザーはセグメントから自動的に削除されます:
  • アプリ/ウェブサイトを最後に訪問してから7日が経過した場合
  • cart_updatedタグが削除された場合

ステップ5. カート放棄Journeyを作成する

カートアクティビティに反応するJourneyを作成します。詳細はJourneysを参照してください。
新しいカート放棄Journey作成画面

Journeyの設定

エントリー、エグジット、再エントリーのルールの詳細については、Journeyの設定ガイドを確認してください。 エントリールール
  • Custom Eventを選択
  • Custom Event名:cart_abandoned
ユーザーはcart_abandonedイベントが送信されるたびにJourneyにエントリーします。意味のある非アクティブ期間の後にのみこのイベントを送信してください。
カート放棄Journey Custom Eventエントリールール
エグジットルール
  • Meet a certain conditionを選択
  • Exit when custom event condition occursをチェック
  • Custom Event名:cart_emptied
カート放棄Journey Custom Eventエグジットルール
ユーザーは以下の場合にJourneyからエグジットします:
  • cart_emptiedイベント(ステップ3から)が実行された場合。
  • Journeyを完了した場合。
再エントリールール(Tagsのみ):
  • Yes, after a certain amount of timeを選択
  • 再エントリー時間を1 dayに設定
カート放棄Journey再エントリールール
このガイドをここまで完全に実行していれば、ユーザーは:
  1. カートを放棄/更新したときにJourneyにエントリーします
  2. カートを空にするかJourneyを完了したときにエグジットします。
  3. Journeyに再エントリーする資格があります:
    • Custom Eventscart_abandonedイベントが実行されるたび
    • Tags:Journeyから最後にエグジットしてから1日が経過し、セグメントに含まれている場合。
Journeyの設定を保存してください。

Journeyのステップ

ユーザーはセグメントに一致するとJourneyにエントリーします。これは通常、イベント/タグが受信されてから数分以内に発生します。 ユーザーは、終わりに到達するかエグジットルールが満たされるまで、Journeyをステップごとに進みます。 基本的なカート放棄Journeyの場合、2つのことを行います:
  1. ユーザーにカートを空にする十分な時間を与える(購入するか手動でカートを空にする)
  2. カートを空にしない場合、カート内のアイテムについてリマインダーメッセージを送信する
まずJourneyにWaitステップを追加してこれを実現します。
  • 待機時間を希望する長さに設定します。購入意思がまだあるうちにメッセージを送信できるように、1 hourに設定することを推奨します。
Messageステップを追加します。
  • ステップ4で作成したAbandoned Cartプッシュ通知テンプレートを選択します。
基本的なカート放棄Journeyのステップ
基本的なカート放棄Journeyの設定が完了しました。ユーザーがJourneyにエントリーすると、1時間待機します。Journeyからエグジットしない場合、カート放棄プッシュ通知を受信します。

高度なJourneyセットアップ

このガイドで得た知識を使用して、時間の経過とともにより多くのメッセージを送信するようにJourneyを拡張できます。

メッセージシーケンス

非常に一般的な高パフォーマンスのケイデンスのベストプラクティスタイミングシーケンスは以下の通りです:
  1. 1時間後に最初のメッセージを送信(このガイドで完了)。
  2. 1日間の別のWaitステップを追加し、2番目のメッセージを送信(カート更新後約24時間)。
  3. 2日間の別のWaitステップを追加し、3番目のメッセージを送信(カート更新後約72時間)。
メッセージの種類とコンテンツ: OneSignalで設定したチャネルに応じて、オムニチャネルアプローチを使用するとより良い結果が得られます。
  1. このガイドでは、最初の1時間後にプッシュ通知メッセージを送信する方法を示しています。これは、ユーザーがまだオンラインである可能性がある間に販売を獲得するための有用なリマインダーとして使用されます。
  2. 2番目のメッセージにはプッシュとメールの両方を使用することを検討してください。この2番目のメッセージを使用して、軽い緊急性とともに利点と社会的証明を強調し、購入を促しましょう。
  3. シーケンスの最後のメッセージには、メールまたはSMS(ユースケースに応じて)を「最後のチャンス」として使用してください。割引コードやその他のインセンティブを使用して購入を促すことを検討してください。

フォールバックメッセージ

OneSignalのJourneysは、メッセージが確認済み配信、クリック、または開封されたかどうかを確認し、特定の期間内に実行されない場合にフォールバックメッセージを送信できるWait Until分岐ロジックを提供します。 これは、特定のメッセージチャネルの登録を解除した可能性があるユーザーにとって非常に便利です。フォールバックメッセージの設定方法の詳細は、フォールバックメッセージガイドをご覧ください。

パフォーマンスの追跡

Journey分析を使用して、Journey全体のパフォーマンスを追跡できます。テンプレート分析を使用して、各メッセージのパフォーマンスも追跡できます。

Outcomesで収益を追跡する

このJourneyの収益を追跡するには、Custom Outcomesを使用できます。 購入が行われたとき、イベントを「Custom Outcome」として送信して、送信された特定のメッセージに関連する収益を追跡できます。 Custom OutcomesはMobile SDKまたはWeb SDKを通じて送信できます。
Example: Send purchase outcome via frontend SDK
// Example: capture total price and item count at checkout
const checkoutPriceTotal = document.querySelector(".checkout-price-total").innerText;
const checkoutItemsTotal = document.querySelector(".checkout-items-total").innerText;

function updateOSOnCartPurchase(checkoutPriceTotal, checkoutItemsTotal) {
  const purchasePriceTotal = parseFloat(checkoutPriceTotal);
  const purchasedItemCount = parseInt(checkoutItemsTotal);

  OneSignalDeferred.push(function (OneSignal) {
    OneSignal.Session.sendOutcome("Purchase", purchasePriceTotal);
    OneSignal.Session.sendOutcome("Purchased Item Count", purchasedItemCount);
  });
}

const submitPurchaseButton = document.querySelector(".submit-payment");
if (submitPurchaseButton) {
  submitPurchaseButton.addEventListener("click", () => {
    updateOSOnCartPurchase(checkoutPriceTotal, checkoutItemsTotal);
  });
}
Outcomesは、定義されたアトリビューションウィンドウ内でユーザーがクリックした、または影響を受けたメッセージに収益を帰属させることができます。
カート放棄Journeyの実装が正常に完了しました。メッセージの送信を開始する準備ができたら、Set Liveを選択してください。
サポートが必要ですか?サポートチームとチャットするか、support@onesignal.comにメールしてください以下を含めてください:
  • 発生している問題の詳細と再現手順(利用可能な場合)
  • OneSignal App ID
  • 該当する場合は、External IDまたはSubscription ID
  • 該当する場合は、OneSignalダッシュボードでテストしたメッセージのURL
  • 関連するログまたはエラーメッセージ
お気軽にお問い合わせください!