前回はEmailSendDefinitionを使ってメールを送信したので、今回はTriggered Emailを使ってメールを送信したいと思います。EmailSendDefinitionの方法はあるユーザ(=Subscriber)の集団に対して一括でメールを送信するユースケースに利用するのに対し、Triggered EmailはSubscriberの任意のアクションに対して、メールを送信するようなユースケースで利用することになります。具体的には、「問い合わせフォームで問い合わせを完了した時に、確認メールをユーザ宛に送信する」といったWebサイトのアクションに対するメール送信等に利用します。
参考URLはこちら
TriggeredSendの作成
まずは、コンテンツ>メール からメールを作成します。(作成方法は前回記事を参照)
次にインタラクション>トリガーによるメール から「トリガーによる送信」を作成します。
名前や外部キーは適当に入力
コンテンツには予め作成したメールを選択します。
購読者管理で指定したリスト、データエクステンションにはTriggeredEmailで送信したSubscriberのデータが格納されます。EmailSendDefinitionと違って、一斉に送信するために定義するものではなく、送信したSubscriberの情報を格納するための箱を定義するものになります。「購読者の更新」にチェックを付けると、既にSubscriberが存在していた場合は該当レコードを更新してくれるようになります。
管理先にデータエクステンションを選択する場合は、予めトリガー送信用のテンプレートで作成したデータエクステンションを作成しておく必要があります。
テンプレートの選択でTriggeredSendDataExtensionを選択して作成すればOKです。
トリガーによる送信の作成が完了したら「保存」ボタンをクリックして保存処理を行い、「開始/再開」ボタンをクリックします。開始するまではTriggeredSendは利用できないことに注意してください。
また、「開始」時に以下のようなエラーが発生することがあります。
これは選択したリスト、データエクステンションの項目とメール文面のAMPScriptによるバインディング項目の整合性が取れていないため発生するエラーになります。また、コンテンツでメール文面を変更しても、トリガーによる送信で「パブリッシュ変更」をしないと実際の文面が変更されません。さらに、「停止」処理を行ったトリガーによる送信に対してAPIでメール送信を行うと、キューイングされて、開始処理が行われた時に一斉に送信されるような仕様となっています。 従って、メールの文面を変える場合は、「トリガーによる送信の停止」→「メールコンテンツの編集」→「パブリッシュ変更」→「トリガーによる送信の開始」というプロセスを踏む必要があります。停止期間中にキューに溜まったメールは、開始後に新しいメール文面で配信されることになります。
参考URL:Triggered Email Change Process
キューに溜まっているメールに関しては対象の「トリガーによる送信」を選択して「キューの表示」から確認することが可能です。
APIによる送信
SOAP APIだとこんな感じ。(認証は省略)
$ curl -i -X POST \
-H "SOAPAction:\"Create\"" \
-H "Content-Type:text/xml" \
-d \
'<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<fueloauth xmlns="http://exacttarget.com">{access_token}</fueloauth>
</Header>
<Body>
<CreateRequest xmlns="http://exacttarget.com/wsdl/partnerAPI">
<Objects xsi:type="TriggeredSend">
<PartnerKey xsi:nil="true"/>
<ObjectID xsi:nil="true"/>
<TriggeredSendDefinition>
<PartnerKey xsi:nil="true"/>
<ObjectID xsi:nil="true"/>
<CustomerKey>{triggeredSend_external_key</CustomerKey>
</TriggeredSendDefinition>
<Subscribers>
<PartnerKey xsi:nil="true"/>
<ObjectID xsi:nil="true"/>
<EmailAddress>hoge@example.com</EmailAddress>
<SubscriberKey>hogehogekey</SubscriberKey>
<Attributes>
<Name>FullName</Name>
<Value>hogehoge</Value>
</Attributes>
<Attributes>
<Name>hoge</Name>
<Value>fugafuga</Value>
</Attributes>
</Subscribers>
</Objects>
</CreateRequest>
</Body>
</Envelope>' \
'https://webservice.s7.exacttarget.com/Service.asmx'
REST APIだとこんな感じ
$ curl -i -X POST \
-H "Content-Type:application/json" \
-H "Authorization:Bearer {access_token}" \
-d \
'{
"From": {
"Address": "hoge@example.com",
"Name": "hoge"
},
"To": {
"Address": "fuga@example.com",
"SubscriberKey": "fuga",
"ContactAttributes": {
"SubscriberAttributes": {
"FullName":"HOGE 太郎",
"hoge":"foobar"
}
}
}
}' \
'https://www.exacttargetapis.com/messaging/v1/messageDefinitionSends/key:{triggered_send_externel_key}/send'