はじめに
Amazon Pinpoint や Amazon SNS を使って SMS (ショートメッセージサービス) を送ると、携帯電話の電話番号を宛先にしてメッセージを送信できます。何も意識しないで、デフォルトのまま SMS を送信すると、日本だと基本的には送信元が NOTICE
と表示されます。
自分たちが提供しているサービスで、たとえばワンタイムパスワードを SMS で送りたいときに、NOTICE
と表示されるのはちょっと味気ないです。また、NOTICE
という表示名が他のサービスと被っていると、同じ画面の中に異なるサービスのメッセージが表示されるので、基本的には独自の表示名に変えたくなります。
このときに、Pinpoint や SNS では、大きく分けて 3 つの方法を使って送信元を指定できます。AWS Document にそれぞれの違いが詳細に書かれているのですが、一言で表すとこんな感じです。
- Sender ID の指定 : 送信元の表示名を追加料金なしに簡単に指定できるので、とてもお手軽です。お手軽な一方、任意な文字を指定できるので、悪い人によるなりすまりの危険があるデメリットもあります。
- ショートコードを取得 : 自分専用のショートコードを取得するので、なりすましの危険性を下げられます。一方、追加の料金がそこそこかかります。
- ロングコードを取得 : ショートコードと比べて、一定期間あたりの SMS 送信料が制限されています。また、追加の料金も発生します。
基本的には、お手軽な表示名設定の Sender ID か、追加のコストをかけて厳密に提供するショートコード、といった使い分けでしょうか。
なお、Sender ID を使った場合は、このように表示名を好きな文字にカスタマイズできます。
今回の手順では、Sender ID の設定方法をいくつかみていきましょう。
Pinpoint で SMS
Pinpoint では、20代、男性、ゲーム好き、といった特定の属性を持つユーザーに、最適なメッセージを届けるためのサービスです。特定の属性を持つユーザーに送りたいときは、キャンペーンという機能を利用します。ただ、今回はテスト用途なので、テストメッセージ機能で SMS の Sender ID 設定方法を確認したいと思います。基本的には、キャンペーンでも同じような設定方法です。
なお、Pinpoint では、日本に SMS を送るときに、Sender ID がサポートされている点が書かれています。
Pinpoint のぺージから、Test messaging メニューを選びます。そして、SMS と送信先電話番号を指定します。
送信したい電話番号が、090-1234-5678 だとすると、+819012345678
と入力すればよいです。
そして、メッセージ本文を入れ、Sender ID を指定して、Send message を押します。
すると、このように送信元の表示名を変更して受信することが出来ました。
Pinpoint の OTP で SMS
Pinpoint には、ワンタイムパスワードを生成してくれる機能があります。詳細は割愛しますが、もし自分たちのアプリケーションでワンタイムパスワードを利用する必要性が出てきた場合は、便利に利用できると思います。(認証認可の文脈だと、Cognito だったり他の認証系 SaaS も良い選択肢だと思います)
Pinpoint のワンタイムパスワードは、ざっくり何をしてくれるかというと、指定した携帯電話番号に、SMS でワンタイムパスワードを送ってくれます。また、ユーザーさんから入力してもらったワンタイムパスワードが正しいかを評価してくれます。
Pinpoint の OTP は、AWS CLI や REST API で送信できます。マネージメントコンソール上ではありません。
- OriginationIdentity : ここに文字列を入れることで、Sender ID として認識してくれます。今回は
MyService
と入れてみます。
指定するパラメータ詳細はこちら : https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-otp.html
aws pinpoint send-otp-message --application-id 4d1eda5192f94dde85217c395546718f --send-otp-message-request-parameters '{
"Channel": "SMS",
"BrandName": "MyBrand",
"CodeLength": 5,
"ValidityPeriod": 20,
"AllowedAttempts": 5,
"OriginationIdentity": "MyService",
"DestinationIdentity": "+819012345678",
"ReferenceId": "redid01",
"Language": "ja-JP"
}'
すると、携帯電話の SMS に、ワンタイムパスワードが送られてきます。
余談ですが、次のコマンドで、ユーザーから入力してもらったワンタイムパスワードの正当性を確認できます。
aws pinpoint verify-otp-message --application-id 4d1eda5192f94dde85217c395546718f --verify-otp-message-request-parameters '{
"DestinationIdentity": "+819012345678",
"ReferenceId": "redid01",
"Otp": "48271"
}'
Response の値です。true と返ってきますね。
{
"VerificationResponse": {
"Valid": true
}
}
なお、同じコマンドをもう一度実行すると、false に変わります。ワンタイムパスワードなので、1回しか使えないわけですね。
{
"VerificationResponse": {
"Valid": false
}
}
余談 : SNS で SMS
Amazon SNS でも Sender ID が利用できそうなのか、確認をしてみたいと思います。
SNS のページで、Publish test message を押します。
宛先の番号を入力します。
Sender ID に MyCompany03
と指定して、Publish message を押します。
検証した携帯電話では無事に表示されました。
まとめ
Sender ID を使った送信元表示の方法を確認しました。Pinpoint と SNS でも、この記事の検証環境だと想定通り表示されました。お手軽に表示名をカスタマイズできるので、まずはこのあたりから利用を開始してもいいかもしれません。より厳密に SMS を届けるためには、ショートコードなどを利用すると、なりすましの脅威軽減にも役にたつので、場合によってはこちらも検討しましょう。
参考URL
- Pinpoint で、日本の Sender ID がサポートされている旨がかかれている