SMS API

SMS APIは2つの送信モードをサポートしています。テンプレートSMSとフリーフォームSMSです。テンプレートSMSは標準アカウントのデフォルトであり、フリーフォームSMSは承認されたトラステッドパートナーのみ利用可能です。

SMSメッセージ送信APIのテンプレートSMSでは、検証済みの変数を含む承認されたメッセージテンプレートを使用します。フリーフォームSMSでは、完全にカスタムされたメッセージ本文を使用できますが、アクセスは制限されています。

概要

OTP、アラート、リマインダー、通知など、予測可能で構造化されたメッセージを送信したい場合は、テンプレートSMSを使用します。

アカウントが明示的に有効化されている場合にのみ、フリーフォームSMSを使用します。

認証

すべてのエンドポイントで、アカウントの認証情報を使用した認証が必要です。

例:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/templates/

テンプレート管理

テンプレートの作成、取得、更新、削除の操作や管理については、以下のドキュメントを確認してください。

テンプレート管理の詳細については、 SMSテンプレートAPI を参照してください。

テンプレートメッセージ送信

テンプレート経由のSMS送信API

承認済みのテンプレートを使用してSMSを送信するには、エンドポイントの後に <template_id> を続けて POST リクエストを送信します:

https://api.xoxzo.com/sms/templates/<template_id>/messages/

下記のパラメーターを併記してください。

名称

詳細

必須

sender

送信元ID(英数字は最大10文字、数字のみは最大15文字)

TestSender

recipient

国際電話番号規格(E.164)形式の受信者電話番号

+81987654321

variables

各プレースホルダー名とその値を関連付けるJSONデータ

{"name": "Alice"}

注釈

送信に使用できるのは APPROVED のテンプレートのみです。 PENDING のテンプレートで送信しようとするとエラーが返されます。

下記は、CURLを使ったリクエストの例です。

curl -u <SID>:<AUTH_TOKEN> -X POST \
  https://api.xoxzo.com/sms/templates/<template_id>/messages/ \
  -H "Content-Type: application/json" \
  -d '{
    "sender": "TestSender",
    "recipient": "+81987654321",
    "variables": {
      "name": "Sample_name",
      "salary": "Sample_salary"
    }
  }'

ちなみに

リンクトラッキングやコールバックURLなどの他のパラメータを使用する場合は、詳細について SMSパラメーター表 を参照してください。

レスポンスは、JSON構造となり、ステータスコード HTTP 201 CREATED にて返されます。

HTTP/1.1 201 CREATED
Content-Type: application/json

[
    {
        "msgid": "<msgid>"
    }
]

注釈

variables パラメーターに関する注意点:

  • すべての変数キーは、テンプレート内容で定義されたプレースホルダー名と完全に一致する必要があります。

  • キーが不足している、または余分なキーが含まれていると、エラーが発生するか、送信されたメッセージ内に未解決のプレースホルダーが残る可能性があります。

テンプレートメッセージの配信状態を確認するAPI

テンプレートに対して送信されたすべてのメッセージ

特定のテンプレートを使用して送信されたすべてのSMSメッセージの状態を確認するには、エンドポイントへ GET リクエストを送信してください:

https://api.xoxzo.com/sms/templates/<template_id>/messages/

下記は、CURLを使ったリクエストの例です。

curl -u <SID>:<AUTH_TOKEN> \
  https://api.xoxzo.com/sms/templates/<template_id>/messages/

メッセージIDによる単一メッセージ

テンプレート経由で送信された特定のメッセージの配信状態を確認するには、エンドポイントの後に <msg_id> を付けて GET リクエストを送信してください:

https://api.xoxzo.com/sms/templates/messages/<msg_id>/

下記は、CURLを使ったリクエストの例です。

curl -u <SID>:<AUTH_TOKEN> \
  https://api.xoxzo.com/sms/templates/messages/<msg_id>/

ちなみに

レスポンスのフィールドは、標準のSMS配信状態確認APIと同等です(statuscostmsgidrecipientsendersent_timeurl を含む)。詳細は SMSの配信状態を確認するAPI を参照してください。

フリーフォームSMSの送信

フリーフォームSMSは、承認されたパートナーのみ利用可能です。

テンプレートの制限なしにカスタムメッセージ本文を送信する必要がある場合に、このエンドポイントを使用します。

SMSメッセージを送信するには、 POST リクエストをエンドポイントに行ってください。

