メインコンテンツへスキップ
Data Feedsを使用すると、送信時にAPIから直接リアルタイムデータをメッセージに取り込むことができます。これにより、OneSignalにデータを事前にロードすることなく、高度にパーソナライズされたコンテンツを配信できます。 次のような頻繁に変更されるデータに対してData Feedsを使用します:
  • ユーザーの現在のリワードバランス
  • 最新の注文ステータス
  • パーソナライズされた製品の推奨
他のパーソナライゼーション方法(タグダイナミックコンテンツなど)は静的データに最適ですが、Data Feedsはライブで頻繁に変化する値に最適です
Data Feedsは現在、Journeysを通じて送信されるメールメッセージのみで利用可能です。 他のチャネルが必要ですか?この短いアンケートにご記入ください

Data Feedsの仕組み

  1. Data Feedを作成 – OneSignalがAPIに接続する方法を構成します。
  2. Data Feedをメッセージテンプレートに添付します。
  3. Liquid構文を使用してメッセージにレスポンスフィールドを挿入します。
  4. 送信時に、OneSignalは各受信者に対してAPI呼び出しを行い、レスポンスを解析し、データをメッセージに注入します。

例:リワードポイントの表示

各顧客にリワードバランスを表示したいとします:
Hi {{ first_name }},

You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.

Keep shopping to earn more points!
SarahがこのメールをSarahが受け取ると、Liquid変数が彼女の実際のポイントバランスとメンバーシップステータスに置き換えられます。以下のセクションでは、この例を段階的に設定する方法を説明します。

Data Feedの作成と使用

1. Data Feed構成の設定

サイドバーのData > Data Feedsに移動して、既存のData Feedsのリストを表示し、新しいData Feedを作成します。 各Data Feedには次が必要です:
  • Name:フィードのリストで区別するための「Customer Rewards API」のような説明的な名前。一意の名前を推奨しますが、必須ではありません。
  • Alias:Liquid構文で使用するrewardsのような短い識別子(例:{{ data_feed.rewards.points }})。一意である必要があり、小文字の英数字のみで、スペースや特殊文字は使用できません。
  • Method:OneSignalがAPIに接続するために使用するHTTPメソッド。通常はGETですが、POSTもサポートされています。
  • URL:APIエンドポイント。OneSignalがユーザー固有のデータを取得できるようにLiquid構文をサポートしています。
例えば、リワードエンドポイントはURLパラメータとしてユーザーのexternal_id(OneSignalに保存)を受け取る場合があります:
https://acme.com/customers/user_id={{ external_id }}/rewards
  • Headers:APIに必要なキーと値のペア(例:認証トークン)。Liquid構文をサポートしています。
  • Body:オプションのJSONリクエストボディ。Journey Webhookと同様にLiquid構文をサポートしています。
例えば、APIがURLではなくリクエストボディでユーザーのIDを要求する場合があります:
{
	"customer_id": "{{ subscription.external_id }}"
}
完全なData Feed構成は次のようになります:
Data Feed configuration showing name, alias, method, URL, and headers
本番環境で使用する前にフィードをテストしてください。Data Feedのテストはテストサブスクリプションに対して実行されるため、それらのサブスクリプションにAPIから実際の結果を返す属性があることを確認してください。
最後に、新しいData FeedをActivateして、使用できるようにします。

2. Data Feedをメッセージテンプレートに添付

OneSignalが使用できるように、Data Feedをメッセージテンプレートに添付します。
  1. Messages > Templatesに移動します
  2. Messageセクションで、Personalizationボタンを選択します
Personalization button in the message template editor
  1. Data Feedsをトグルオンにして、フィードを選択します
Data Feeds toggle and feed selector in the message composer
  1. テンプレートを保存します

3. メッセージでデータを使用

