
AWS End User Messaging SMSで日本語メッセージを送る場合の料金を整理してみた
はじめに
AWS End User Messaging SMSでメッセージを送信する場合、1回の送信リクエストや受信者端末上で1通に見えるメッセージ数ではなく、本文の長さと文字種によって決まるメッセージパート数をもとに課金されます。
特に日本語を含むSMSでは、英数字のみのSMSと比べて1パートに入る文字数が少なくなります。そのため、受信者の端末上では1通に見えても、文字数によっては2パート、3パートとして課金される点に注意が必要です。
本記事では、日本向けに日本語SMSを送る前提で、文字数と料金の関係を整理します。
なお、SMSの単価は国や通信事業者によって異なり、変更される可能性があります。AWS公式料金ページでも、SMS料金は定期的に変わると案内されています。
The price for sending SMS messages varies between countries and regions, and in some cases, between carriers in the same country or region. These prices change regularly.
日本語訳:SMSメッセージの送信料金は国やリージョンによって異なり、場合によっては同じ国やリージョン内のキャリアによっても異なります。これらの料金は定期的に変更されます。
前提
今回の前提は以下のとおりです。
- 送信先は日本
- メッセージ本文は日本語を含む
AWSの料金ページでJapanを選択すると、執筆時点では以下のように表示されていました。
Network/ HNI Transactional SMS Promotional SMS
All Networks $0.07451 $0.07451
本記事では、日本向けのSMS料金として確認した 0.07451 USD/メッセージパート を前提に計算します。
SMSの文字数は140バイトを基準に決まる
AWS公式ドキュメントでは、1つのSMSメッセージには最大140バイトの情報を含められると説明されています。
A single SMS message can contain up to 140 bytes of information. The number of characters you can include in a single SMS message depends on the type of characters the message contains.
日本語訳:1つのSMSメッセージには、最大140バイトの情報を含めることができます。1つのSMSメッセージに含められる文字数は、メッセージに含まれる文字の種類によって異なります。
この140バイトの中に何文字入るかは、メッセージで使われる文字種によって変わります。
大きく分けると、以下の2パターンです。
| 文字種 | 1パートに収まる文字数 |
|---|---|
| GSM 03.38文字のみ | 最大160文字 |
| GSM 03.38以外の文字を含む | 最大70文字 |
日本語のひらがな、カタカナ、漢字はGSM 03.38文字ではありません。
そのため、日本語を含むSMSは基本的に non-GSM文字を含むメッセージ として扱われ、1パートに収まる文字数は 70文字まで になります。
日本語SMSは70文字以内なら1パート
日本語SMSの場合、70文字以内であれば1パートとして送信されます。
この場合の料金は、以下のとおりです。
0.07451 USD × 1パート = 0.07451 USD
例えば、以下のような短い認証コード通知であれば、1パートに収まります。
認証コードは123456です。10分以内に入力してください。
このように、認証コードや短い通知であれば70文字以内に収めやすいため、料金も読みやすくなります。
71文字を超えると分割される
日本語SMSが70文字を超えると、メッセージは複数のパートに分割されます。
ここで注意が必要なのは、分割時は1パートあたり70文字ではなく、67文字になる点です。
AWS公式ドキュメントでは、分割されたメッセージでは各パートに追加情報が含まれるため、GSM 03.38文字のみのメッセージは153文字、GSM以外の文字を含むメッセージは67文字に減ると説明されています。
As a result, the number of characters in each message part is reduced to 153 for messages that only contain GSM 03.38 characters, or 67 for messages that contain other characters.
日本語訳:その結果、各メッセージパートに含められる文字数は、GSM 03.38文字のみを含むメッセージでは153文字、その他の文字を含むメッセージでは67文字に減少します。
つまり、日本語SMSでは以下のように考えます。
- 70文字以内は1パート
- 71文字以上は複数パートに分割
- 分割時は1パートあたり67文字
分割された時点で、各パートの上限は67文字になります。そのため、2パートで収まるのは以下です。
67文字 × 2パート = 134文字
日本語SMSのパート数は、見積もり上は以下のように考えると分かりやすいです。
70文字以内の場合
1パート
71文字以上の場合
ceil(文字数 ÷ 67)
また、複数のメッセージパートを含むメッセージを送信した場合、メッセージに含まれるパート数に対して課金されます。
When you send a message that contains more than one message parts, you're charged for the number of message parts contained in the message.
日本語訳:複数のメッセージパートを含むメッセージを送信する場合、メッセージに含まれるメッセージパート数に対して課金されます。
日本語SMSの文字数と料金の早見表
日本語SMSを送る場合の文字数、メッセージパート数、料金を整理すると以下のとおりです。
単価は 0.07451 USD/メッセージパート で計算しています。
| 日本語文字数 | メッセージパート数 | 料金 |
|---|---|---|
| 1〜70文字 | 1パート | 0.07451 USD |
| 71〜134文字 | 2パート | 0.14902 USD |
| 135〜201文字 | 3パート | 0.22353 USD |
| 202〜268文字 | 4パート | 0.29804 USD |
| 269〜335文字 | 5パート | 0.37255 USD |
| 336〜402文字 | 6パート | 0.44706 USD |
| 403〜469文字 | 7パート | 0.52157 USD |
| 470〜536文字 | 8パート | 0.59608 USD |
| 537〜603文字 | 9パート | 0.67059 USD |
| 604〜630文字 | 10パート | 0.74510 USD |
| 631文字以上 | 送信失敗 | Invalid Message Exception |
ここでポイントになるのが、630文字を9パートとは見積もらない点です。
分割時は1パートあたり67文字になるため、9パートで収まる文字数は以下です。
67文字 × 9パート = 603文字
そのため、604文字以上630文字以下の日本語SMSは10パートになります。
実際に、603文字、604文字、630文字の日本語メッセージを送信し、メッセージパート数を確認したところ、以下のようになりました。
- 603文字:9パート
- 604文字:10パート
- 630文字:10パート

