Skip to content

APIトリガー配信を使用してトランザクションメールを送信する

post

/transactional/v1/campaigns/{campaign_id}/send

このエンドポイントを使用して、指定したユーザーに即時の単発トランザクションメッセージを送信します。

このエンドポイントは、Brazeのトランザクションメールキャンペーンと対応するキャンペーン IDの作成と併せて使用されます。

送信トリガーキャンペーンエンドポイントと同様に、このキャンペーンタイプでは、Brazeダッシュボード内にメッセージコンテンツを格納しながら、API経由でメッセージの送信タイミングと送信先を指定できます。メッセージの送信先となるオーディエンスまたはセグメントを受け入れる送信トリガーキャンペーンエンドポイントとは異なり、このキャンペーンタイプは注文確認やパスワードリセットなどのアラートの1対1メッセージングに特化しているため、このエンドポイントへのリクエストではexternal_user_idまたはuser_aliasで1人のユーザーを指定する必要があります。

前提条件

このエンドポイントを使用するには、transactional.send権限を持つAPIキーを生成する必要があります。

レート制限

/transactional/v1/campaigns/{campaign_id}/send エンドポイントは有料のエンドポイントであり、単位は時間あたりです(例:パッケージに応じて1時間あたり50,000)。エンドポイントごとの個別のレート制限は存在しません。割り当てられた容量を超えて送信することは可能ですが、SLAの対象となるのは割り当てられた容量のみです。このエンドポイントへのリクエストは全体の外部APIレート制限にカウントされます。その制限(例:全エンドポイントで1時間あたり250,000リクエスト)を超えると、Brazeは429を返し、リクエストはスロットリングされます。トランザクション量のカウントは毎時リセットされるため、1時間後には新たな割り当てが利用可能になります。SLAの対象範囲内では、メールの99.9%が1分以内に送信されます。

パスパラメーター

パラメーター 必須 データタイプ 説明
campaign_id 必須 文字列 CampaignのID

リクエスト本文

1
2
Content-Type: application/json
Authorization: Bearer YOUR-REST-API-KEY
1
2
3
4
5
6
7
8
9
10
11
{
  "external_send_id": (optional, string) see the following request parameters,
  "trigger_properties": (optional, object) personalization key-value pairs that apply to the user in this request,
  "recipient": (required, object)
    {
      // Either "external_user_id" or "user_alias" is required. Requests must specify only one.
      "user_alias": (optional, User alias object) User alias of the user to receive message,
      "external_user_id": (optional, string) External identifier of user to receive message,
      "attributes": (optional, object) fields in the attributes object create or update an attribute of that name with the given value on the specified user profile before the message is sent and existing values are overwritten
    }
}

リクエストパラメーター

パラメーター 必須 データタイプ 説明
external_send_id オプション 文字列 Base64互換の文字列です。以下の正規表現に対して検証されます。

/^[a-zA-Z0-9-_+\/=]+$/

このオプションフィールドを使用すると、この特定の送信に対する内部識別子を渡すことができます。この識別子は、トランザクションHTTPイベントポストバックから送信されるイベントに含まれます。渡された場合、この識別子は重複排除キーとしても使用され、Brazeは24時間保存します。

同じ識別子を別のリクエストで渡しても、Brazeは24時間以内に新たな送信インスタンスを生成しません。
trigger_properties オプション オブジェクト トリガープロパティを参照してください。このリクエストのユーザーに適用されるパーソナライゼーションのキーと値のペアです。
recipient 必須 オブジェクト このメッセージの対象となるユーザーです。attributesと単一のexternal_user_idまたはuser_aliasを含めることができます。

Brazeにまだ存在しないexternal IDを指定した場合、attributesオブジェクトにフィールドを渡すと、Brazeにこのユーザープロファイルが作成され、新規作成されたユーザーにこのメッセージが送信されます。

同じユーザーに対してattributesオブジェクトに異なるデータを含む複数のリクエストを送信した場合、first_namelast_nameemail属性は同期的に更新され、メッセージにテンプレートとして組み込まれます。カスタム属性にはこれと同じ保護がないため、このAPIを使用してユーザーを更新し、異なるカスタム属性値を連続して渡す場合は注意してください。

リクエスト例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
curl -X POST \
  -H 'Content-Type:application/json' \
  -H 'Authorization: Bearer YOUR-REST-API-KEY' \
  -d '{
        "external_send_id" : YOUR_BASE64_COMPATIBLE_ID
        "trigger_properties": {
          "example_string_property": YOUR_EXAMPLE_STRING,
          "example_integer_property": YOUR_EXAMPLE_INTEGER
        },
        "recipient": {
          "external_user_id": TARGETED_USER_ID_STRING
        }
      }' \
  https://rest.iad-01.braze.com/transactional/v1/campaigns/{campaign_id}/send

