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

概要

時間演算子を使用すると、特定の時点に対して相対的なメッセージを送信できます——アクションが発生した後今後の日付の前など。 その時点をUnix タイムスタンプ(秒単位)としてタグを使用してユーザーに保存します。OneSignal は現在時刻をそのタイムスタンプと比較し、経過時間(または残り時間)に基づいてユーザーをターゲットにできます。 これにより、メッセージを手動でスケジュールすることなく、リマインダー、フォローアップ、期限切れメッセージを簡単に自動化できます。 一般的な使用例:
  • カート放棄:一定時間後にチェックアウトしていないユーザーにリマインドする
  • イベントリマインダー:予定されたアポイントや更新日の前にユーザーにメッセージを送信する
  • マイルストーン:ユーザーが期限までにアクションを完了していない場合のフォローアップ
  • 誕生日:ユーザーの誕生日(または誕生日前後)に自動メッセージを送信する
時間演算子は有料プランでのみ利用できます。無料プランでも、ファーストセッションやラストセッションなどのデフォルトの時間ベースセグメントフィルターを使用できます。

いつ使用すべきか?

時間演算子は次の場合に使用してください:
  • 固定されたカレンダー時間ではなく、イベントに対して相対的なメッセージを送信する
  • 移動する時間ウィンドウを作成する(例:「24~48時間後」)
  • 異なる日付を持つ多くのユーザーに対して同じロジックを再利用する
  • 時間の経過とともに資格を継続的に評価する
イベントが発生したときに即座にメッセージをトリガーする必要がある場合は、代わりに**カスタムイベント**の使用を検討してください。

タグ vs カスタムイベント

多くの「リマインダー」ユースケースはタグまたはカスタムイベントのいずれかで解決できます。最適なオプションは、保存する必要があるものと自動化をトリガーする方法によって異なります。
  • ユーザーに最新の既知タイムスタンプ(例:cart_updated_atsubscription_expires_at)を保存し、その値に基づいて時間をかけてセグメント化したい場合はタグを使用します。
  • 各イベント発生(プロパティ付き)を記録し、リアルタイムの行動に基づいてジャーニーをトリガーしたい場合はカスタムイベントを使用します。
