V2 パートナーエクスペリエンス API
このドキュメントは、Rokt の API と対話して Rokt から エクスペリエンス コンテンツを取得するために必要な関連エンドポイントを概説しています。このエンドポイントは、オファー駆動のエクスペリエンスを直接パートナーに提供するよう設計されています。リクエストはこのエンドポイントに送信され、レスポンスは UX ヘルパーライブラリに渡されて適切に処理されます。
エンドポイント
環境 | アクション | URL |
---|---|---|
本番 | POST | https://server-api.rokt.com/v2/partner/experiences |
テスト | POST | https://server-api-demo.rokt.com/v2/partner/experiences |
テストのベストプラクティス
テストエンドポイント https://server-api-demo.rokt.com/v2/partner/experiences
は主にテスト用に設計されており、本番データやパフォーマンスに影響を与えることなく統合を検証するために使用すべきです。API ドキュメントで指定されている適切なヘッダーとリクエストフォーマットを使用して、本番に近いシナリオを効果的にエミュレートすることを確認してください。
リクエスト
認証ヘッダー
このエンドポイントとやり取りをするために必要な証明書は、アカウントマネージャーと協力して取得してください
Header-key | 必須 | 説明 | タイプ | ノート |
---|---|---|---|---|
rokt-pub-id | はい | 提供されたクライアントパブリックIDが含まれています | string | これはRoktによって提供されます。 |
rokt-secret | はい | 提供されたクライアントパブリックシークレットが含まれ、公開IDと一致する必要があります | string | これはRoktによって提供されます。 |
必須ヘッダー
Header-key | 必須 | 説明 | タイプ | 例 |
---|---|---|---|---|
content-type | はい | メディアタイプ | string | “application/json” |
accept | はい | 応答の期待されるメディアタイプ | string | “application/json” |
rokt-tag-id | はい | Rokt タグ ID | string | 1234567890 |
ボディ
プロパティ名 | 必須 | データタイプ | 説明 |
---|---|---|---|
sessionId | いいえ | string | 既存のRoktセッションのセッションID、存在する場合 |
pageIdentifier | はい | string | ビューを区別するために使用されるテキスト |
attributes | はい | Map<string, string> | オファー選択中に使用されるユーザー属性データを保持します |
integration | はい | Integration | リクエストを行うインテグレーションに関連するデータ。これはAndroid、iOS、およびウェブ用のUXHelperライブラリから取得できます |
統合
プロパティ名 | 必須 | データ型 | 説明 |
---|---|---|---|
name | はい | string | リクエストを行う統合の一般的な名前を示します |
version | はい | string | リクエストを行う統合のバージョン |
framework | はい | string | 使用されている統合フレームワーク (例: Flutter, React Native) |
platform | はい | string/enum | オファーを要求するパートナープラットフォーム (例: Web, Mobile, iOS) |
layoutSchemaVersion | はい | string | 統合に対応する最大のスキーマバージョン |
deviceLocale | はい | string | ユーザーのデバイスからのロケール設定 |
deviceModel | はい | string | iOSのデバイスモデルまたはAndroidのビルドモデル |
deviceType | はい | string | デバイスタイプ/フォームファクター (例: Phone, Tablet) |
operatingSystem | はい | string | ユーザーのデバイスのオペレーティングシステム |
operatingSystemVersion | はい | string | ユーザーのデバイスのOSバージョン |
packageName | はい | string | ホストアプリケーションのパッケージ名またはバンドル識別子 |
packageVersion | はい | string | ホストアプリケーションのパッケージバージョンまたはバンドルバージョン |
metadata | いいえ | Map<string, string> | 統合またはデバイスに関連する追加データ |
リクエスト例
JSON リクエストボディ/ペイロード
クリックして展開
{
"attributes": {
"email": "test@rokt.com",
"locale": "en-AU"
},
"pageIdentifier": "your_page_identifier",
"integration": {
"name": "UX Helper iOS",
"version": "1.0",
"framework": "Swift",
"platform": "iOS",
"layoutSchemaVersion": "2.1.0",
"packageVersion": "1.0.0",
"packageName": "com.partner",
"operatingSystem": "iOS",
"operatingSystemVersion": "18",
"deviceType": "Phone",
"deviceModel": "iPhone",
"metadata": {
"IsCharging": "true"
}
},
}
レスポンス
成功レスポンス (200)
ヘッダー
これらのヘッダーは他のEcommerce APIと一貫性を持たせるために返されますが、パートナーまたはUXライブラリがそれを利用することは期待されていません。
ヘッダーキー | 説明 |
---|---|
rokt-account-id | オファーが提供されたアカウントID |
rokt-session-id | 関連するRoktセッションID |
etag | ユーザーのためのRokt etag値 |
成功本文
ルート
プロパティ名 | タイプ | 説明 |
---|---|---|
PageContext | PageContext | 検出されたページに関連するデータ |
Plugins | Layout[] | プラグインオブジェクトとフォント |
SessionId | string | RoktセッションID。ウェブの場合、このセッションIDはヘッダーから取得されます |
Success | bool | リクエストが成功したか無効だったかを示す |
Token | string | セッションレベルのデータ整合性JWT |
Options | SdkOptions | 消費するRokt SDKに提供されるランタイム構成のコレクション |
SdkOptions
プロパティ名 | 型 | 説明 |
---|---|---|
UseDiagnosticEvents | bool | Rokt SDKが診断情報を出力するかどうかを示します |
PageContext
プロパティ名 | 型 | 説明 |
---|---|---|
IsPageDetected | bool | リクエストがパートナーページと一致したかどうかを示します |
PageId | string | 一致したOPページ構成を表すGUID |
PageInstanceGuid | string | 選択されたページの特定のインスタンスを表すGUID |
PageVariantName | string | 選択されたページバリアントの名前 |
PartnerContentTemplate | string | 支払いエクスペリエンスに使用されるテンプレート |
RoktTagId | string | パートナー/広告主のタグID |
Token | string | ページレベルのデータ完全性JWT |
LayoutPlugin
プロパティ名 | 型 | 説明 |
---|---|---|
Fonts | Font[] | SDKがオファーに利用するフォントの配列 |
Plugin | Plugin | プラグインの設定 |
プラグイン
プロパティ名 | 型 | 説明 |
---|---|---|
Config | PluginConfig | レイアウトをレンダリングするための設定を定義する |
Id | string | レイアウトID / トランザクションレイアウト外部ID |
Name | string | レンダリングに使用するプラグインの名前 |
TargetElementPosition | string | targetElementSelectorに基づく位置配置のアクション |
TargetElementRelation | string | 配置とtargetElementSelectorの関係 |
TargetElementSelector | string | ページ内でレイアウトを配置する識別された位置 |
TargetSection | string | 例えばThank Youページなど、異なるターゲットタイプを識別 |
Url | string | プラグインをダウンロードするためのURL |
プラグイン設定
プロパティ名 | 型 | 説明 |
---|---|---|
InstanceGuid | string | プラグイン/レイアウトの特定のインスタンスを表すGUID |
LayoutSchemaVersion | string | レイアウトに使用されるレイアウトスキーマのバージョン |
OuterLayoutSchema | string | 外部レイアウトのUIを定義するJSONスキーマ |
Slots | Slot [] | オファースロットのコレクション |
Token | string | プラグイン/レイアウトレベルのデータ整合性JWT |
スロット
プロパティ名 | 型 | 説明 |
---|---|---|
InstanceGuid | string | スロットの特定のインスタンスを表すGUID |
LayoutVariant | LayoutVariant | スロット/オファーに使用するレイアウトバリアントの定義 |
Offer | Offer | お客様に表示するために使用するオファーの定義 |
Token | string | プラグイン/レイアウトレベルのデータ整合性JWT |
レイアウトバリアント
プロパティ名 | タイプ | 説明 |
---|---|---|
LayoutVariantId | string | 自動生成されたID |
ModuleName | string | レイアウトモジュール名 |
FormatType | string | オファーを表示するためのフォーマットタイプ |
LayoutVariantSchema | string | バリアントを利用してオファーをレンダリングするUIを定義するJSONスキーマ |
オファー
プロパティ名 | タイプ | 説明 |
---|---|---|
AccountId | long | オファーに関連するRoktアカウントID |
CampaignId | string | OP内のリンクされたキャンペーンのID |
Creative | Creative | OPで定義されたオファーのクリエイティブ |
Metadata | string | オファーに関連するメタデータを含む |
クリエイティブ
プロパティ名 | 型 | 説明 |
---|---|---|
ReferralCreativeId | string | クリエイティブ構成に関連付けられたID |
InstanceGuid | string | クリエイティブの特定のインスタンスを表すGUID |
Copy | Map<string, string> | オファー内容に関連するテキストを含む |
ResponseOptionsMap | Map<string, ResponseOption> | CTAボタンの構成 |
Links | Map<string, Link> | レイアウトスキーマで参照されるオファー用リンク |
Images | Map<string, Image> | レイアウトスキーマで参照されるオファー用画像 |
Icons | Map<string, Icon> | レイアウトスキーマで参照されるオファー用アイコン |
Token | string | クリエイティブレベルのデータ整合性JWT |
フォント
プロパティ名 | データ型 | 説明 |
---|---|---|
FontFamily | string | フォントファミリーを指定します (例: Arial, Helvetica)。 |
FontStyle | string | フォントスタイルを指定します (例: normal, italic)。 |
FontWeight | string | フォントウェイトを指定します (例: normal, bold)。 |
Src | string[] | フォントファイルのソースURLまたはパスの配列です。 |
応答オプション
プロパティ名 | データ型 | 説明 |
---|---|---|
action | string | 応答のアクション |
responseOptionGuid | string | 応答オプションに一意に生成されるGUIDで、イベントコールの一部として送信されます |
signalType | string | 相互作用時にイベントを送信する際に使用するEventType。これほとんど常に SignalResponse です |
label | string | ボタン/リンクに表示されるラベル |
successText | string | 相互作用時に表示されるテキスト(パイロットには関連しません) |
isPositive | boolean | 応答が肯定的または否定的な関与であるかを示します |
url | string | アクションを実行するためのURL |
要求エラーレスポンス (HTTP 4xx)
ルート/ボディ
プロパティ名 | 型 | 説明 |
---|---|---|
title | string | 最上位の失敗理由 |
status | number | HTTPステータスコード |
success | boolean | リクエストが成功したかどうかを示します |
errors | Error[] | 発生した検証エラーのコレクション |
エラー
プロパティ名 | 型 | 説明 |
---|---|---|
code | string | 対応するエラーコード |
message | string | エラーを説明するメッセージ |
value | boolean | 無効な値があった場合、その提供された値 |
成功レスポンスボディ
成功レスポンス
クリックして展開
{
"sessionId": "b1fb003c-e904-4083-b7b9-03cde555a7a1",
"pageContext": {
"pageInstanceGuid": "b1fb003c-e905-4375-91bd-242e74b12277",
"pageId": "6b1214f0-43e1-447d-b0bb-cf493d361411",
"language": "en",
"isPageDetected": true,
"pageVariantName": "iOSVaraint1",
"token": "<JWT token placeholder>"
},
"plugins": [
{
"plugin": {
"id": "3353172846080032866",
"name": "dcui",
"url": "https://wsdk.rokt.com/plugins/dcui/index.html",
"targetElementSelector": "#target_element",
"targetElementPosition": "append",
"targetElementRelation": "child",
"targetSection": "None",
"config": {
"slots": [
{
"instanceGuid": "8f492d28-83fb-4813-877e-26e752ea9474",
"offer": {
"campaignId": "2749386944931233793",
"accountId": "106",
"maxTotalItemsQtyInOffer": 1,
"creative": {
"referralCreativeId": "2760914349384466797",
"instanceGuid": "c9f37d78-731d-4a0e-b8bc-712bd8c46cc1",
"responseOptionsMap": {
"positive": {
"id": "2760914349384466794",
"action": "Url",
"instanceGuid": "1d47ded1-b483-44e6-abf8-1d1d5faa82bc",
"signalType": "SignalResponse",
"shortLabel": "Yes",
"longLabel": "Yes",
"shortSuccessLabel": "Email Sent",
"isPositive": true,
"url": "http://example.com",
"ignoreBranch": false,
"urlBehavior": "newTab",
"token": "<JWT token placeholder>"
},
"negative": {
"id": "2760914349384466796",
"action": "CaptureOnly",
"instanceGuid": "24de5c75-ff04-41c5-b3f7-7d2ee129ecc6",
"signalType": "SignalResponse",
"shortLabel": "いいえ、結構です",
"longLabel": "いいえ、結構です",
"isPositive": false,
"ignoreBranch": false,
"urlBehavior": "newTab",
"token": "<JWT token placeholder>"
}
},
"links": {
"termsAndConditions": {
"url": "https://server-api.rokt.com/LegalTerms/TermsAndConditions/2760914349384466797",
"title": "利用規約"
}
},
"images": {},
"icons": {},
"token": "<JWT token placeholder>",
"advertiser": {
"name": "000. ウィジェットテスト用",
"brand": "000. ウィジェットテスト用"
},
"copy": {
"creative.copy": "Nicholas Grasevski 2",
"creative.termsAndConditions.message": "T&Csについては [rokt.com](https://www.rokt.com)をご覧ください",
"creative.termsAndConditions.close.copy": "閉じる",
"creative.termsAndConditions.title": "利用規約",
"creative.tag": "B2Bサービス",
"creative.success.title": "成功",
"creative.success.copy": "確認メールをtest1593754986316@rokt.comに送信しました。",
}
},
"metadata": {}
},
"layoutVariant": {
"layoutVariantId": "3353172846080032865",
"moduleName": "standard-marketing",
"formatType": "Text",
"layoutVariantSchema":"<JSON encoded schema>"
},
"token": "<JWT token placeholder>"
},
],
"instanceGuid": "ce5158a9-dc59-4a97-9006-a299901e4587",
"outerLayoutSchema": "<JSON encoded schema>",
"layoutSchemaVersion": "2.0",
"token": "<JWT token placeholder>"
}
},
"fonts": []
}
],
"options": {
"useDiagnosticEvents": true
},
"success": true
}
例## 空の成功応答
特定のユーザーに対して関連するオファーがないという稀なケースがあります。この発生確率は、リクエスト作成時により多くの属性データを提供することで減少させることができます。この場合、Roktは体験のないペイロードを返します:
{
"sessionId": "b2170028-cf39-4d23-849d-f1c38be50000",
"pageContext": {
"pageInstanceGuid": "b2170028-cf39-4ff4-8e7d-d88eb9e441e6",
"isPageDetected": true,
"token": "<JWT token placeholder>"
},
"plugins": [],
"options": {
"useDiagnosticEvents": false
},
"token": "<JWT token placeholder>",
"success": true,
}
例: リクエスト検証エラー
HTTP 応答コード: 422
クリックして展開
{
"title": "検証に失敗しました",
"status": 422,
"success": false,
"errors": [
{
"code": "IntegrationNameNotProvided",
"message": "Integration.Name は必須です"
},
{
"code": "IntegrationVersionNotProvided",
"message": "Integration.Version は必須です"
},
{
"code": "IntegrationFrameworkNotProvided",
"message": "Integration.Framework は必須です"
},
{
"code": "IntegrationPlatformInvalid",
"message": "Integration.Platform が無効です"
},
{
"code": "IntegrationLayoutSchemaVersionNotProvided",
"message": "Integration.LayoutSchemaVersion は必須です"
},
{
"code": "IntegrationDeviceLocaleNotProvided",
"message": "Integration.DeviceLocale は必須です"
},
{
"code": "IntegrationDeviceModelNotProvided",
"message": "Integration.DeviceModel は必須です"
},
{
"code": "IntegrationDeviceTypeNotProvided",
"message": "Integration.DeviceType は必須です"
},
{
"code": "IntegrationOperatingSystemNotProvided",
"message": "Integration.OperatingSystem は必須です"
},
{
"code": "IntegrationOperatingSystemVersionNotProvided",
"message": "Integration.OperatingSystemVersion は必須です"
},
{
"code": "IntegrationPackageNameNotProvided",
"message": "Integration.PackageName は必須です"
},
{
"code": "IntegrationPackageVersionNotProvided",
"message": "Integration.PackageVersion は必須です"
},
{
"code": "PageIdentifierNotProvided",
"message": "PageIdentifier は必須です"
},
{
"code": "PartnerIdNotProvided",
"message": "rokt-tag-id が欠落している/間違っています"
}
]
}
HTTP レスポンスコード: 400
{
"title": "BadRequest",
"status": 400,
"success": false,
"errors": [
{
"code": "InvalidRequestPayload",
"message": "リクエスト本文のフォーマットが無効です"
}
]
}
内部サーバーエラー (HTTP 5xx)
まれにシステムが予期せずリクエストを完了できないことがあります。その場合、本文のないリクエストと、標準のHTTPレスポンスコードに準拠した適切なステータスコードを返します。 このレスポンスが発生した場合は、短い遅延(1〜2秒)を置いてリクエストを再試行することをお勧めします。問題が継続するか、頻繁に発生する場合は、問題の特定と修正をサポート担当に問い合わせてください。
キャッシングオファー
Roktのオファーをタイムリーにレンダリングすることで、ユーザーエンゲージメントとコンバージョンからの収益機会を最大限に活用することができます。ただし、サーバー間の統合はRoktのバックエンドサーバーとあなたのサーバー間で追加のネットワークコールが発生し、オファーをレンダリングするために必要なデータの取得を遅らせます。
パフォーマンスを支援するために、オファーがレンダリングされる前に、ユーザーのトランザクション旅の早い段階でRoktの/v2/partner/experiences
APIエンドポイントからオファーコンテンツを取得することをお勧めします。不要なネットワークコールを避けるために、トランザクション完了に対してユーザーが大きな関心を示した後にオファーコンテンツの取得を開始するのがベストプラクティスです。
一度取得したデータはキャッシュに保存することができます。これにより、同じトランザクション内での後のクライアントによる高速な取得が可能になります。
トランザクションIDやユーザーID、ユーザーのデバイス種類などの一意で理想的にはコンテキストに即した情報の組み合わせに対してキャッシュすることをお勧めします。ユーザーコンテキストが変化する(例:AndroidデバイスからiOSデバイスへ)シナリオでは、クライアントは更新された顧客属性を使用して/v2/partner/experiences
エンドポイントから新しい体験を取得する必要があります。これにより、レンダリングされたオファーが顧客の現在のコンテキストに関連したものとして保たれます。