Liquid構文を使用して、メッセージの任意の場所にレスポンスデータを挿入します。リワードの例を続けると、external_ida1-b2c3のSarahのAPIレスポンスは次のようになります:
{
	"external_id": "a1-b2c3",
	"points": 193,
	"status_level": "Gold"
}
ポイント数とステータスレベルを挿入するには、ドット記法を使用してData Feedのエイリアスとレスポンスフィールドを参照します:
You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.
これはOneSignalに次のように指示します:
  • Data Feedを使用
  • rewards Data Feedを使用
    • 復習:rewardsフィードは、受信者のexternal_idでAPIを呼び出すことを知っています
  • レスポンスから、points項目の値(193)とstatus_level項目(Gold)を挿入

要件と制限

APIは次を満たす必要があります:
  • ヘッダーに認証トークンを含むシングルステップ認証を受け入れる
  • 迅速に応答する。 250ms未満を推奨(これは送信速度に直接影響します)
  • JSONを返す。 現時点では他の形式はサポートされていません。
  • 送信ボリュームを処理する。 APIのレート制限が低い場合、メッセージ配信が遅くなります。
  • 妥当なサイズのペイロードを返す。 最高のパフォーマンスのために、レスポンスを50KB未満に保つことを推奨します。
現在の制限:
  • テンプレートごとに1つのData Feed。 必要なすべてのデータを1回のAPIレスポンスで取得してください。
  • Data Feedごと、メッセージごとに1つのAPI呼び出し。
  • Journeysのみ。 他の送信方法ではまだ利用できません。
  • 連鎖呼び出しなし。 1つのData Feedからのペイロードを使用して別のData Feedを呼び出すことはできません。
テンプレートごとに複数のData Feed、または他のチャネルのサポートが必要ですか?これらの機能の優先順位付けに役立てるために、ユースケースをお知らせください

APIの設定

Data Feedを作成する前に、APIが次の要件を処理できることを確認してください:

認証

APIはヘッダーを介した認証を受け入れる必要があります:
Authorization: Bearer YOUR_TOKEN
または
X-API-Key: YOUR_KEY

JSONリクエストボディ

リクエストにボディを含める必要がある場合、APIはJSONを受け入れる必要があります。これは、ヘッダーにContent-Type: application/jsonを含める必要があることを意味する場合があります。

JSONレスポンス

APIはJSONオブジェクトを返す必要があります。通常、これはヘッダーにAccept: application/jsonを含めることを意味します。

パーソナライゼーションパラメータ

通常、次のようにURLでユーザー識別子を渡します:
https://api.example.com/users/{{external_id}}/data
https://api.example.com/rewards?email={{email | url_encode}}
そして/またはボディで:
{
	"customer_id": "{{ external_id }}",
	"email": "{{ subscription.email }}"
}
このデータがOneSignalに存在することを確認してください(通常はタグとして、ただしカスタムイベントプロパティなどの他のオプションも利用可能です)。

レート制限

APIのレート制限を考慮してください。10,000人のユーザーに送信する場合、10,000回のAPI呼び出しを連続して行います。APIがこのボリュームを処理できることを確認してください。

エラーハンドリング

APIがエラーを返すか、ユーザーのデータがない場合、そのレシピエントにメッセージは送信されません。APIがすべての予想されるユーザーに対してデータを返すことを確認してください。

開始前のチェックリスト

Data Feedsを実装する前に、次の質問に答えてください:
  • メッセージに表示したいデータは何ですか?APIから取得する項目を特定したシンプルな概要から逆算して作業すると、考えを整理するのに役立ちます。
  • このデータは単一のAPIエンドポイントを介して利用可能ですか?
  • APIリクエストをどのように認証しますか?
  • パーソナライズされたデータを取得するために、どの識別子または他のデータ項目を使用しますか?
  • その識別子はすでにOneSignalに保存されていますか?そうでない場合、どのように入力されますか?
  • APIは生成するリクエストのボリュームを処理できますか?
  • APIがユーザーのデータを持っていない場合はどうなりますか?

例と高度なユースケース

