オンデバイスのイベントトランスフォーメーションを使用して、Tealium Prism SDK のディスパッチを変更、拡充、またはフィルタリングします。
トランスフォーメーションを使用すると、ディスパッチャーに送信される前にディスパッチを変更、拡充、またはフィルタリングできます。特定の条件とスコープに基づいてデータを変換するカスタムビジネスロジックを実装するには、トランスフォーメーションを使用します。
仕組み
トランスフォーメーションは、ディスパッチパイプライン内の定義された時点で実行され、イベントがディスパッチャーに到達する前に、そのイベントを変更、拡充、または破棄できます。
トランスフォーメーションのスコープによって、実行されるタイミングが決まります。
- コレクターの後:データ収集後、ディスパッチャーがイベントを受信する前に実行されます。すべてのディスパッチャーに適用するデータ拡充に使用します。
- すべてのディスパッチャー:各ディスパッチャーに対して実行されます。
- 特定のディスパッチャー:指定されたディスパッチャーに対してのみ実行されます。送信先固有のフィルタリングやデータマスキングに使用します。
各トランスフォーメーションには条件を含めることができ、特定のデータがディスパッチペイロードに存在する場合にのみ適用されます。
一般的なトランスフォーメーションパターン
データ拡充
既存の値に基づいて、ディスパッチに追加データを加えます。たとえば、購入金額に基づいてユーザーセグメントを追加します。
データフィルタリング
機密データや不要なデータがディスパッチャーに到達する前に、ディスパッチから削除します。ペイロードから取り除く機密キーのリストを構成します。
条件付きディスパッチ破棄
特定の条件に基づいてディスパッチを破棄します。ディスパッチ全体を破棄するには、applyTransformation メソッドから nil(Swift)または null(Kotlin)を返します。たとえば、本番環境でテストイベントを破棄します。
スコープ固有のトランスフォーメーション
パイプラインのステージごとに異なるトランスフォーメーションを適用します。すべてのディスパッチャーに適用するデータ拡充には afterCollectors を使用し、単一の送信先に固有のフィルタリングには dispatchers を使用します。
UI でトランスフォーメーションを構成する
トランスフォーメーションは、モバイルプロファイル内で拡張機能として構成します。タグ管理の拡張機能と同様に動作しますが、モバイル固有のスコープが含まれています。
UI で拡張機能を追加するには、次の手順を実行します。
- モバイルプロファイルにログインし、拡張機能に移動します。
- 拡張機能を追加を選択し、拡張機能のタイプを選択します。
- 拡張機能を構成し、そのスコープを指定します。
- 変更内容を保存してパブリッシュします。
UI では、次のモバイル固有のスコープを使用できます。
| スコープ | 説明 |
|---|---|
| コレクターの後 | データ収集後、いずれかのディスパッチャーに到達する前に適用されます。 |
| すべてのディスパッチャー | すべてのディスパッチャーに適用されます。 |
高度な構成
実行時にのみ判明する値にロジックが依存する場合や、リモート構成に関係なくトランスフォーメーションが確実に実行されるようにする必要がある場合は、プログラムでトランスフォーメーションを構成します。たとえば、ユーザーの同意状態に基づいて、特定のディスパッチャーをスコープとする PII 除去トランスフォーマーを動的に登録できます。また、プラットフォームにパブリッシュする前に動作をテストするため、開発中にデータ拡充トランスフォーメーションを固定することもできます。
プログラムによる構成
React Native では、プログラムによるトランスフォーメーションの構成は使用できません。Tealium モバイルプロファイルでトランスフォーメーションを構成してください。
参照用のスコープ定数:
TransformationScope.AfterCollectors
TransformationScope.AllDispatchers
TransformationScope.Dispatchers("my_dispatcher")
TransformationScope.afterCollectors
TransformationScope.allDispatchers
TransformationScope.dispatchers(["my_dispatcher"])
例:コードでトランスフォーメーションを構成します。
class DataEnrichmentSettingsBuilder(transformationId: String) :
TransformationSettingsBuilder<DataEnrichmentSettingsBuilder>(
transformationId,
"DataEnrichmentTransformer"
) {
override fun onBuildConfiguration(): DataObject = DataObject.create {
put("enable_enrichment", true)
put("enrichment_type", "user_data")
}
}
val enrichmentTransformation = DataEnrichmentSettingsBuilder("user_enrichment")
.setScope(TransformationScope.AfterCollectors)
.setCondition(Rule.just(Condition.isDefined("user_id")))
config.addTransformation(enrichmentTransformation)
class DataEnrichmentSettingsBuilder: TransformationSettingsBuilder {
init(id: String) {
super.init(id: id, transformerId: "DataEnrichmentTransformer")
}
override func build() -> DataObject {
var settings = super.build()
let configuration: DataObject = [
"enable_enrichment": true,
"enrichment_type": "user_data",
"source": "user_profile"
]
settings.set(converting: configuration, key: "configuration")
return settings
}
}
let enrichmentTransformation = DataEnrichmentSettingsBuilder(id: "user_enrichment")
.setScope(.afterCollectors)
.setConditions(.just(Condition.isDefined(variable: "user_id")))
config.setTransformation(enrichmentTransformation)
JSON 構成
リモート構成またはローカル構成用に、トランスフォーメーションを JSON 形式で定義することもできます。
{
"transformation_id": "user_enrichment",
"transformer_id": "MyCustomTransformer",
"scope": "aftercollectors",
"configuration": {
"enable_enrichment": true,
"enrichment_type": "user_data",
"source": "user_profile"
},
"conditions": {
"operator": "defined",
"variable": {"key": "user_id"}
}
}
カスタムトランスフォーマーを作成する
カスタムトランスフォーマーを作成するには、Transformer プロトコルを実装します。
class MyCustomTransformer : Transformer {
override val id: String = "MyCustomTransformer"
override val version: String = "1.0.0"
override fun applyTransformation(
transformation: TransformationSettings,
dispatch: Dispatch,
scope: DispatchScope,
completion: Callback<Dispatch?>
): Disposable {
val enableEnrichment: Boolean =
transformation.configuration.getBoolean("enable_enrichment") ?: true
if (enableEnrichment) {
dispatch.addAll(DataObject.create { put("transformed", "true") })
}
// Return the modified dispatch
completion.onComplete(dispatch)
// Or return null to drop the dispatch entirely
// completion.onComplete(null)
return Disposables.disposed()
}
}
class MyCustomTransformer: Transformer {
static let moduleType = "MyCustomTransformer"
var id: String { Self.moduleType }
let version: String = "1.0.0"
func applyTransformation(_ transformation: TransformationSettings,
to dispatch: Dispatch,
scope: DispatchScope,
completion: @escaping (Dispatch?) -> Void) -> any Disposable {
let enableEnrichment: Bool =
transformation.configuration.get(key: "enable_enrichment") ?? true
var modifiedDispatch = dispatch
if enableEnrichment {
modifiedDispatch.enrich(data: ["transformed": "true"])
}
// Return the modified dispatch
completion(modifiedDispatch)
// Or return nil to drop the dispatch entirely
// completion(nil)
return Disposables.disposed()
}
}
最終更新日 :: 2026年November月3日