603文字の場合
また、配信ログの delivery.numberOfMessageParts からも、送信されたメッセージパート数を確認できます。

delivery.numberOfMessageParts が 10 の場合
AWS公式ドキュメントでは、non-GSM文字の最大サポートサイズは630文字と記載されています。一方、分割時は1パートあたり67文字となるため、603文字を超える604〜630文字は10パートとして扱われます。
最大文字数は630文字
AWS公式ドキュメントでは、サポートされる最大サイズはGSM文字の場合1530文字、non-GSM文字の場合630文字と記載されています。
The maximum supported size of any message is 1530 GSM characters or 630 non-GSM characters. If the message size is greater than the supported size, the message will fail and AWS End User Messaging SMS will return an Invalid Message Exception.
日本語訳:メッセージの最大サポートサイズは、GSM文字の場合は1530文字、non-GSM文字の場合は630文字です。メッセージサイズがサポートされているサイズを超えると、メッセージは失敗し、AWS End User Messaging SMSはInvalid Message Exceptionを返します。
そのため、日本語SMSの最大文字数は 630文字 です。
630文字を超えた場合、送信は失敗し、AWS End User Messaging SMSは Invalid Message Exception を返します。
英数字だけのメッセージでも注意が必要
日本向けSMSであっても、本文がGSM 03.38文字だけで構成されている場合は、1パートあたり最大160文字まで送信できます。
ただし、本文にGSM 03.38以外の文字が1文字でも含まれると、メッセージ全体がnon-GSM扱いになります。
例えば、英語の文章でも以下のような文字が含まれると注意が必要です。
- 全角文字
- 日本語
- 一部の特殊記号
- Wordなどで自動変換される閉じシングルクォート
AWS公式ドキュメントでも、通常のアポストロフィ ' ではなく、閉じシングルクォート ’ が含まれることで、GSM外文字として扱われる例が紹介されています。
In this example, the character is a closing single quote (’), which is a different character from a regular apostrophe (').
日本語訳:この例では、その文字は閉じシングルクォート(’)であり、通常のアポストロフィ(')とは異なる文字です。
そのため、SMS料金を見積もる場合は、本文にGSM 03.38以外の文字が含まれていないか確認し、GSM扱いかnon-GSM扱いかを判断する必要があります。
まとめ
AWS End User Messaging SMSで日本語SMSを送る場合、料金は メッセージパート単位 で課金されます。
日本語SMSは基本的にnon-GSM扱いとなり、70文字以内は1パート、71文字以上は67文字ごとに分割されます。今回確認した日本向けSMS単価 0.07451 USD/メッセージパート の場合、70文字以内は 0.07451 USD、71〜134文字は 0.14902 USD です。
最大文字数は630文字で、631文字以上は Invalid Message Exception により送信失敗します。
参考