POST /sms/messages/

下記のパラメーターを併記してください。

名称

詳細

必須

データタイプ

message

メッセージ本文

UTF-8

こんにちは

recipient

メッセージの受信者

E.164

+8190123456789

sender

送信元ID

英数字

Xoxzo1

callbackurl

コールバックURL

×

URL

http://example.com

tags

タグ

×

UTF-8

tag1,tag2

track_link

リンクトラッキングを有効化

×

true の文字列

true

lt_callbackurl

リンクトラッキングのコールバックURL

×

URL

http://example.com

JP向けオプションパラメーター

下記のパラメーターは、JP向けの受信者に提供されます。

名称

詳細

必須

データタイプ

jp_kp

Kプレミアムフラグ

×

true の文字列

true

jp_kpl

Kプレミアム Liteフラグ

×

true の文字列

true

jp_kp_sender

kddi, docomo 向けSender ID

×

数字

0312341234

Please refer to our K-Premium Service FAQ for more information on the K-Premium Service.

注釈

message パラメーターに関する注意点

  • これは、受信者へ送るメッセージの本文になります。

  • メッセージはすべて、UTF-8にてコーディングしてください。

  • 分割メッセージの長さは、すべてのパートを含めた総文字数で計算されます。

  • ASCII以外の文字が含まれる場合(日本語など)、最大の長さは140文字です。

  • ASCII以外の文字が含まれる場合(日本語など)、最大の長さは70文字です。

  • ASCIIに基づいた文字のみの場合、SMS1通の最大の長さは140文字となりますが、非ASCII文字では、70文字となります。

  • 分割メッセージの最大長は660文字です。

  • ASCIIメッセージは最大5分割まで可能で、各パートには最大132文字を含めることができます。

  • 非ASCIIメッセージは最大10分割まで可能で、各パートには最大66文字を含めることができます。

  • 分割メッセージは、各パートごとにSMS送信料金が請求されます。

SMSパーツの数

1

2

3

4

5

6

7

8

9

10

ASCII文字

140

264

396

528

660

非ASCII文字

70

132

198

264

330

396

462

528

594

660

注釈

jp_kpjp_kpl パラメーターに関する注意点

  • jp_kpjp_kpl を同時に指定することはできません。どちらか一方のみ指定してください。

  • jp_kpjp_kpl の違いは、sender のSoftbankでの表示のされ方にあります。詳細は、jp_kp_sender の説明を参照してください。

注釈

jp_kp_sender パラメーターに関する注意点

  • jp_kpまたはjp_kplパラメーターが有効な場合、このパラメータに、あらかじめKDDI/docomoに登録してある番号を指定しなければいけません。

  • 受信者がKDDI/docomoの場合、このパラメータに指定した値が、携帯電話に表示されます。

  • jp_kp が指定されたとき、受信者がSoftbankの場合は、ある固定した番号が、代わりに携帯電話に表示されます。

  • jp_kpl が指定されたとき、受信者がSoftbankの場合は、sender に指定した番号が、代わりに携帯電話に表示されます。

注釈

jp_kddi_sender パラメーターに関する注意点

  • このパラメータは廃止されました。2020年8月31日まで使用することができます。

注釈

recipient パラメーターに関する注意点

  • Xoxzo uses the E.164 number format when specifying phone numbers.

  • E.164 dictates that phone numbers must start with the + prefix and country code then followed directly by the mobile number leaving the local 0 prefix .

  • 有効な受信者記載例として、 +818011234567 と挙げられます。 81 は日本の国番号で、 8011234567 は携帯電話番号となります。

注釈

sender パラメーターに関する注意点

  • sender パラメーターには、+ を先頭につける必要はありません。

  • sender に、 送信元として、XOXZO1XOXZO といった英数字を指定することができます。この場合、 sender パラメーターの最大の長さは10となります。

  • sender パラメーターが、数字のみの場合、最大の長さは、15桁となります。

警告

sender は、最良の方法で発信されますが、それでも、受信者側にそのまま表示される保証はありません。任意の sender に置き換えられることもあります。これは、各キャリアや、ネットワークまたは政府が定めた規定によるもので、リクエストを受け取らない場合もあるからです。

注釈