応答

トランザクションメール送信エンドポイントは、このメッセージ送信のインスタンスを表すdispatch_idを返します。この識別子は、トランザクションHTTPイベントポストバックのイベントと共に使用して、1人のユーザーに送信された個々のメールのステータスを追跡できます。

応答例

1
2
3
4
5
{
    "dispatch_id": A randomly-generated unique ID of the instance of this send
    "status": Current status of the message
    "metadata" : Object containing additional information about the send instance
}

トラブルシューティング

エンドポイントは、場合によってはエラーコードと人間が判読可能なメッセージを返すこともあります。そのほとんどは検証エラーです。以下は、無効なリクエストを行った場合によく発生するエラーです。

エラー トラブルシューティング
The campaign is not a transactional campaign. Only transactional campaigns may use this endpoint 指定されたキャンペーン IDはトランザクションキャンペーン用ではありません。
The external reference has been queued. Please retry to obtain send_id. external_send_idは最近作成されたものです。新しいメッセージを送信する場合は、新しいexternal_send_idを試してください。
キャンペーン does not exist 指定されたキャンペーン IDが既存のキャンペーンに対応していません。
The campaign is archived. Unarchive the campaign in order for trigger requests to take effect. 指定されたキャンペーン IDはアーカイブされたキャンペーンに対応しています。
The campaign is paused. Resume the campaign in order for trigger requests to take effect. 指定されたキャンペーン IDは一時停止中のキャンペーンに対応しています。
campaign_id must be a string of the campaign api identifier 指定されたCampaign IDは有効なフォーマットではありません。
Error authenticating credentials 指定されたAPIキーが無効です。
Invalid whitelisted IPs リクエストを送信しているIPアドレスがIPホワイトリストに含まれていません(使用されている場合)。
You do not have permission to access this resource 使用されたAPIキーには、このアクションを実行する権限がありません。

Brazeのほとんどのエンドポイントにはレート制限が実装されており、リクエストが多すぎると429のレスポンスコードを返します。トランザクション送信エンドポイントには、有料の時間単位割り当てがあり、単位で測定されます(例:パッケージに応じて1時間あたり50,000単位)。このエンドポイントには個別のエンドポイントごとのレート制限はありません。割り当てられた量を超えて送信できますが、SLAの対象となるのは割り当て量のみです。割り当て量を超えるリクエストは送信されますが、SLAの対象外となります。このエンドポイントへのリクエストは全体の外部APIレート制限にカウントされます。その制限(例:全エンドポイントで1時間あたり250,000リクエスト)を超過した場合、Brazeは429を返し、制限がリセットされるまでリクエストをスロットリングします。トランザクションボリュームのカウントは毎時リセットされます。この機能についてさらに情報が必要な場合は、Brazeサポートにお問い合わせください。

トランザクションHTTPイベントポストバック

すべてのトランザクションメールは、指定した URL に HTTP リクエストとして返送されるイベントステータスポストバックによって補完されます。これにより、リアルタイムでメッセージのステータスを評価し、メッセージが未配信の場合は別のチャネルでユーザーにリーチするアクションを取ったり、Brazeにレイテンシーが発生している場合は内部システムにフォールバックしたりすることができます。

ユニークな識別子を使って、これらの更新を個々のメッセージに関連付けることができます。

  • dispatch_id: Brazeが各メッセージに対して自動的に生成するユニークな ID です。
  • external_send_id: 注文番号など、内部システムと更新を照合するために提供するカスタム識別子です。

たとえば、注文確認メールを送信する際にリクエストに external_send_id: 1234 を含めると、そのメールに対するその後のすべてのイベントポストバック(SentDelivered など)に external_send_id: 1234 が含まれます。これにより、注文番号 #1234 の顧客が注文確認メールを受け取ったかどうかを確認できます。

ポストバックの設定

Brazeダッシュボードで以下を行います。

  1. 設定 > メール設定に移動します。
  2. トランザクションイベントステータスポストバックの下に、Brazeがトランザクションメールのステータス更新を送信する URL を入力します。
  3. ポストバックをテストします。

