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

パーソナライゼーションの仕組み

パーソナライゼーションは、メッセージフィールドに値を注入できるテンプレート言語であるLiquid構文によって実現されます。 次を使用してメッセージをパーソナライズできます:
  • データフィード:APIからのリアルタイムデータ。
  • プロパティ:組み込みのユーザー、ジャーニー、メッセージ、テンプレート、アプリ、または組織の値。
  • カスタムイベント:ジャーニーメッセージをパーソナライズするためのリアルタイムユーザーイベント。
  • タグ:ユーザーごとにOneSignalに保存されたデータ。
  • API: custom_data:メッセージ作成APIに直接渡すカスタムデータ。
  • 動的コンテンツ:ダッシュボードアップロード経由のCSVベースのパーソナライゼーション。

主要な考慮事項

メッセージをパーソナライズすることで、ユーザーはアプリとより深くつながり、エンゲージメントと収益が増加する可能性があります。一般的な例としては、メッセージに人の名前や特定の情報(カート放棄アイテムなど)を入れることがありますが、ユースケースは無限です。 目標は何ですか? メッセージで何を送信したいですか?例:
  • 名前やIDなどのユーザープロパティを追加する
  • 請求書またはOTPを表示する
  • CSVから動的コンテンツを送信する
データはどこにありますか?
  • データはプロパティやタグのようにOneSignalに保存されていますか?
  • データは自分のデータベースに保存されていますか?
  • バックエンドからOneSignalにデータを渡す必要がありますか?
メッセージをどのように送信しますか?
  • 一回限りのメッセージ:サーバーまたはOneSignalダッシュボードからメッセージを送信しますか?
  • 定期的なメッセージ:ジャーニーまたは他の自動化されたワークフローを使用しますか?
例:
  • 目標:ユーザーのログインを支援するためにワンタイムパスコードを送信する。
  • データ
    • バックエンドに保存されたOTP。
    • OneSignalにタグとして保存されたユーザー名。
    • OneSignalにプロパティとして保存された外部ID。
  • 送信
    • REST APIを使用してサーバーから。
    • ジャーニーを使用した自動化されたワークフローから。
この例の詳細なウォークスルーは、検証、マジックリンク、およびOTP例チュートリアルで利用できます。以下のチュートリアル例をご覧ください。

データソース

メッセージをパーソナライズするために利用可能なオプション。

データフィード

データフィードは、送信時にAPIからリアルタイムデータを直接メッセージに取り込む方法です。テンプレートをデータソースに接続するだけで、サーバーからデータを取得してメッセージに注入します。

プロパティ

Liquid構文を使用して参照できる事前定義されたフィールド。例:
こんにちは!
メール {{ subscription.email }} でサブスクライブしていただきありがとうございます。
あなたのユーザーIDは {{ subscription.external_id }} です。
プロパティはアプリ内メッセージまたはライブアクティビティでは利用できません
  • サブスクリプションプロパティ
  • ジャーニープロパティ
  • メッセージプロパティ
  • テンプレートプロパティ
  • OneSignalプロパティ
  • subscription.external_id: サブスクリプションに関連付けられた外部ID。
  • subscription.email: メッセージが送信されるメールサブスクリプションのメールアドレス。
  • subscription.phone_number: メッセージが送信されるSMSサブスクリプションの電話番号。
  • subscription.push_token: メッセージが送信されるプッシュサブスクリプションのプッシュトークン。
  • subscription.language: ユーザーの言語コード。
  • subscription.unsubscribe_token: 配信停止のためにサブスクリプションを識別するために使用されるトークン(メールサブスクリプションの場合)。

カスタムイベント

ジャーニーで使用されるテンプレート内でカスタムイベントを参照します。ジャーニーの構成に応じて、ユーザーに代わって1つ以上のカスタムイベントを保存する場合があります。Liquid構文を使用して、これらの保存されたイベントのプロパティを表示したり、イベントに基づいてメッセージの一部を条件付きで表示したりできます。
  • カスタムイベントプロパティ
  • カスタムイベント構造の例
  • プッシュテンプレートでのイベントの使用