callbackurl パラメーターに関する注意点

  • このパラメータ(省略可能)が指定された場合は、キャリア・ネットワークからSMSの配信完了(DLR)の通知があったときに、XOXZOクラウドシステムが指定されたURLを呼び出します。

  • XOXZO cloud call the URL with http POST method. Parameters of the callback is similar to "Check SMS status API". Please see SMSの配信状態を確認するAPI.

  • コールバックURLは http のステータス 200 で応答する必要があります。この応答をうけとるまで、最大10回まで呼び出しを繰り返します。

注釈

tags パラメーターに関する注意点

  • このパラメータ(省略可能)が指定された場合は、各API呼び出しにタグをつけることができます。このタグは、後から配信状態を確認するAPIをつかって読み出すことができます。

  • タグは、コンマで区切ることで複数付けられます。タグの前後の空白は取り除かれます。

注釈

track_link パラメーターに関する注意点

  • このパラメータ(省略可能)が指定された場合は、リンクトラッキングの機能が有効になります。 message に含まれる URL/ドメイン名の最初のものがプライベートな短縮URLに置き換えられ、ユーザーがモバイル端末上でリンクをクリックしたかどうかの情報を得られるようになります。この情報を得るには SMSの配信状態を確認するAPI を使います。

  • Additional credit will be deducted when this parameter is used. Please consult with the pricing information.

  • ショートリンクは、生成後90日で無効となります。

注釈

lt_callbackurl パラメーターに関する注意点

  • このパラメータ(省略可能)が指定された場合は、ユーザーがリンクトラッキング用ショートリンクをクリックしたとき、XOXZOクラウドシステムが指定されたURLを呼び出します。

  • XOXZOクラウドシステムはこのURLをPOSTメソッドで呼び出します。パラメータは "SMSの配信状態を確認するAPI" と似ており link_tracking をキーとして、リンクがいつアクセスされたかの情報を含んでいます。詳細は check-sms-" "status-label を参照してください。

  • コールバックURLは http のステータス 200 で応答する必要があります。この応答をうけとるまで、最大10回まで呼び出しを繰り返します。

  • このURLは、ショートリンクが最初にクリックされたとき1回のみ呼び出されます。

警告

リンクトラッキングが正しく動作するためには、 message 中のリンクの前後に少なくとも1つのASCII空白文字(0x20)がなければいけません。

パラメータに関する注意点や警告については、前のセクションである テンプレートSMSの送信 を参照してください。

下記は、CURLを使ったリクエストの例です。

curl -u <SID>:<AUTH_TOKEN> --data-urlencode 'recipient=<recipient>' --data-urlencode 'sender=<sender>' --data-urlencode 'message=<message>' https://api.xoxzo.com/sms/messages/

The <message> in the above example must be encoded in UTF-8 before sending.

レスポンスは、JSON構造となり、ステータスコード HTTP 201 CREATED にて返されます。

HTTP/1.1 201 CREATED
Content-Type: application/json

[
    {
        "msgid": "<msgid>"
    }
]

レスポンスデータ

名称

詳細

msgid

このメッセージ固有のメッセージIDになります。

If there's invalid parameters given, HTTP 400 BAD REQUEST status code will be returned. For example, if the message parameter is missing, the HTTP response should be like this:

HTTP/1.1 400 BAD REQUEST
Content-Type: application/json

{
    "message": [
        "This field is required."
    ]
}

ちなみに

It's faster to actually try some test code againts the API to see immediate results. Signing up takes only a few minutes and it's free

SMSの配信状態を確認するAPI

To check a message status, make a GET request to the endpoint followed by <msgid>

テンプレートSMSの場合:

GET /sms/templates/<id>/messages/<msgid>/

フリーフォームSMSの場合:

GET /sms/messages/<msgid>/

Every time you send a SMS, you will get a response which contains <msgid>. Use this <msgid> to check SMS status.

下記は、cURLを使ったリクエストの例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/templates/<templateid>/messages/<msgid>/
curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/<msgid>/

The response would be a JSON structure, returned with HTTP 200 OK status code:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "tags": [
        "tag1",
        "tag2"
    ],
    "url": "https://api.xoxzo.com/sms/messages/<msgid>/",
    "recipient": "<recipient>",
    "parts": 1,
    "cost": 10,
    "sent_time": "2019-03-05 00:37:44",
    "sender": "<sender>",
    "msgid": "<msgid>",
    "status": "DELIVERED"
}