ポストバック本文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "dispatch_id": (string, a randomly-generated unique ID of the instance of this send),
  "status": (string, Current status of message from the following message status table,
  "metadata" : (object, additional information relating to the execution of an event)
   {
     "external_send_id" : (string, If provided at the time of the request, Braze will pass your internal identifier for this send for all postbacks),
     "campaign_api_id" : (string, API identifier of this transactional campaign),
     "received_at": (ISO 8601 DateTime string, Timestamp of when the request was received by Braze, only included for events with "sent" status),
     "enqueued_at": (ISO 8601 DateTime string, Timestamp of when the request was enqueued by Braze, only included for events with "sent" status),
     "executed_at": (ISO 8601 DateTime string, Timestamp of when the request was processed by Braze, only included for events with "sent" status),
     "sent_at": (ISO 8601 DateTime string, Timestamp of when the request was sent to the ESP by Braze, only included for events with "sent" status),
     "processed_at" : (ISO 8601 DateTime string, Timestamp the event was processed by the ESP, only included for events with "processed" status),
     "delivered_at" : (ISO 8601 DateTime string, Timestamp the event was delivered to the user's inbox provider, only included for events with "processed" status),
     "bounced_at" : (ISO 8601 DateTime string, Timestamp the event was bounced by the user's inbox provider, only included for events with "bounced" status),
     "aborted_at" : (ISO 8601 DateTime string, Timestamp the event was Aborted by Braze, only included for events with "aborted" status),
     "reason" : (string, The reason Braze or the Inbox provider was unable to process this message to the user, only included for events with "aborted" or "bounced" status),
   }
}

メッセージステータス

ステータス 説明
sent メッセージがBrazeのメール送信パートナーに正常にディスパッチされました
processed メール送信パートナーがメッセージを正常に受信し、ユーザーの受信トレイプロバイダーへの送信準備が完了しました
aborted ユーザーがメール送信可能なアドレスを持っていないか、メッセージ本文でLiquidの abort ロジックが呼び出されたため、Brazeがメッセージを正常にディスパッチできませんでした。すべての中止イベントのメタデータオブジェクト内には、メッセージが中止された理由を示す reason フィールドが含まれています
delivered メッセージがユーザーのメール受信トレイプロバイダーに受け入れられました
bounced メッセージがユーザーのメール受信トレイプロバイダーによって拒否されました。すべてのバウンスイベントのメタデータオブジェクト内には、受信トレイプロバイダーから提供されたバウンスエラーコードを反映する reason フィールドが含まれています

ポストバックの例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

// Sent Event
{
    "dispatch_id": "acf471119f7449d579e8089032003ded",
    "status": "sent",
    "metadata": {
      "received_at": "2020-08-31T18:58:41.000+00:00",
      "enqueued_at": "2020-08-31T18:58:41.000+00:00",
      "executed_at": "2020-08-31T18:58:41.000+00:00",
      "sent_at": "2020-08-31T18:58:42.000+00:00",
      "campaign_api_id": "417220e4-5a2a-b634-7f7d-9ec891532368",
      "external_send_id" : "34a2ceb3cf6184132f3d816e9984269a"
    }
}

// Processed Event
{
    "dispatch_id": "acf471119f7449d579e8089032003ded",
    "status": "processed",
    "metadata": {
      "processed_at": "2020-08-31T18:58:42.000+00:00",
      "campaign_api_id": "417220e4-5a2a-b634-7f7d-9ec891532368",
      "external_send_id" : "34a2ceb3cf6184132f3d816e9984269a"
    }
}

// Aborted
{
    "dispatch_id": "acf471119f7449d579e8089032003ded",
    "status": "aborted",
    "metadata": {
      "reason": "User not emailable",
      "aborted_at": "2020-08-31T19:04:51.000+00:00",
      "campaign_api_id": "417220e4-5a2a-b634-7f7d-9ec891532368",
      "external_send_id" : "34a2ceb3cf6184132f3d816e9984269a"
    }
}

// Delivered Event
{
    "dispatch_id": "acf471119f7449d579e8089032003ded",
    "status": "delivered",
    "metadata": {
      "delivered_at": "2020-08-31T18:27:32.000+00:00",
      "campaign_api_id": "417220e4-5a2a-b634-7f7d-9ec891532368",
      "external_send_id" : "34a2ceb3cf6184132f3d816e9984269a"
    }
}

// Bounced Event
{
    "dispatch_id": "acf471119f7449d579e8089032003ded",
    "status": "bounced",
    "metadata": {
      "bounced_at": "2020-08-31T18:58:43.000+00:00",
      "reason": "550 5.1.1 The email account that you tried to reach does not exist",
      "campaign_api_id": "417220e4-5a2a-b634-7f7d-9ec891532368",
      "external_send_id" : "34a2ceb3cf6184132f3d816e9984269a"
    }
}

New Stuff!