コンテンツにスキップ

送信結果取得(Delivery Report)

目的

  • SMS の送信結果(到達・エラー)を確認する仕組みを理解する
  • Webhook とポーリングの 2 つの取得方式の違いを把握する
  • 代表的なステータスの意味と対処法を知る

Delivery Report(DLR)とは

API で送信した SMS が「実際にお客様の端末に届いたか(到達)」「圏外や解約で失敗したか(エラー)」を確認するための仕組みを Delivery Report(DLR) と呼びます。
NTT CPaaS では、システム構成や要件に合わせて 「Webhook(プッシュ型)」「API ポーリング(プル型)」 の 2 つの取得方法を提供しています。


1. Webhook による取得(本番環境・推奨)

お客様のサーバーに受け取り用の URL(エンドポイント)を用意していただき、NTT CPaaS 側からその URL 宛に結果を自動で通知(POST リクエスト)する方式です。

メリット

  • 結果が出た瞬間にリアルタイムで通知されるため、タイムラグがありません
  • システムへの負荷も最小限に抑えられます

利用シーン

  • 本番運用
  • 即時性が求められる通知(ワンタイムパスワード等)
  • 大量配信時の結果取得

大量配信時の Webhook サーバスペックに注意

大量配信時には大量に DLR が返却されます。
Webhook サーバのスペック選定と、リクエストの受け取り処理のスケール設計に留意してください。

設定の流れ

sequenceDiagram
  box LightCyan お客様側
    participant App as お客様のアプリケーション
    participant Hook as お客様のWebhookサーバ
  end

  box WhiteSmoke NTT CPaaS 側 / その他
    participant API as NTT CPaaS API
    participant Carrier as キャリア
  end

  App->>API: SMS 送信(notifyUrl を指定)
  API->>Carrier: キャリアへ転送
  Carrier-->>API: 配信結果
  API->>Hook: DLR を POST(notifyUrl へ)
  1. お客様側のシステムに、Webhook (POST リクエスト) を受け取るためのエンドポイントを作成します
    (例: https://your-domain.com/webhook/sms-dlr
  2. SMS 送信時の API リクエスト(JSON)内に、作成した URL を指定するパラメータ(notifyUrlなど)を含めて送信します
  3. メッセージのステータスが更新されたタイミングで、指定した URL に結果(JSON)が自動で送られてきます

2. API ポーリングによる取得(手軽な確認・トライアル向け)

お客様のシステムから、定期的に NTT CPaaS の「結果取得 API(例: GET /sms/1/reports)」を呼び出して、最新のステータスを取りに行く方式です。

メリット

  • 受信用のサーバー(公開 URL)を用意する必要がないため、手元の PC や閉域網からでも簡単にテストが可能です

利用シーン

  • トライアル時の動作確認
  • 小規模な送信
  • お客様のサーバーを外部公開できない場合

注意点

  • API を叩く頻度が高すぎると制限(レートリミット)に引っかかる可能性があります
  • 本番環境で大量の SMS を送信する場合は、前述の Webhook の利用を強く推奨します

取得後のデータは削除されます

結果を 1 度取得すると、そのデータはキューから削除される仕様となっております。
取得したデータは必ずシステム側で保存・記録してください。


代表的なステータス(Status)の種類

取得できる結果データには、主に以下のステータスが含まれます。
エラーハンドリングや再送処理の判断基準としてご活用ください。

ステータス名 意味・状態 確定の目安 対処法・システム側の処理
PENDING 処理中・キャリアへ転送中 数秒〜数分以内 そのままお待ちください。数分経っても変わらない場合は、端末の日時設定誤りなどを確認してください。
DELIVERED 到達完了 即座 正常に端末へ届きました。処理完了です。
REJECTED 送信拒否(API またはキャリア) 即座 番号の桁数間違い、送信制限への抑触、またはキャリアの迷惑フィルターによるブロックの可能性があります。
UNDELIVERABLE 到達不可 即座 電話番号が存在しない、解約されている。
EXPIRED 有効期限切れ(圈外など) 即座~72時間
(テナントの設定により異なる)
端末がネットワークから長期間切断されている。
ユーザーのスマートフォンが長期間「電源オフ」「圈外」「機内モード」になっている。

受信トレイの容量が不足している。
ユーザーの端末のSMS保存容量がいっぱいで、新しいメッセージを受信できない。

Webhook とポーリングの比較

項目 Webhook(プッシュ型) API ポーリング(プル型)
取得タイミング リアルタイム 定期的な能動取得
お客様側の公開 URL 必要 不要
サーバ負荷 低(受動的) API 呼び出し頻度に依存
大量配信 推奨 非推奨
利用シーン 本番運用・即時通知 トライアル・閉域環境
NTT CPaaS側でのデータ保持 通知後は削除 取得後は削除