Below is a sample of a response for a message that failed to be delivered, returned with a HTTP 200 OK status code:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "FAIL",
    "sent_time": "2015-09-13 12:47:53",
    "cost": 10,
    "msgid": "<msgid>",
    "parts": 1,
    "recipient": "<recipient>",
    "sender": "<sender>",
    "url": "https://api.xoxzo.com/sms/messages/<msgid>/"
}

レスポンスデータ

名称

詳細

status

送信されたメッセージの状態です。

cost

このメッセージ送信で消費したクレジットです。

msgid

このメッセージ固有のメッセージIDになります。

recipient

このメッセージの受信者です。

sender

設定された送信元です。

sent_time

送信時間が、UTC(協定世界時)にて返されます。

url

このメッセージステータスのURLです。

tags

このメッセージに付けられたタグです。タグが無いときは空のリスト[]になります。

track_link が有効になっている場合は、以下の情報も含まれます。

名称

キー

詳細

link_tracking

accessed

リンクに既にアクセスが有った場合は true. そうでない場合は false.

accessed_on

リンクが最初にアクセスされた時刻。

link

メッセージに元々含まれていたリンク。

shortlink

短縮化されたリンク。

レスポンスの例

{
    "cost": 15.0,
    "link_tracking": {
        "accessed": false,
        "accessed_on": "",
        "link": "http://www.example.com",
        "shortlink": "https://xoz.so/dbNL4"
    },
    "msgid": "oxgyFO6tfwYkHLIMbURrz5smCv9QT423",
    "recipient": "+818012345678",
    "parts": 1,
    "sender": "XOXZO",
    "sent_time": "2020-10-09 02:37:47",
    "status": "DELIVERED",
    "tags": [],
    "url": "https://api.xoxzo.com/sms/messages/oxgyFO6tfwYkHLIMbURrz5smCv9QT423/"
}

送信されたSMSのリストを取得するAPI

You can pull a list of sent messages by making a GET request to the endpoint.

テンプレートSMSの場合:

GET /sms/templates/<id>/messages/

フリーフォームSMSの場合:

GET /sms/messages/

The sent messages results will be sorted based on their newest sent_time. This API is useful for creating logs.

You can also pull sent messages for a specified sent date using sent_date parameter followed by an operator and a date.

名称

詳細

必須

sent_date

YYYY-mm-ddのフォーマットで、メッセージ送信されたUTCベースの日付。過去90日間以内でなければならない。

以下の演算子を利用してある期間のメッセージのリスト取得することができます。

演算子

名称

<=

以下

<

より小さい

=

等しい

>

より大きい

>=

以上

注釈

  • 一度に取得できるメッセージの数は最大30,000までです。

  • 過去90日間のメッセージしか取得できません。

  • 本APIは一度に1つの演算子と1つの日付しか対応していません。

  • 日付はすべてUTC

警告

  • This API call is limited to use up to 1 request/hour.

レスポンスの例

The response data returned by the API is equivalent to what you get from the Check SMS status API

送信したメッセージのリストを取得します。

以下はcURLを使ってメッセージを取得する例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/

The response would be a JSON structure, returned with HTTP 200 OK status code:

HTTP/1.0 200 OK
Content-Type: application/json

[
    {
       "cost": 0,
       "msgid": "<msgid>",
       "recipient": "<recipient>",
       "sender": "<sender>",
       "parts": 1,
       "sent_time": null,
       "status": "QUEUED",
       "url": "https://api.xoxzo.com/sms/messages/<msgid>"
    },
    {
       "cost": 10,
       "msgid": "<msgid>",
       "recipient": "<recipient>",
       "parts": 1,
       "sender": "<sender>",
       "sent_time": "2016-03-04 00:00:00",
       "status": "DELIVERED",
       "url": "https://api.xoxzo.com/sms/messages/<msgid>"
    },
]

指定の日付のメッセージだけ取得します。

以下はcURLを使って2016年3月4日に送信したメッセージを取得しようとする例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/?sent_date=2016-03-04

The response would be a JSON structure, returned with HTTP 200 OK status code:

HTTP/1.0 200 OK
Content-Type: application/json

[
    {
       "cost": 10,
       "msgid": "<msgid>",
       "recipient": "<recipient>",
       "parts": 1,
       "sender": "<sender>",
       "sent_time": "2016-03-04 10:15:00",
       "status": "DELIVERED",
       "url": "https://api.xoxzo.com/sms/messages/<msgid>"
    },
    {
       "cost": 10,
       "msgid": "<msgid>",
       "recipient": "<recipient>",
       "parts": 1,
       "sender": "<sender>",
       "sent_time": "2016-03-04 00:00:00",
       "status": "DELIVERED",
       "url": "https://api.xoxzo.com/sms/messages/<msgid>"
    },
]