実際には、多くの実装で両方を使用できます:リアルタイム追跡用のカスタムイベントと、後でセグメント化したいユーザー状態用のタグ。
TagsCustom Eventsは、どちらもユーザーにデータを追加する方法です。ただし、いくつかの重要な違いがあります:
機能TagsCustom Events
データ使用セグメンテーションとパーソナライゼーションセグメントなしでJourneysをトリガー、Wait Untilステップ、Journeys内で直接パーソナライゼーション
データ保持期間永久30日以上(永久ストレージが利用可能
データ形式キーバリューの文字列または数値JSON
データソースOneSignal SDK、API、または統合(制限あり)OneSignal SDK、API、または統合
データアクセスセグメンテーションとメッセージパーソナライゼーションJourneysとJourneyメッセージテンプレートのパーソナライゼーション、セグメンテーション(近日公開)
TagsとCustom Eventsの主な違いは、その深さとユースケースにあります。Tagsはユーザーのプロパティであり、名前、アカウントステータス、場所などです。Eventsはユーザーが行ったことであり、アイテムの購入、レベルの完了、友達の招待などです。tagsとeventsの両方は、セグメンテーションとパーソナライゼーションに使用できます。 実際には、両方を使用する可能性が高いです:
  • 静的であまり変更されないユーザープロパティにはTags
  • リアルタイムシナリオ、複雑なセグメンテーション、より洗練されたジャーニーワークフローにはCustom Events

クイックリファレンス

  1. イベント日を秒単位の Unix タイムスタンプに変換します。
  2. キーがイベント名で、値がタイムスタンプを文字列として持つタグを設定します(例:'event_date': '1739145600')。
  3. Time Elapsed Greater Than 演算子を使用してセグメントを作成します:
    • 過去の日付の後の場合、Time Elapsed Greater Than 演算子と正の値を使用
    • 未来の日付の前の場合、Time Elapsed Greater Than 演算子と負の値を使用
よくある間違いは、タイムスタンプを(10桁)ではなくミリ秒(13桁)で設定することです。時間演算子にはが必要です。

過去のイベントの後にメッセージを送信する

何かが起こった後に一定時間が経過した後にユーザーにメッセージを送信したい場合に、このパターンを使用します。 例:ユーザーがカートを更新してから24時間後にカート放棄リマインダーを送信
1

イベント発生時にタイムスタンプを保存する

ユーザーがカートを更新したときに、現在時刻を Unix タイムスタンプ(秒単位)として保存します:
// SDK の例
const timestampSeconds = String(Math.floor(Date.now() / 1000));
OneSignal.User.addTag("cart_updated_at", timestampSeconds);
秒(10桁)を使用し、ミリ秒(13桁)は使用しないでください。
2

セグメントを作成する

  1. Audience > Segments に移動
  2. User Tag フィルターを追加
  3. Keycart_updated_at に設定
  4. Time Elapsed Greater Than を選択
  5. Value1 日(または 24 時間または 86400 秒)に設定
Time Elapsed Greater Than を使用するセグメント
3

上限を追加する(推奨)

上限がないと、ユーザーは永続的にセグメントに残ります。2つ目のフィルターを追加してウィンドウを作成します:
  • Time Elapsed Greater Than 24 時間
  • Time Elapsed Less Than 48 時間
これで、ユーザーはイベント後24〜48時間の間のみセグメントに含まれます。
Time Elapsed Greater Than と Less Than の両方を使用するセグメント
4

ジャーニーでセグメントを使用する

セグメントをターゲットとするジャーニーを作成してメッセージングを自動化します。

未来のイベントの前にメッセージを送信する

このパターンを使用して、今後の日付の前にアポイントや更新などのユーザーにメッセージを送信します。
  1. 未来の日付を Unix タイムスタンプタグとして保存します(例:'future_date': '1739145600'
  2. Time Elapsed Greater Than と希望する入力時間を負の値として使用してセグメントを作成します
    • 例:-2 日(または -172800 秒)
負の値を使用する Time Elapsed Greater Than のセグメント
  1. 同じTime Elapsed Greater Than 演算子を使用して、より近い時間の負の値で上限を追加します
    • 例:-1 日(または -86400 秒)
負の値と上限を使用する Time Elapsed Greater Than のセグメント

例:誕生日メッセージ

各ユーザーの次の誕生日をタイムスタンプとして保存して誕生日メッセージを送信します。
1

次の誕生日のタイムスタンプを保存する

ユーザーの次の誕生日を計算して保存します:
function getNextBirthday(month, day) {
  // month: 0-11 (Jan=0), day: 1-31
  const now = new Date();
  let birthday = new Date(now.getFullYear(), month, day);

  if (birthday <= now) {
    birthday = new Date(now.getFullYear() + 1, month, day);
  }

  return String(Math.floor(birthday.getTime() / 1000));
}

// 例:1月15日の誕生日
OneSignal.User.addTag("birthday", getNextBirthday(0, 15));
2

誕生日セグメントを作成する

  • User Tagbirthday
  • Time Elapsed Greater Than0
ユーザーは誕生日のタイムスタンプが過ぎるとセグメントに入ります。
Time Elapsed Greater Than 0を使用する誕生日セグメント
3

繰り返しジャーニーを設定する

  1. 誕生日セグメントをターゲットとするジャーニーを作成
  2. 再入場を52週間に設定して、ユーザーが来年再入場できるようにする
  3. 送信後に birthday タグを来年の日付に更新する(バックエンドまたはジャーニーで)
可能な場合は、ユーザーの現地時間帯を使用して誕生日タイムスタンプを計算してください。サーバー時刻のみを使用すると、メッセージが予想より早いまたは遅い時間に送信される可能性があります。
メッセージを年々正確に保ちたい場合は、メッセージ送信後にユーザーの birthday タグを次の誕生日に更新してください(例:バックエンドまたはジャーニーステップで)。これを行う場合、代わりにカスタムイベントを使用する方が簡単かもしれません。
誕生日メッセージは、ユーザーの birthday タグ日付の頃にユーザーに送信されます。

FAQ

数式はどのように機能するのですか?(技術的詳細)

時間演算子は、固定日付ではなく相対的で移動するウィンドウを作成できるようにするために存在します。 OneSignal は次の式を使用して経過時間を計算します:
time_elapsed = current_time - tag_timestamp
  • 過去のタイムスタンプ → 正の値
  • 未来のタイムスタンプ → 負の値
演算子:
  • Time Elapsed Greater Than Xelapsed > X のときにマッチ
  • Time Elapsed Less Than Xelapsed < X のときにマッチ
未来のタイムスタンプが Less Than で即座にマッチする理由: 負の数は正の数より小さいです。そのため time_elapsed_lt 2 days(172,800秒)は未来30日のタイムスタンプとマッチします:
-2,592,000 < 172,800  →  true(マッチ)
未来のタイムスタンプは常に負の経過時間を生成するため、今後のイベントの前にユーザーがセグメントに入り、出るタイミングを定義するには負の値を使用する必要があります。正の値は未来の日付の_前_の時間を表すことはできません。

どのようにテストできますか?

  1. 外部ID、サブスクリプションID、メールまたは電話番号でユーザーを見つけます。ユーザーの見つけ方の詳細については、テストサブスクリプションの検索と設定を参照してください。
  2. 現在の日付と未来の日付(今から5分後)の秒単位のタイムスタンプを取得します。
  3. キーが’current_time’と’future_time’で値が秒単位のタイムスタンプである2つのタグを設定します。
  4. 次のフィルターを使用して current_time セグメントを作成します:
    • User Tagcurrent_time Time Elapsed Greater Than2
    • および User Tagcurrent_time Time Elapsed Less Than5
  5. 次のフィルターを使用して future_time セグメントを作成します:
    • User Tagfuture_time Time Elapsed Greater Than-5
    • および User Tagfuture_time Time Elapsed Less Than-2
次のようにユーザーが見えるはずです:
  • 現在時刻日付の2分後に current_time セグメントに入り、現在時刻日付の5分後にセグメントを出る。
  • 未来時刻日付の5分前に future_time セグメントに入り、未来時刻日付の2分前にセグメントを出る。