ドキュメント本文へスキップ
SDK

一斉配信

`broadcasts.preview`、`send`、`list`、`listAll`、`iterate`、`get`、`cancel`。

すべてのメソッド

broadcasts.ts
const draft = {  audienceIds: ['aud_4c1b8e2a7d9f05c36b4e8a71'],  from: 'Acme <[email protected]>',  subject: '{{firstName|Hello}}, the September release is out',  html: '<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>',  text: 'Hi {{firstName|there}}, here is what changed this month. Unsubscribe: {{unsubscribeUrl}}',  tags: { campaign: 'release-2026-09' },} const reach = await openemail.broadcasts.preview(draft)console.log(reach.recipients, reach.unsubscribed, reach.suppressed) const broadcast = await openemail.broadcasts.send(draft) let latest = await openemail.broadcasts.get(broadcast.id)while (['scheduled', 'queued', 'sending'].includes(latest.status)) {  await new Promise((resolve) => setTimeout(resolve, 5_000))  latest = await openemail.broadcasts.get(broadcast.id)} for await (const copy of openemail.emails.iterate({ broadcastId: broadcast.id })) {  console.log(copy.id, copy.status)} const later = await openemail.broadcasts.send({ ...draft, scheduledAt: 'P1D' })await openemail.broadcasts.cancel(later.id) const history = await openemail.broadcasts.list({ audienceId: draft.audienceIds[0] })console.log(latest.status, latest.counts.sent, history.items.length)

一斉配信は、1 つ以上のオーディエンス内の全員に 1 通のメッセージを、一人ずつ別のコピーとして送ります。各コピーの受信者はちょうど一人で cc も bcc もないため、他に誰に送られたかは誰にも見えず、各コピーは独自の msg_ ID、イベント、トラッキング、Webhook を持つ普通のメールです。emails.list({ broadcastId }) で一覧できます。一斉配信そのものが記録なので、コピーは「送信済み」フォルダに保存されません。

send はすぐに queued の一斉配信で解決し、scheduledAt を渡した場合は scheduled で解決します。送信はバックグラウンドで続きます。send には emails:sendaudiences:readpreview には audiences:readlistlistAlliterateget には emails:readcancel には emails:send が必要です。

どの send にも Idempotency-Key が付きます。options.idempotencyKey で指定したもの、または SDK が作ったものです。そのため、ネットワーク障害後の再試行は、2 回送るのではなく、最初の試行が作った一斉配信を返します。previewgetcancel は安全に繰り返せ、再試行されます。

差し込み項目

subjecthtmltext は一人ひとりの連絡先から埋められます。{{firstName}} は連絡先の名前の最初の語、{{lastName}} は残り、{{name}} は名前全体、{{email}} はコピーの送り先アドレス、{{unsubscribeUrl}} はその人を配信停止にするリンクです。

各項目はバーの後に代替値を取り、連絡先に値がないときに使われるので、名前なしで保存された連絡先では {{firstName|there}} が "there" になります。html では値がエスケープされ、他の {{…}} は書かれたとおりに残ります。

保存済みのテンプレートを送るには、htmltext の代わりに template を渡します。同じ 5 つの値がプロパティとして渡されますが、テンプレートが宣言しているものに限られるので、firstName を宣言しているテンプレートはそれを受け取り、宣言していないテンプレートがそのせいで拒否されることはありません。template.props の内容はすべてのコピーに同じように入ります。

配信停止

どのコピーにもワンクリック配信停止ヘッダーが付き、メールクライアントが独自の配信停止ボタンを表示できます。これは大手のメールボックス事業者が一括メールに求めているものです。{{unsubscribeUrl}} を自分で置いていない html または text の本文には、リンク付きの 1 行のフッターが付きます。テンプレートはそのまま送られるので、テンプレートに {{unsubscribeUrl}} を入れてください。

配信停止すると、その一斉配信が送られたすべてのオーディエンスでその人が配信停止として記録され、AudienceContactResource.unsubscribedAtaudiences.listContacts でそれを示します。その人はオーディエンスとアドレス帳に残り、他のオーディエンスには影響せず、1 通ずつ送るメールは引き続き届きます。オーディエンスから外して追加し直すと、改めて購読状態になります。