journey.first_event
イベントトリガージャーニーの場合、これは常にユーザーがジャーニーに入るきっかけとなったイベントです。それ以外の場合は、Wait Until条件に一致した最初のイベントです。
{% assign event = journey.first_event %}
journey.last_event
保存された最新のカスタムイベント。保存されたカスタムイベントが1つだけの場合、first_eventlast_eventは同じものを返します。
{% assign event = journey.last_event %}
journey.event.most_recent_event_name
指定された名前を持つ最新のイベント。同じイベントが複数回使用される場合、これは最新のインスタンスを返します。例:purchase
{% assign event = journey.event.purchase %}
特殊文字(例:スペース)の場合、イベント名に英数字以外の文字が含まれている場合はハッシュ表記を使用します:
{% assign event = journey.event["order status"] %}
journey.all_events
受信した順序で、このジャーニーのユーザーのために保存されたすべてのイベントの配列を提供します。forループを使用して反復処理できます。
{% for event in journey.all_events %}
  {{ event.name }}
{% endfor %}
first_eventlast_eventは、それぞれall_events[0]all_events[-1]の短縮形です。

タグ

タグは、各ユーザーに設定できるkey: valueデータです。例:
こんにちは {{ first_name | default: "友達" }}
レベル {{ level | default: "1" }} 到達おめでとうございます!
ユーザーAにfirst_name: Jonlevel: 5を設定し、ユーザーBにfirst_name: Jefflevel: 100を設定すると、それぞれがメッセージで自分の名前とレベルを確認します。それ以外の場合は、デフォルト値が表示されます。

API custom_data

custom_dataメッセージ作成APIを使用して、バックエンドから直接パーソナライゼーションを追加します。 手順:
  1. テンプレートを作成する
  2. {{ message.custom_data.key }}形式でLiquid構文を使用する
  3. custom_dataオブジェクトとtemplate_idを使用してAPIリクエストを送信する

例:フラットJSON

Template
{{message.custom_data.product_name}}の請求書の準備ができました。
URL: https://your-domain.com/invoice={{message.custom_data.invoice_id}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "invoice_id": "463246732",
    "product_name": "Widget"
  }
}
顧客に表示される内容:
  • 「Widgetの請求書の準備ができました。」
  • 最終URL:https://your-domain.com/invoice=463246732

例:配列データ

Template
あなたの{{message.custom_data.cart_items[0].item_name}}があなたを待っています!
画像:{{message.custom_data.cart_items[0].image_url}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "cart_items": [
      {
        "item_name": "sweater",
        "img_url": "https://.../sweater.png"
      },{
        "item_name": "socks",
        "img_url": "https://.../socks.png"
      }
    ]
  }
}
顧客に表示される内容:
  • 「あなたのsweaterがあなたを待っています!」
  • 画像:https://.../sweater.png

例:一括パーソナライゼーション

1つのリクエストで多くのユーザーに対して単一のメッセージをパーソナライズするには:
Template
{% assign eid = message.custom_data.users[subscription.external_id] %}
こんにちは {{ eid.first_name }}さん、あなたは {{ eid.points }} ポイントを持っています。あなたのレベルは {{ eid.level }} です。
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_aliases": {
    "external_id": ["user123", "user456"]
  },
  "custom_data": {
    "users": {
      "user123": { "first_name": "John", "points": "150", "level": "Gold" },
      "user456": { "first_name": "Sarah", "points": "200", "level": "Platinum" }
    }
  }
}
顧客に表示される内容:
  • 「こんにちは Johnさん、あなたは 150 ポイントを持っています。あなたのレベルは Gold です。」
  • 「こんにちは Sarahさん、あなたは 200 ポイントを持っています。あなたのレベルは Platinum です。」

動的コンテンツ

データのCSVを使用して、OneSignalダッシュボードにアップロードし、ユーザーごとのデータに基づいてキャンペーンをカスタマイズできます。詳細については、動的コンテンツを参照してください。

チュートリアル