Treasure DataのProfiles APIトークンをMarketoのWeb Personalization機能と統合して、すべての顧客データを活用することで、顧客に完全にパーソナライズされた体験を提供できます。
- 前提条件
- Profiles APIトークンの作成
- 新しいトークンに名前を付ける
- トークンの設定
- トークンへのセグメント追加
- TD Profiles APIとMarketoの統合
- Profiles APIトークンで使用するMarketoの設定
- Marketo RTPタグとTreasure Dataタグの追加
- 例
JavaScriptとHTMLの基本知識
Treasure Dataの基本知識
Treasure Data JavaScript SDKの基本知識
Treasure Data Profiles APIの基本知識
MarketoのアドオンWeb Personalization機能へのアクセス。
- TD Consoleを開きます。
- Audience Studioに移動してセグメントを選択します。
- フォルダーを選択します。
- 新規作成を選択します。
- Profile APIトークンを選択します。

- トークンの名前を入力し、オプションで説明を入力します。次へを選択します。
名前と説明は、トークンに名前を付けたときのものが引き継がれます。変更することもできます。
- ルックアップキーを入力します。
ルックアップキーは、ペアレントセグメント内の一意の値を持つカラムです。このキーは正しいプロファイルを識別します。

注: ルックアップキーの更新は、トークンワークフローが完了すると有効になります。
td_global_idをルックアップキーとして使用する場合、Profiles APIはAPIリクエストのクエリパラメータではなく、ブラウザのCookieからルックアップ値を取得します。ブラウザ外でのテストまたは検証の目的(例: Postman)では、異なるカラムを使用してルックアップ値を手動で渡してください。
- (オプション)最大5つの属性を入力します。
プロファイル属性は、クエリ時にプロファイルトークンから返すことができます。

- 以下のいずれかを選択します:
- 次へを選択して続行し、セグメントを追加します。
- 作成を選択してトークンを設定します。(後でセグメントを追加することもできます。)

- 以下のいずれかを選択します:
- トークンの設定後、次へを選択します。
- Audience Studio > フォルダー > Profiles APIトークンに移動します。

- Profiles APIトークンにセグメントを追加します。
- 保存を選択します。

Profiles APIトークンとMarketoを統合するには、以下のセクションの手順を完了してください:
TD profile APIで使用するMarketoの設定
JavaScript DFPとTreasure Dataタグの作成
- Marketoを開きます。
- Marketoアイコンを選択します。
- Web Personalizationを選択します。

- Segmentsを選択します。

- Create Newを選択します。

- Treasure Dataで作成したセグメント番号を指定します。

- Saveを選択します。
- Campaignに移動します。例: Marketoロゴ > Campaign。
- Create New Web Campaignを選択します。

- Treasure Dataで作成したセグメント名を選択します。
- コンテンツを設定します。例: Dialog、In Zone、Widget。

- MarketのWeb Personalization JavaScriptタグをページに読み込みます。以下の例を参照し、Marketoドキュメント: Web Personalizationを参照してください。
- Profiles APIトークンへの呼び出しを追加します。
- MarketoのRTPタグのUser Context機能を使用して、レスポンスをMarketoに送信します。
- 以下の例を参照し、Marketoドキュメント: User Contextを参照してください。
- コードをテストします。例:

MarketのWeb Personalization JavaScriptタグをページに読み込むためのコード例:
<!-- Marketo RTP tag -->
(function(c,h,a,f,e,i){c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
c[a].p=e;c[a].a=i;var g=h.createElement("script");g.async=true;g.type="text/javascript";
g.src=f;var b=h.getElementsByTagName("script")[0];b.parentNode.insertBefore(g,b)})
(window,document,"rtp","[rtp-js-cdn-url]","[pod-url]","[accountId]");
rtp('setAccount', 'YOUR_MARKETO_ACCOUNT_ID');Profiles APIトークンとMarketo Web Personalizationを統合するためのコード例
<script type="text/javascript">
<!-- Marketo RTP -->
(function(c,h,a,f,e,i){c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
c[a].p=e;c[a].a=i;var g=h.createElement("script");g.async=true;g.type="text/javascript";
g.src=f;var b=h.getElementsByTagName("script")[0];b.parentNode.insertBefore(g,b)})
(window,document,"rtp","[rtp-js-cdn-url]","[pod-url]","[accountId]");
rtp('setAccount', 'YOUR_MARKETO_ACCOUNT_ID');
<!-- Treasure Data -->
!function(t,e){if(void 0===e[t]){e[t]=function(){e[t].clients.push(this),this._init=[Array.prototype.slice.call(arguments)]},e[t].clients=[];for(var r=function(t){return function(){return this["_"+t]=this["_"+t]||[],this["_"+t].push(Array.prototype.slice.call(arguments)),this}},s=["addRecord","blockEvents","fetchServerCookie","fetchGlobalID","fetchUserSegments","resetUUID","ready","setSignedMode","setAnonymousMode","set","trackEvent","trackPageview","trackClicks","unblockEvents"],n=0;n<s.length;n++){var c=s[n];e[t].prototype[c]=r(c)}var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=("https:"===document.location.protocol?"https:":"http:")+"//cdn.treasuredata.com/sdk/2.14/td.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)}}("Treasure",this);
// Configure an instance for your database
var td = new Treasure({
host: 'in.treasuredata.com',
writeKey: '[YOUR_WRITE_KEY]',
database: '[YOUR_DB_NAME]'
});
// Enable cross-domain tracking
td.set('$global', 'td_global_id', 'td_global_id');
// Get segment number from TD and send it to Marketo's RTP
var successCallback = function(values) {
var segIdAll = [];
for (var i = 0; i < values.length; i++) {
segIdAll = segIdAll.concat(values[i].values);
};
var segId = segIdAll.filter(function (x,i,self) {
return self.indexOf(x) === i;
});
// http://developers.marketo.com/javascript-api/web-personalization/user-context/
rtp('set', 'customVar1', segId.join(";"));
};
var errorCallback = function(err) {
console.log(err);
};
var trackPageviewSuccessCallback = function(){
td.fetchUserSegments({
audienceToken: ['YOUR_PROFILES_API_TOKEN_1', 'YOUR_PROFILES_API_TOKEN_2'],
keys: {
key_column_1: 'someValue',
key_column_2: 'someOtherValue',
}
}, successCallback, errorCallback)
};
td.trackPageview([YOUR_TABLE_NAME], trackPageviewSuccessCallback);
</script>