SMPP API
API情報
SMPP APIプロトコルは、EngageLab OTPサービス向けのSMPP通信プロトコルを定義したもので、TCP接続を通じて効率的かつ信頼性の高いメッセージ配信とステータスレポートを実現するために設計されています。API情報には、接続に必要なIPアドレス、ポート番号、認証情報が含まれます。認可されたチャネルを通じて提供されたアカウントとパスワードが正しく設定されていることを確認してください。
SMPPアドレス
SMPPアドレス: otpsmpp.api.engagelab.cc
以下の情報は、営業または技術サポートなどの認可された窓口を通じて取得してください。
- Port:
{ port } - Account:
{ system_id } - Password:
{ password }
接続の確立
クライアントパケット
TCP接続を確立した後、最初のパケットでは認証のために BindTransceiver コマンド(0x00000009)を送信する必要があります。このパケットには、以下のフィールドを含める必要があります。
- system_id: クライアントに割り当てられたシステムアカウントで、クライアントの識別に使用されます。
- password: システムアカウントに対応するアクセスパスワードで、認証に使用されます。
サーバーレスポンス
成功レスポンス
- サーバーは
BindTransceiverRespコマンド(0x80000009)を返します。 system_idフィールドには、受信したsystem_idフィールドと同じ値が設定されます。
失敗レスポンス
- 認証に失敗した場合、サーバーはTCP接続を切断し、失敗理由を記録します。
メッセージ送信
サーバーロジック
メッセージ送信では、SUBMIT_SM コマンド(0x00000004)を使用してメッセージ配信リクエストを送信します。サーバーロジックは以下のとおりです。
- サーバーはリクエスト内容を解析し、常にSMSチャネルを使用して配信します。
- メッセージ配信は同期的に行われ、結果は
SUBMIT_SM_RESPコマンド(0x80000004)を通じて返されます。 - 配信ステータスは配信レポートを通じて通知されます。詳細は 配信レポート を参照してください。
- 特殊文字および国際化に対応するため、
UCS2エンコーディングの使用を推奨します。
クライアントパケット
クライアントは SUBMIT_SM コマンド(0x00000004)を送信してメッセージを送信します。パケットには、以下のフィールドを含める必要があります。
service_type
- 値:
MSG/CODE/MRKT - デフォルト値:
MSG
- 値:
source_addr
- 空のままでも問題なく、現在OTPでは使用されていません。
destination_addr
- メッセージの送信先です。国際電話番号形式(例:
+6598765432)である必要があります。
- メッセージの送信先です。国際電話番号形式(例:
short_message
- メッセージ内容は、以下のようにJSON形式を使用します。{ "id": "xxx", // テンプレートID "language": "default", // 使用する言語。デフォルトはdefault "code": "xx", // 認証コード。service_typeがCODEの場合にのみ使用 "params": { // カスタムキーと値のペア "key1": "val1" // valは文字列形式である必要があります } }
{ "id": "xxx", // テンプレートID "language": "default", // 使用する言語。デフォルトはdefault "code": "xx", // 認証コード。service_typeがCODEの場合にのみ使用 "params": { // カスタムキーと値のペア "key1": "val1" // valは文字列形式である必要があります } }このコードブロックはフローティングウィンドウ内に表示されます
- メッセージ内容は、以下のようにJSON形式を使用します。
data_coding
{}などの特殊文字を正しく解析できるように、UCS2エンコーディングの使用を推奨します。{}の直接送信がサポートされている場合は、デフォルトのエンコーディング(0x00)を使用できます。
status in the header
0x00000000に設定します。
サーバーレスポンス
サーバーは、メッセージ配信結果に対する応答として SUBMIT_SM_RESP コマンド(0x80000004)を送信します。
成功レスポンス
- ヘッダー内のstatusフィールドの値:
0x00000000 - MESSAGE_IDフィールド: 応答メッセージID。配信レポートとの関連付けに使用されます。
失敗レスポンス
- サーバーは、失敗理由を示すために ヘッダー内のstatusフィールド を設定します。
| Status Code | Description | Value |
|---|---|---|
ESME_RINVPARAM |
無効なパラメータです。リクエスト内容の形式を確認してください。 | 0x00000032 |
ESME_RSYSERR |
サービス内部エラーです。しばらく時間をおいてから再試行することを推奨します。 | 0x00000008 |
ESME_RSUBMITFAIL |
配信に失敗しました。テンプレートの問題またはその他の理由が考えられます。 | 0x00000045 |
ESME_RINVNUMMSGS |
short_message フィールドの内容形式が正しくありません。 |
0x00000055 |
ESME_RUNKNOWNERR |
不明なエラーです。技術サポートへお問い合わせください。 | 0x000000FF |
配信レポート
サーバーは DELIVER_SM コマンド(0x00000005)を通じて配信ステータスを通知します。関連フィールドは以下のとおりです。
service_type
- 固定値:
MSG
- 固定値:
source_addr
- 空のままにします。
destination_addr
SUBMIT_SMコマンド内のdestination_addrと同じです。
data_coding
- エンコーディング方式: デフォルト値は
0x00です。
- エンコーディング方式: デフォルト値は
esm_class
0x00に設定します。
short_message
- 配信レポートは
delivery receipt形式でパッケージ化されます。
- 配信レポートは
ReceiptedMessageID in TLV
- メッセージID。関連付けおよび識別に使用されます。
MessageState in TLV
- メッセージステータス。フィールド値は
0x0427です。
- メッセージステータス。フィールド値は
ステータス解析
short_message フィールド内の stat 値の意味は以下のとおりです。
| Status | Meaning |
|---|---|
DELIVRD |
正常に配信されました |
UNDELIV |
配信に失敗しました |
その他の注意事項
無効なコマンド
クライアントから無効なコマンドが送信された場合、サーバーは GENERIC_NACK コマンド(0x80000000)を返し、関連ログを記録します。サーバーがサポートするコマンドは以下のみです。
EnquireLinkコマンド(0x00000015)Unbindコマンド(0x00000006)SubmitSMコマンド(0x00000004)DeliverSMRespコマンド(0x80000005)BindTransceiverコマンド(0x00000009)
Keepalive
接続をアクティブな状態に保つため、クライアントは30秒ごと(許容範囲: ±5秒)に1回 EnquireLink コマンド(0x00000015)を送信する必要があります。
送信ステータスの意味
| Status Code | Meaning |
|---|---|
ESME_RINVPARAM |
無効なパラメータです。リクエスト内容の形式を確認してください。 |
ESME_RINVNUMMSGS |
short_message フィールドの内容形式が正しくありません。 |
ESME_RSUBMITFAIL |
配信に失敗しました。テンプレートの問題またはその他の理由が考えられます。 |
ESME_RSYSERR |
サービス内部エラーです。しばらく時間をおいてから再試行することを推奨します。 |
ESME_RUNKNOWNERR |
不明なエラーです。技術サポートへお問い合わせください。 |
DELIVRD |
メッセージは正常に配信されました |
UNDELIV |
メッセージを配信できませんでした |
用語
- SMPP: Short Message Peer-to-Peer Protocol。SMSゲートウェイとのメッセージ交換に使用されます。
- SUBMIT_SM: SMSメッセージを送信するためのSMPPコマンドです。
- DELIVER_SM: メッセージ配信ステータスを通知するためにサーバーが使用するSMPPコマンドです。
ご不明な点がありましたら、OTP Technical Support までお問い合わせください。










