Documentation Index Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
Use this file to discover all available pages before exploring further.
Data Feedsを使用すると、送信時にAPIから直接リアルタイムデータをメッセージに取り込む ことができます。これにより、OneSignalにデータを事前にロードすることなく、高度にパーソナライズされたコンテンツを配信できます。
次のような頻繁に変更されるデータに対してData Feedsを使用します:
ユーザーの現在のリワードバランス
最新の注文ステータス
パーソナライズされた製品の推奨
他のパーソナライゼーション方法(タグ やダイナミックコンテンツ など)は静的データに最適ですが、Data Feedsはライブで頻繁に変化する値に最適です 。
Data Feedsの仕組み
Data Feedを作成 – OneSignalがAPIに接続する方法を構成します。
Data Feedをメッセージテンプレートに添付 します。
Liquid構文 を使用してメッセージにレスポンスフィールドを挿入 します。
送信時 に、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のテストはテストサブスクリプション に対して実行されるため、それらのサブスクリプションにAPIから実際の結果を返す属性があることを確認してください。
最後に、新しいData FeedをActivate して、使用できるようにします。
2. Data Feedをメッセージテンプレートに添付
OneSignalが使用できるように、Data Feedをメッセージテンプレートに添付します。
Messages > Templates に移動します
Messageセクションで、Personalization ボタンを選択します
Data Feeds をトグルオンにして、フィードを選択します
テンプレートを保存します
3. メッセージでデータを使用
Liquid構文を使用して、メッセージの任意の場所にレスポンスデータを挿入します。リワードの例を続けると、external_idがa1-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
または
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ブロック要素を使用してください。
カスタムイベントを使用してこのカート放棄メールをトリガーする方法を確認したいですか?完全なワークフローについては、カスタムイベントプロパティ タブをご覧ください。
前のカート放棄の例を続けて、最初にその特定のカートをどのように取得するかをどのように知ることができますか? 1つの方法は、プロパティにcart_idを含むcart_abandoned カスタムイベント によってトリガーされるJourneyを作成することです。この例では、そのイベントがAPI経由でOneSignalに送信されています: curl --request POST \
--url https://api.onesignal.com/apps/{app_id}/custom_events \
--header 'Accept: application/json' \
--data '{
"events": [
{
"name": "cart_abandoned",
"external_id": "user_12345",
"properties": {
"cart_id": 98765
}
}
]
}'
ユーザーuser_12345は、このイベントが発火されたときにJourneyに入り、その後メールを送信するノードに到達します。そのメールテンプレートは、URLが次のように特定のカートの内容を取得するように設定されたcart Data Feedで設定されています: https://acme.com/carts/ {{ journey . event . cart_abandoned . data . cart_id }}
したがって、この特定のイベントが取り込まれてJourneyをトリガーすると:
cart_idの値98765がJourneyに保存されます
メールステップに到達すると、cart Data Feedはそのcart_id値を参照し、それを使用してカートAPIを呼び出します
返されたJSONプロパティが解析され、前の例と同様にメールに挿入されます
注文ステータスに基づいてData Feedコンテンツを条件付きで表示する方法を確認したいですか?詳細については、条件付き表示:注文ステータス タブをご覧ください。
顧客の注文のステータスを含めたいが、注文が発送された場合にのみ追跡番号リンクを含めたいとします。ifステートメントを使用してこれを実現できます: Your order is {{ data_feed . order . status }} !
{% if data_feed . order . tracking_number != empty %}
Track it here: {{ data_feed . order . tracking_url }}
{% endif %}
ここでは、tracking_numberが存在する場合にのみ追跡リンクが表示されます。 Data Feedsを使用して、受信者ごとにパーソナライズする必要なく、メッセージに最新の情報を自動的に挿入できます。 例えば、メールの上部にバナー画像を挿入し、休日や他の月次イベントに合わせて毎月変更しているとします。毎月新しい画像をOneSignalにアップロードし、すべてのテンプレートを変更することを覚えておくのではなく、CMSまたは他のアセット管理場所から現在のバナー画像URLを取得するData Feedを設定することができます。 次のようにURLに変数なし でエンドポイントを指すbanner Data Feedを設定します: https://acme.com/assets/email-banner
これは現在のバナーURLを含むレスポンスを返します: {
"banner_url" : "https://acme.com/assets/email-banner/2025july.png"
}
メールテンプレートを設定して、{{ data_feed.banner.banner_url }}を画像ソースURLとして使用し、今後このプロセスを自動化します。 この例では、各受信者に対してAPIから一意の値を取得するData Feedを使用して、メールでパーソナライズされた一回限りのクーポンコードを送信する方法について説明します。 次のようなメールを送信します:
Hi George,
Complete your booking in the next 2 hours and save 10% with your personal code: XYZ123ABC
各ユーザーは、メール送信時に外部APIコール経由でライブ生成された一意のクーポンコードを受け取ります。コードは指定された時間ウィンドウで有効であり、そのユーザーにスコープされています。 前提条件
OneSignalでメールチャネルが設定済み (アプリにメール機能が有効化されている)
ユーザー識別子(例:external_id )とキャンペーン識別子を受け取り、クーポンコード、割引、有効期限を含むJSONを返す外部API
APIがクーポンを生成するために使用できる各ユーザーの一意の識別子(external_idなど)
OneSignal Journeyを通じてメールを送信するために使用するセグメント またはトリガー(例:「過去24時間以内の検索放棄」)
ステップ1:Data Feedを作成する
Data Feedsに移動
OneSignalアプリで、ナビゲーションバーからData feeds を選択し、New data feed をクリックします。
Data Feedを設定
次のフィールドを設定します:
Data Feed Name : coupon_code_generator
Alias : coupon
Method : GET
URL : https://api.example.com/generate-coupon?userId={{ external_id }}&campaign=AbandonedBooking10
Headers :
{
"Authorization" : "Bearer YOUR_API_TOKEN"
}
APIレスポンスを参照
APIが次のようなJSONを返す場合: {
"code" : "AB10-5F3K-HT9L" ,
"discount_percent" : "10%" ,
"expires_in_hours" : 2
}
メールテンプレートでその値を次のように参照できます:
{{ data_feed.coupon.code }}
{{ data_feed.coupon.discount_percent }}
{{ data_feed.coupon.expires_in_hours }}
Data Feedをテストして有効化
Send Test をクリックして設定を確認し、Activate をクリックしてData Feedをテンプレートで使用できるようにします。
ステップ2:メールテンプレートを作成する
OneSignalで、Messages → Email → New Template に移動します
メッセージ本文内でData Feedのエイリアスとフィールドを使用します。例:
< h2 > Hi {{ first_name }}, </ h2 >
< p >
Complete your booking in the next {{ data_feed.coupon.expires_in_hours }} hours and save
{{ data_feed.coupon.discount_percent }} with your personal code:
< strong > {{ data_feed.coupon.code }} </ strong >
</ p >
< p >< a href = "https://example.com/checkout?coupon={{ data_feed.coupon.code }}" > Use Code Now → </ a ></ p >
Liquid構文は{{ data_feed.<alias>.<field> }}の形式で使用します
Data Feedがテンプレートに添付されていることを確認してください
カスタムLiquidロジックを含むドラッグアンドドロップエディターを使用する場合は、HTMLブロックを使用してください
ステップ3:Data Feedを添付してメールをトリガーする
テンプレートコンポーザーで、Personalization の下にあるData Feeds をトグルオンにして、フィード(coupon_code_generator)を選択します
これにより、OneSignalが各受信者に対して送信時にAPI呼び出しを行い、データを入力して、メールに注入します
メッセージを自動化するJourneyを設定します:
エントリ条件 :「過去24時間以内の検索放棄」などのセグメント
Wait until :booking_completedカスタムイベントを作成します。このイベントが発火した場合にJourneyを終了するか、1時間後に続行するように待機を設定します。予約を完了した場合はメールを受け取らずに終了し、そうでない場合はクーポンを受け取るために続行します。
メール送信 :パーソナライズされたクーポンメールテンプレートを使用します
Journeyがメールチャネルを使用し、受信者がメールをサブスクライブしていることを確認してください
ステップ4:クーポンの引き換えと追跡を管理する バックエンドは次のことを行う必要があります:
userId、code、campaign、expiration_time、およびredeemedフラグとともに生成された各コードを記録します
チェックアウト時にコードを検証して引き換え済みとしてマークします
ROI分析のために引き換えデータ(ユーザー、キャンペーン、時間)を記録します
完全なワークフロー例 ステップ イベント アクション 1 ユーザーが「検索放棄」セグメントをトリガー ユーザーがセグメント経由でJourneyに入る 2 Journeyがメール送信をトリガー OneSignalがData Feedを添付し、ユーザーのexternal_idとキャンペーン名でAPIを呼び出す 3 APIがJSONを返す OneSignalがData Feedクーポンフィールドを入力してメールを送信する 4 ユーザーがメールを受け取る 例:「Hi George! Save 10% with your personal code: AB10-5F3K-HT9L」 5 ユーザーがコードを引き換える バックエンドが引き換えを検証して記録する
テスト
既知のexternal_idを持つユーザーでテストします
APIを手動で呼び出して、正しいJSONレスポンスを確認します
OneSignalテンプレートエディターのPreview を使用して、Data Feedクーポンフィールドが入力されることを確認します
レイテンシとエラーについてAPIログを確認します
Data Feed呼び出しが失敗した場合、OneSignalはそのレシピエントへのメッセージ送信をスキップします
よくある質問
Data Feedの値がメッセージに表示されません。何を確認すべきですか?
次の順序で確認してください:
Data Feedがテンプレートに添付 されていること(Personalization > Data Feeds の下)。
Liquid構文がJSONレスポンス構造と正確に一致していること — {{ data_feed.<alias>.<field> }}。
APIエンドポイントが同じ識別子で手動呼び出した場合に有効なJSONを返すこと。
受信者が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など、すべてのパーソナライゼーション方法の概要。