スキップされる人

一斉配信は audienceIds のうち少なくとも 1 つに入っているすべての連絡先に、いくつに入っていても 1 回だけ届きます。スキップされるのは、それらのオーディエンスのうち自分が入っているすべてで配信停止した連絡先と、バウンスや苦情のため、あるいは誰かが追加したために抑止リストにあるアドレスです。send の後、送信が届く前にオーディエンスに追加された連絡先には届きます。

preview は何も送らずに同じ数、recipientsunsubscribedsuppressed を返します。誰にも届かない send は 422 no_recipients を投げます。

何かを書き込む前に送信全体がプランの月間送信数と照合されるので、割り当てで賄えない一斉配信は 429 send_quota_exceeded を投げ、何も残しません。コピー 1 通が 1 回の送信として数えられます。

状態と進み具合

get はコピーから counts を直接読むので、一斉配信の送信中はこれをポーリングしてください。statusscheduled または queued から sending に進み、渡したすべてのコピーが送られたか失敗すると sent で落ち着きます。completedAt が最後の人に届いたことを示した後でも、送信待ちのコピーがある間は sending のままです。failed は一斉配信全体が止まったことを意味し、lastError が理由を示します。from アドレスから送信できなくなった、テンプレートが解決できなくなった、途中でプランが尽きた、送信自体が失敗し続けた、またはコピーを 1 通も書き込めなかった、のいずれかです。

cancelscheduledqueuedsending の一斉配信を止めます。新たに誰も追加されず、送信待ちのコピーはすべてキャンセルされますが、送られたコピーは取り消せません。すべてのコピーが送られた後の cancel は 409 broadcast_not_cancellable を投げ、キャンセル済みの一斉配信をキャンセルするとその時点の状態で解決します。

レスポンス: BroadcastResource

sendgetcancel はそれぞれこれを 1 つ返して解決します。list はこれを並べたページ { items, hasMore, nextCursor } を新しい順に返し、listAlliterate はすべてのページをたどります。previewaudienceIdsrecipientsunsubscribedsuppressed を持つ BroadcastPreviewResource で解決します。

idstring
永続的な識別子で、`brd_` に 16 進 24 文字が続きます。
statusBroadcastStatus
`scheduled`、`queued`、`sending`、`sent`、`cancelled`、`failed` のいずれか。`BROADCAST_STATUSES` がそれぞれを名前で示します。
modeApiKeyMode
作成したキーに応じて `live` または `test`。テスト一斉配信のコピーは送信済みとして記録され、誰にも配信されません。
sourceEmailSource
開始された場所。キーなら `api`、接続されたアプリなら `oauth`、アプリなら `composer`、アシスタントなら `mcp` です。
audienceIdsstring[]
送り先のオーディエンス。それぞれ 1 回ずつです。
fromstring
すべてのコピーの送信元アドレス。
subjectstring
書かれたとおりの件名で、差し込み項目もそのままです。テンプレートが件名を用意する場合は空です。
countsBroadcastCounts
`recipients` は `send` 時の見積もりです。`created` は書き込まれたコピーの数、`skipped` はその時点でアドレスが抑止されていたために飛ばされた人の数、`failedToQueue` はコピーを書き込めなかった人の数です。`queued`、`sending`、`sent`、`failed`、`cancelled` は、各コピーの現在の状態ごとの数です。
lastErrorstring | null
一斉配信が失敗した理由、または書き込めなかった最新のコピーとその理由。問題がない間は null です。
scheduledAtstring | null
ISO-8601 UTC で、送信が始まる予定の日時。すぐに送った一斉配信では null です。
startedAtstring | null
ISO-8601 UTC で、送信が最初の人たちに届いた日時。
completedAtstring | null
ISO-8601 UTC で、最後の人に届いた日時。その後もコピーが送信待ちのことがあります。
cancelledAtstring | null
ISO-8601 UTC で、`cancel` が止めた日時。
createdAtstring
ISO-8601 UTC で、`send` が呼ばれた日時。一覧の順序を決めます。
updatedAtstring
ISO-8601 UTC で、送信が進むにつれて更新されます。