以下はcURLを使って2016年3月4日とその以前送信したメッセージを取得しようとする例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/?sent_date<=2016-03-04

The response would be a JSON structure, returned with HTTP 200 OK status code:

HTTP/1.0 200 OK
Content-Type: application/json

[
    {
       "cost": 10,
       "msgid": "<msgid>",
       "recipient": "<recipient>",
       "parts": 1,
       "sender": "<sender>",
       "sent_time": "2016-03-04 10:15:00",
       "status": "DELIVERED",
       "url": "https://api.xoxzo.com/sms/messages/<msgid>"
    },
    {
       "cost": 10,
       "msgid": "<msgid>",
       "recipient": "<recipient>",
       "parts": 1,
       "sender": "<sender>",
       "sent_time": "2016-03-04 00:00:00",
       "status": "DELIVERED",
       "url": "https://api.xoxzo.com/sms/messages/<msgid>"
    },
    {
       "cost": 10,
       "msgid": "<msgid>",
       "recipient": "<recipient>",
       "parts": 1,
       "sender": "<sender>",
       "sent_time": "2016-02-15 11:30:47",
       "status": "DELIVERED",
       "url": "https://api.xoxzo.com/sms/messages/<msgid>"
    },
]

指定された日付にメッセージがありません

If there's no sent messages on specified date, empty list with HTTP 200 OK status code will be returned.

以下はcURLを使って2016年1月30日に送信したメッセージを取得しようとする例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/?sent_date=2016-01-30

Since there's no message sent on 30 January 2016, the response would an empty list returned with HTTP 200 OK status code:

HTTP/1.0 200 OK
Content-Type: application/json

[]

不正リクエストの例

If the specified date is in invalid format, HTTP 400 BAD REQUEST status code will be returned.

以下はcURLを使って不正な日付の値でメッセージを取得しようとする例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/?sent_date=2016-02-30

Since 30 February 2016 is invalid date, HTTP 400 BAD REQUEST status code will be returned explaining that the sent_date format is invalid:

HTTP/1.0 400 Bad Request
Content-Type: application/json

{
    "sent_date": [
        "Invalid sent_date format"
    ]
}

If the specified date is more than 90 days ago, HTTP 400 BAD REQUEST status code will be returned.

以下はcURLを使って過去90日間よりも古いでメッセージを取得しようとする例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/?sent_date=2015-02-28

Since 28 February 2015 is more than 90 days ago, HTTP 400 BAD REQUEST status code will be returned asking for a valid sent_date:

HTTP/1.0 400 Bad Request
Content-Type: application/json

{
    "sent_date": [
        "Invalid sent_date"
    ]
}

If the parameter is incorrectly specified, HTTP 400 BAD REQUEST status code will be returned.

以下はcURLを使って不正なパラメータでメッセージを取得しようとする例です:

curl -u <SID>:<AUTH_TOKEN> https://api.xoxzo.com/sms/messages/?sent_data=2016-02-28

Since sent_data is not a correct parameter, HTTP 400 BAD REQUEST status code will be returned asking for sent_date parameter:

HTTP/1.0 400 Bad Request
Content-Type: application/json

{
    "sent_date": [
        "This field is required"
    ]
}

よくあるメッセージ配信ステータス

This is a list of statuses that you can find in the status data:

メッセージステータス

詳細

QUEUED

メッセージは配信待ち

DELIVERED

メッセージの配信成功

DELIVERING

メッセージの配信中

FAIL

メッセージの配信失敗

エラー応答

APIは、無効なリクエストや不正アクセスに対して、標準のHTTPステータスコードを返します。

よくあるエラー:

ステータスコード

意味

400

不正なリクエスト。リクエストを処理できませんでした。

401

認証エラー。認証に失敗しました。

403

アクセス拒否。アカウントはリクエストされた機能へのアクセス権を持っていません。

404

未検出。リクエストされたリソースは存在しません。

422

処理できないエンティティ。検証に失敗しました。

検証エラーの例:

{
  "variables": {
    "code": [
      "This field is required."
    ]
  }
}