アプリケーションの作成
salesforce.com ではアプリケーションの構築に PHP SDK を使用しますが、どの Fuel SDK も共通するパターンを採用しているため、サンプルコードを他の SDK にかなり簡単に適用できます。
PHP SDK をまだインストールしていない場合は、https://code.exacttarget.com/sdks からダウンロードして、PHP SDK をワークスペースの sdk というサブディレクトリにインストールします。SDK の README に記載されているとおりにすべての連動関係がインストールされいてることを確認します。
SDK を設定するには、OAuth 認証情報を config.php に追加する必要があります (SDK には、config.php の作成に使用できるテンプレートファイルが含まれています)。config.php はサーバ側でホストされ、クライアントには公開されないため、クライアント ID とクライアントの秘密を config.php に含めるのが安全です。
1return array(
2
3 'appsignature' => 'none',
4
5 'clientid' => 'YOUR_CLIENT_ID_FROM_APP_CENTER',
6
7 'clientsecret' => 'YOUR_CLIENT_SECRET_FROM_APP_CENTER',
8
9 'defaultwsdl' => 'https://webservice.exacttarget.com/etframework.wsdl'
10
11);Fuel SDK を初期化する
これで PHP SDK が設定されたので、ET_Client オブジェクトをインスタンス化して SDK を初期化します。
1require('sdk/ET_Client.php');
2
3
4
5$client = new ET_Client();ET_Client オブジェクトは、すべての Fuel SDK の中心オブジェクトであり、config.php で指定されたクライアント ID とクライアントの秘密を使用した OAuth アクセストークンの取得や更新など、さまざまなタスクを自動的に実行します。
プロファイル属性を作成する (登録者データモデルを定義する)
次に、登録者の名を保持するプロファイル属性を作成して、その登録者へのメールをパーソナライズできるようにします。SDK を使用してプロファイル属性を作成する方法を次に示します。
1$profileAttribute = new ET_ProfileAttribute();
2
3$profileAttribute->authStub = $client;
4
5
6
7$profileAttribute->props = array("Name" => "FirstName", "PropertyType" => "string", "Description" => "The subscriber's first name");
8
9
10
11$response = $profileAttribute->post();
12
13
14
15print_r($response);これは、Fuel SDK オブジェクトとの一般的なやりとりで、すべての Fuel SDK に共通するパターンを示しています。
- やりとりするオブジェクト (この場合は ET_ProfileAttribute) をインスタンス化します。
- オブジェクト ($profileAttribute->authStub = $client) の authStub プロパティを使用して、ExactTarget アカウントコンテキストを指定します。
- 操作を制御する適切なプロパティを設定します (この場合は FirstName というプロファイル属性を作成します。これは文字列であり、登録者の名が含まれます)。
- 取得、作成、更新、削除などの操作に応じて、REST に似た操作 (get、post、patch、delete) を実行します。このセクションのこの例では、プロファイル属性を作成するため、post を実行します。
次の例では、ブラウザでの PHP ファイルの読み込みの典型的な結果を示します。
1ET_Configure Object
2
3(
4
5 [status] => 1
6
7 [code] => 200
8
9 [message] =>
10
11 [results] => Array
12
13 (
14
15 [0] => stdClass Object
16
17 (
18
19 [StatusCode] => OK
20
21 [StatusMessage] => Success
22
23 [OrdinalID] => 0
24
25 [Object] => stdClass Object
26
27 (
28
29 [PartnerKey] =>
30
31 [ID] => 348977
32
33 [ObjectID] =>
34
35 [Name] => FirstName
36
37 [PropertyType] => string
38
39 [Description] => The subscriber's first name
40
41 )
42
43 )
44
45 )
46
47 [request_id] =>
48
49 [moreResults] =>
50
51)これは、PHP SDK メソッド呼び出しに対する典型的な応答です。ここでは、StatusCode と StatusMessage が示すように、コールが (願わくは) 成功したことだけに注目してください。
リストを作成する
次に、プロファイル属性の作成で使用したパターンと同じものを使用して、登録者を保持するリストを作成します。
1$list = new ET_List();
2
3$list->authStub = $client;
4
5
6
7$list->props = array("ListName" => "my subscribers");
8
9
10
11$response = $list->post();
12
13
14
15print_r($response);次の例では、ブラウザでの PHP ファイルの読み込みの典型的な結果を示します。
1ET_Post Object
2
3(
4
5 [status] => 1
6
7 [code] => 200
8
9 [message] =>
10
11 [results] => Array
12
13 (
14
15 [0] => stdClass Object
16
17 (
18
19 [StatusCode] => OK
20
21 [StatusMessage] => Created List.
22
23 [OrdinalID] => 0
24
25 [NewID] => 1992264
26
27 [Object] => stdClass Object
28
29 (
30
31 [PartnerKey] =>
32
33 [ID] => 1992264
34
35 [ObjectID] =>
36
37 [ListName] => my subscribers
38
39 )
40
41 )
42
43 )
44
45 [request_id] =>
46
47 [moreResults] =>
48
49)ここでは、NewID プロパティに注目してください。オブジェクトが ExactTarget Marketing Cloud で作成されると、一意の識別子がそのオブジェクトに割り当てられます。この一意の識別子は、応答オブジェクトの NewID プロパティで確認できます。このオブジェクトを後で参照するために、次のように変数にこの識別子の値を保存することができます。
1$listID = $response->results[0]->NewID;ここで、その値をメモします。次の API コールでこの値を使用します。
登録者をリストに追加する
リストを作成したら、登録者を作成し、先ほど作成したリストにその登録者を追加します。ID プロパティには、リストを作成した後にメモした NewID の値を使用します。FirstName プロパティには、メールアドレスを使用します。
1<?php
2
3require('sdk/ET_Client.php');
4
5
6
7$client = new ET_Client();
8
9
10
11$subscriber = new ET_Subscriber();
12
13$subscriber->authStub = $client;
14
15
16
17$subscriber->props = array("EmailAddress" => "YOUR_EMAIL_ADDRESS_GOES_HERE", "Lists" => array("ID" => "YOUR_LIST_ID_GOES_HERE"));
18
19
20
21// specify profile attributes
22
23$subscriber->props['Attributes'] = array(array('Name' => 'FirstName', 'Value' => 'YOUR_FIRST_NAME_GOES_HERE'));
24
25
26
27$response = $subscriber->post();アカウントで SubscriberKey が有効になっていると、props で SubscriberKey 属性を指定しない限り前述のコードサンプルは動作しません。SubscriberKey についての詳細は、http://help.exacttarget.com/en/documentation/exacttarget/subscribers/subscriber_key を参照してください。
メールを作成する
次に、リストに送信するメールを作成します。
1$email = new ET_Email();
2
3$email->authStub = $client;
4
5
6
7$emailBody = <<<EMAIL
8
9<html>
10
11<body>
12
13<p>%%FirstName%%,</p>
14
15
16
17<p>We're pretty sure you would love our products!</p>
18
19
20
21<small>
22
23 <p>This email was sent by:</p>
24
25
26
27 <p>
28
29 %%Member_Busname%%
30
31 <br />
32
33 %%Member_Addr%%
34
35 <br />
36
37 %%Member_City%%, %%Member_State%%, %%Member_PostalCode%%
38
39 <br />
40
41 %%Member_Country%%
42
43 </p>
44
45
46
47 <a href="%%profile_center_url%%">Profile Center</a>
48
49 <br /></small>
50
51
52
53<custom name="opencounter" type="tracking">
54
55</body>
56
57</html>
58
59EMAIL;
60
61
62
63$email->props = array("Name" => "my email", "CustomerKey" => "123", "Subject" => "Hi %%FirstName%%, we think you will like this", "HTMLBody" => $emailbody, "IsHTMLPaste" => true);
64
65
66
67$response = $email->post();
68
69
70
71print_r($response);この操作は、前の操作に比べてかなり複雑です。このコールを使用して、いくつかの重要な概念と機能を示します。
- CustomerKey というプロパティを ET_Email オブジェクトに追加しました。このプロパティは ExactTarget のすべてのオブジェクトに存在し、これを使用して独自の識別子をオブジェクトに追加できます。これにより、ExactTarget と既存のインフラストラクチャとの統合が簡単になります。
- メールを開く顧客は、重要なタッチポイントです。顧客が HTML メールをいつ開くかを ExactTarget で追跡するため、<custom name="opencounter" type="tracking"> タグをメール本文に追加しました。
- メール件名 (Subject プロパティ) とメール本文 (HTMLBody プロパティ) のどちらにも置換文字列が含まれ、置換文字列名の前後の %% で示されます。置換文字列には、プロファイル属性でユーザ定義されるものもあれば (FirstName など)、ExactTarget で自動的に解決されるものもあります。
- IsHTMLPaste というプロパティがあります。これを true に設定することで、Marketing Cloud UI のユーザは HTML エディタのみを使用してコンテンツを編集できるようになります。デフォルト設定、および IsHTMLPaste を false に設定する場合は、WYSIWYG エディタで編集を行いますが、編集するにはコンテンツでテンプレートフックを提供する必要があります。API のみのインテグレーションを行う場合、IsHTMLPaste の値を指定する必要はありません。
置換文字列を使用してメールをパーソナライズする
ユーザ定義の置換文字列を使用すると、各受信者へのメールをパーソナライズできます。メール件名が適切であれば受信者がメールを開く確率が高くなるため、好結果の顧客タッチポイントを作成するうえで、適切なメール件名にすることは非常に重要です。ExactTarget のメール件名は、置換文字列の使用 (「%%FirstName%%!さん、ご購入ありがとうございます」など) を含め、さまざまな方法でパーソナライズできます。
受信者がメールを開くと、メールの内容によって受信者が応対するか (商品を購入するなど)、否か (登録解除するなど) が決まります。ExactTarget には置換文字列に加え、AMPscript コンテンツスクリプト言語、HTTPGet コンテンツ取得、高度な動的コンテンツ機能など、コンテンツをより関連性のあるものにするためのさまざまな機能が備えられています。
ExactTarget で自動的に解決される置換文字列により、商業電子メールの送信を対象とする CAN-SPAM 法にコンテンツを確実に準拠させることができます。CAN-SPAM の準拠に役立てるため、ExactTarget では、すべてのメールに次のパーソナライズ文字列を含める必要があります。
1%%Member_Busname%%
2
3%%Member_Addr%%
4
5%%Member_City%%
6
7%%Member_State%%
8
9%%Member_PostalCode%%
10
11%%Member_Country%%これらの置換文字列には、CAN-SPAM で求められる送信組織の物理的住所の要素が含まれ、アカウント情報に基づいて ExactTarget で自動的に埋め込まれます。
また、ExactTarget では、メールの受信者が今後の受信を拒否するかどうかなどの登録設定を管理する、プロファイルセンターへのリンクをすべてのメールに含める必要があります。これらのプロファイルセンターは、ExactTarget で作成およびホストされます。CAN-SPAM には、次の置換文字列を含めるだけで準拠できます。
%%profile_center_url%%リストにメールを送信する
これで、リストの作成、リストへの登録者の追加、リストに送信するメールの作成が完了したので、最初のメールを送信する準備が整いました。
1$response = new ET_Post($myclient, 'Send', array("List"=> array("ID" => "YOUR_LIST_ID_GOES_HERE"), "Email" => array("CustomerKey" => "123")));
2
3
4
5print_r($response);YOUR_LIST_ID_GOES_HERE と記されている場所��、リストを作成した後に保存したリスト ID を指定します。
この例では少し異なる SDK パターンを使用しており、メールオブジェクトでメソッドをコールする代わりに、SDK メソッドを直接コールしています。
ページを再読み込みします。これまでどおり、NewID プロパティの値をメモしておいてください。これは開始した送信の一意の識別子であり、その送信に関する概要統計と未加工の個別統計の取得、送信状況の取得、送信の停止、再開、キャンセルに使用できます。この NewID の値は、送信に関連付けられた開封イベントのリストに戻るために、次のセクションで使用します。
追跡イベントデータを取得する
ExactTarget からイベントデータを取得して、顧客タッチポイントの成功をさまざまな方法で測定できます。ExactTarget では、送信ごとに各種イベントが収集されます。
送信に関連する配信イベントを使用すると、データ品質が適切であるかどうかを判断できます。このイベントには 2 種類あり、SentEvent はメールが表示および送信されたことを示し、BounceEvent はメールが同期または非同期で不達になった (配信されなかった) ことを示します。
送信に関連するエンゲージメントイベントを使用すると、顧客がメールの内容にどのように応対したかを把握することができます。このイベントには 3 種類あり、UnsubEvent はスパムに関する苦情、返信メール管理、またはプロファイルセンターによって受信者がリストから登録解除したことを示し、OpenEvent は受信者がメールを開いたことを示し (上記の追跡ピクセルを含む HTML メールで、受信者が画像のロードを許可した場合にのみ動作する)、ClickEvent は受信者がメール内のリンクをクリックしたことを示します (ExactTarget でリンクがラップされている場合にのみ動作する)。
次の例では、先ほど実行した送信のすべての SentEvent を取得し、それをブラウザウィンドウまたはコンソールに出力します。
1<?php
2
3require('sdk/ET_Client.php');
4
5
6
7$client = new ET_Client();
8
9$openEvent = new ET_OpenEvent();
10
11$openEvent->authStub = $client;
12
13
14
15$openEvent->props = array("SubscriberKey", "EventType", "EventDate");
16
17$openEvent->filter = array("Property" => "SendID", "SimpleOperator" => "equals", "Value" => array(YOUR_SEND_ID_GOES_HERE));
18
19
20
21$response = $openEvent->get();
22
23
24
25print_r($response);
26
27?>再度、YOUR_SEND_ID_GOES_HERE と記されている場所に、送信実行後に保存した送信 ID を指定します。
次の例では、ブラウザで変更した PHP ファイルの読み込みの典型的な結果を示します。
1ET_Get Object
2
3(
4
5 [status] => 1
6
7 [code] => 200
8
9 [message] =>
10
11 [results] => Array
12
13 (
14
15 [0] => stdClass Object
16
17 (
18
19 [PartnerKey] =>
20
21 [ObjectID] =>
22
23 [SubscriberKey] => jflathead@example.com
24
25 [EventDate] => 2013-11-09T19:01:33
26
27 [EventType] => Open
28
29 )
30
31
32
33 )
34
35
36
37 [request_id] => 6816994f-125b-4932-9003-bc669c1ea7cc
38
39 [moreResults] =>
40
41)この例は、登録者キー jflathead@example.com を持つ登録者が 2013 年 11 月 9 日、午後 7 時 1 分にメールを開封したことを示しています。後続のコールでは前回のコール以降の開封イベントのみが返されます。