
今回、AWSのSNSでテキストメッセージングを使った際に少しつまづいたので、まとめました。
そもそもAWS SNSとは?
まず、SNSが何かについて簡単に説明しておきましょう。
AWS SNSは、通知サービスの一つで、特定のイベントが発生した際にメッセージを送信するための機能を提供します。
例えば、アプリケーションがエラーを検知したとき、通知メールやSMSを送信したり、モバイルデバイスへのプッシュ通知を送ることができます。
SMS送信においては、TransactionalとPromotionalという2つのメッセージタイプを選べます。
それぞれに用途と制限があり、これが正しくないとエラーが発生する可能性があります。
AWSのSMS送信で「NOTICE」が表示される理由
まず、なぜAWSのSMS送信で「NOTICE」と表示されるのか、その理由を見ていきましょう。
デフォルト設定の影響
AWSのSNS (Simple Notification Service) を使ってSMSを送信すると、デフォルトでは送信元が「NOTICE」と表示されます。
これは設定をしていない場合、デフォルトでこの表示になります。
識別子としての役割
「NOTICE」という表示には、実は重要な役割があります。
これは、そのメッセージがAWSのSNSサービスを通じて送信されたことを示す識別子として機能してます。
規制への対応
世界中には様々な国や地域があり、それぞれにSMS送信に関する規制があります。
「NOTICE」という中立的な表示を使うことで、AWSはこれらの規制に広く対応しているようです。
送信者IDを設定する方法
「NOTICE」ではなく、自分の会社名やサービス名を表示したいので、送信者IDを設定します。
AWSコンソールでの設定
AWSコンソールにログインして、SNSのダッシュボードから送信者IDを設定できます。
ただし、この方法は全ての国や地域でサポートされているわけではないので注意が必要です。
APIを使った設定
プログラムから自動的に送信者IDを設定したい場合は、AWSのAPIを使うこともできます。
これなら、柔軟に送信者IDを変更できるので便利ですよ。
動的送信者IDの活用
状況に応じて送信者IDを変えたい場合は、動的送信者IDを使うのがおすすめです。
ただし、これも全ての国でサポートされているわけではないので、事前に確認が必要です。
送信者ID設定後にメッセージが届かない
さて、ここからが問題です。
送信者IDを設定したのに、メッセージが届かなくなってしまった...そんな経験はありませんか?
その原因と対策を見ていきましょう。
地域の制限を確認
まず最初に確認すべきは、送信先の国や地域での送信者IDの制限です。
例えば、日本を含む一部の国では、送信者IDがサポートされていない可能性があります。
こういった制限を知らずに設定してしまうと、メッセージが届かなくなる原因になります。
送信者IDの形式をチェック
送信者IDには、実は細かい制限があります。
通常、3〜11文字の英数字で、スペースを含まず、特殊文字はダッシュ(-)のみ使用可能です。
この制限に違反していると、メッセージが拒否される可能性が高いんです。
登録要件の確認
一部の国では、送信者IDを使用する前に規制機関や業界グループに事前登録する必要があります。
登録していない場合、メッセージがブロックされてしまうことがあります。
キャリアや配信経路の問題
送信者IDの表示や配信は、実はキャリアや配信経路に大きく依存しています。
一部のキャリアでは、特定の送信者IDを拒否したり、別の識別子に置き換えたりすることがあります。
これは、私たちにはコントロールできない部分なので、注意が必要です。
AWSのリージョン設定を確認
AWSを使用している場合、リージョン設定が適切でないと送信者IDが正しく表示されない可能性があります。
例えば、東京リージョン(ap-northeast-1)では送信者IDに対応していない可能性があるんです。
こういった細かい設定も、トラブルの原因になることがあります。
送信者ID問題の対策
問題の原因が分かったところで、具体的な対策を見ていきましょう。
送信先国のサポート状況確認
まずは、送信先の国で送信者IDがサポートされているかどうかを確認しましょう。
AWSのドキュメントには、国ごとの対応状況が詳しく書かれています。
これを確認するだけで、多くの問題を事前に防ぐことができますよ。
送信者IDの形式を正しく設定
送信者IDの形式が正しいかどうか、もう一度確認してみましょう。
英数字3〜11文字、スペースなし、特殊文字はダッシュ(-)のみ...これらのルールを守っているか、チェックしてみてください。
必要に応じて送信者IDを登録
送信先の国で登録が必要な場合は、面倒がらずに登録手続きを行いましょう。
これは、メッセージの確実な配信のために必要不可欠なステップなんです。
専用電話番号の使用を検討
送信者IDの使用が難しい場合は、専用の電話番号(ショートコードやロングコード)を使用することを検討してみましょう。
これなら、多くの国で問題なく使用できる可能性が高いです。
AWSサポートへの相談
どうしても問題が解決しない場合は、AWSサポートに相談してみるのも良いでしょう。
彼らは豊富な経験を持っているので、具体的な問題の原因を特定してくれるかもしれません。
ログ上で「Invalid parameters」のエラー
「Invalid parameters」などのエラーが発生してしまいました。
このエラーは、送信リクエストに含まれる何らかのパラメータが不正な場合に発生します。
では、何が原因でエラーが出るのか?いくつかの要因が考えられます。
電話番号のフォーマットが不正
電話番号の形式が間違っていると、SNSはメッセージを送信できません。
AWS SNSで使用する電話番号はE.164形式という国際標準の形式に従っている必要があります。
例えば、日本の場合、電話番号は+81XXXXXXXXXXという形式にする必要があります。
もし、電話番号がE.164形式になっていないと、「Invalid parameters」エラーが発生します。
日本の電話番号の場合、先頭の0を除いて、+81を付けることが重要です。
メッセージタイプの誤設定
AWS SNSでは、SMSを送信する際に、メッセージタイプとしてTransactionalかPromotionalのどちらかを選ぶ必要があります。
ですが、Promotionalタイプは国や通信キャリアによっては制限されていることがあり、
これがエラーの原因になることがあります。
例えば、日本では商業的なメッセージ(Promotional)を送信する場合、
通信キャリアがこれをブロックすることがあります。
そのため、商業的でないメッセージの場合は、Transactionalタイプを選ぶことをお勧めします。
TransactionalとPromotionalの違いとは?
Transactional SMSとは?
Transactional SMSは、重要な通知や認証コードの送信など、
ユーザーにとって緊急性や重要性が高いメッセージに使用されます。
日本では、このタイプのメッセージはほとんどの通信キャリアで問題なく送信できますが、
送信者IDが表示されない場合があります。
もし送信者IDが必須であれば、別の方法を考える必要があるかもしれません。
Promotional SMSとは?
Promotional SMSは、広告やマーケティングメッセージを送信するためのタイプです。
特定のプロモーションやキャンペーン情報をユーザーに知らせる際に使用されます。
ただし、日本では、このタイプのメッセージが制限されている場合があり、特定のキャリアでは送信できないことがあります。
そのため、「Invalid parameters」エラーが発生する場合があります。
送信者IDに関する問題
送信者IDは、SMSの送信者として表示される名前です。
これは主にPromotional SMSで使用され、ユーザーがどの企業からのメッセージかを即座に認識できるようにするためのものです。
しかし、送信者IDの長さやフォーマットに制限があります。
- 送信者IDは、11文字以内の英数字である必要があります。
- スペースや特殊文字は使用できません。
送信者IDがこの制約を超えている場合、通信キャリアがメッセージを拒否し、エラーが発生することがあります。
電話番号の形式は正しいか?
AWS SNSに電話番号を渡す際は、必ずE.164形式を使用しなければなりません。
E.164形式とは、国際電話番号の規格であり、国際電話番号の前に「+」を付け、その後に国番号と電話番号を続けます。
例えば、日本の電話番号「090-1234-5678」は+819012345678として渡す必要があります。
E.164形式の確認手順
- 電話番号が
+で始まっていることを確認してください。 - 日本の電話番号の場合、
+81(国番号)を使い、電話番号の先頭の「0」を除いてください。 - 他国の番号の場合も同様に、正しい国番号を付けてください。
メッセージの内容と長さに注意
SMSのメッセージ内容にも制約があります。
ほとんどの国では、1つのSMSメッセージの文字数は160文字以内です。
これを超えるとメッセージが分割されるか、送信が失敗する場合があります。
また、特殊文字や絵文字が含まれていると、文字エンコードの問題でエラーが発生することがあります。
- 絵文字や特殊文字が含まれていないか確認してください。
- メッセージが長すぎないかチェックしてください。160文字を超える場合、メッセージを分割して送信することを検討してください。
AWS SNSのリージョン設定の確認
AWS SNSはリージョンによってSMS送信のサポート状況が異なります。
たとえば、日本でSMSを送信する場合は、ap-northeast-1(東京リージョン)を使用することが推奨されます。
SNSを他のリージョンで設定していると、送信ができなかったり、エラーが発生することがあります。
リージョンの設定方法
- AWSコンソールで、SNSのリージョンをap-northeast-1に設定していることを確認してください。
- Lambdaや他のサービスからSNSを呼び出す際も、このリージョンを指定してください。
AWSのIAMロールと権限に問題はないか?
SNSからSMSを送信する際、適切なIAMロールと権限が設定されていない場合、送信がブロックされることがあります。
特に、SNSがCloudWatchログにメッセージステータスを記録するための権限が不足している場合、問題が発生します。
IAMポリシーの設定例
以下は、SNSが必要とする権限を持つIAMポリシーの例です。このポリシーをLambda関数や他のサービスにアタッチして、SNSが正しく動作するようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish",
"sns:SetSMSAttributes",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}エラーログを使った問題解決
SNSのエラーが発生した場合、まずはCloudWatchでログを確認することが重要です。
CloudWatchにSNSの送信ステータスやエラーが記録されるので、そこから原因を特定することができます。
特に「Invalid parameters」というエラーが出た場合、提供したパラメータのどれが無効かを確認する手がかりが得られます。
代替手段の検討
送信者IDの使用が難しい場合は、専用電話番号の使用など、代替手段を検討しましょう。
何か質問や困ったことがあれば、遠慮なくコメントしてください!