Data Feedsは、Liquid構文と組み合わせて、または他の機能と組み合わせて創造的な方法で使用して、より複雑なパーソナライゼーションを生成できます。
ユーザーのカート内のアイテムの配列とカートの合計金額を返すData Feed cartがあるとします:
{
  "items": [
    {
      "name": "Blue Running Shoes",
      "price": 84.00,
      "image_url": "https://acme.com/blue-running-shoes.png"
    },
    {
      "name": "Protein Bar",
      "price": 5.99,
      "image_url": "https://acme.com/protein-bar.png"
    }
  ],
  "total": 89.99
}
カート内の各アイテムとカート合計を表示したい場合、Liquidでforループを使用できます:
<ul>
  {% for item in data_feed.cart.items %}
    <li>
      <strong>{{ item.name }}</strong><br>
      ${{ item.price }}<br>
      <img src="{{ item.image_url }}" alt="{{ item.name }}">
    </li>
  {% endfor %}
</ul>

<p>Cart total: ${{ data_feed.cart.total }}</p>

これにより次の結果が得られます:
- Blue Running Shoes
- $84.00
- <running shoes image>
- Protein Bar
- $5.99
- <protein bar image>
Cart total: $89.99
メールブロックエディターを使用している場合、特に画像やリンクを含める必要があるこの種の複雑なLiquid構文を挿入する際は、最良の結果を得るためにカスタムHTMLブロック要素を使用してください。
カスタムイベントを使用してこのカート放棄メールをトリガーする方法を確認したいですか?完全なワークフローについては、カスタムイベントプロパティタブをご覧ください。

よくある質問

Data Feedの値がメッセージに表示されません。何を確認すべきですか?

次の順序で確認してください:
  1. Data Feedがテンプレートに添付されていること(Personalization > Data Feedsの下)。
  2. Liquid構文がJSONレスポンス構造と正確に一致していること — {{ data_feed.<alias>.<field> }}
  3. APIエンドポイントが同じ識別子で手動呼び出した場合に有効なJSONを返すこと。
  4. 受信者がOneSignalに必要な識別子(例:external_id)が保存されていること。

メッセージの送信が遅いのはなぜですか?

Data Feed APIの呼び出しは、すべての受信者に対して送信時に実行されます。APIの応答が遅いか、同時リクエストを処理できない場合、メッセージ配信は比例して遅くなります。250ms未満の応答時間を目標とし、インフラストラクチャが送信ボリュームを処理できることを確認してください。

一部の受信者がメッセージを受信しないのはなぜですか?

受信者のData Feed API呼び出しが失敗した場合(404、タイムアウト、またはデータ不足による)、OneSignalはその受信者を完全にスキップします。Data Feed構成のエラーログと独自のAPIログで失敗を確認してください。それらのユーザーがOneSignalに必要な識別子があることを確認してください。

テンプレートで複数のData Feedを使用できますか?

現時点ではできません。各テンプレートは1つのData Feedをサポートします。1回のAPIレスポンスで必要なすべてのデータを取得してください。複数のフィードが必要な場合は、ユースケースをお知らせください

Data Feedsはプッシュ通知やSMSで利用できますか?

いいえ。Data FeedsはJourneyを通じて送信されるメールメッセージのみで利用可能です。追加チャネルのサポートが計画されています — 優先順位付けに役立てるためにユースケースをお知らせください

メッセージ送信時にAPIがダウンしている場合はどうなりますか?

OneSignalは、Data Feed呼び出しが失敗した受信者をスキップします。そのレシピエントにはメッセージが送信されず、フォールバック値も挿入されません。スケジュールされた送信中はAPIのアップタイムとエラーレートを監視してください。

関連ページ

Liquid構文

OneSignalメッセージにおけるLiquidテンプレートの完全なリファレンス。

Journeys

Data Feedメールをトリガーする自動メッセージングワークフローを構築します。

カスタムイベント

Journeysをトリガーし、Data Feed URLにイベントプロパティを渡します。

メッセージパーソナライゼーション

タグ、Liquid、ダイナミックコンテンツ、Data Feedsなど、すべてのパーソナライゼーション方法の概要。