Amazon Pinpointを使ったSMS送信をおこなってみた
いわさです。
Amazon Pinpointのアップデートが出ていたので試したかったのですが、意外にもSMS送信チャネルに関する記事がまだ無かったことに気づきました。
Amazon SNSと似ていますし簡単ではありますが、本日はSMS送信方法について記事にしてみました。
プロジェクトでSMSチャネルを有効化する
Pinpointではまずプロジェクトを作成し、その中で必要なチャネルを有効化していきます。
SMSを送信するために、SMSチャネルをまず有効化する必要があります。
支出管理されているように見えるので一見使えそうですが、上記はまだ有効化されていない状態です。
設定の編集から「このプロジェクトのSMSチャネルを有効にする」を選択して保存してください。
サンドボックス
SMS送信機能はサンドボックスの概念があります。
このサンドボックスはSNSのSMS送信と共通で、リージョンごとにサンドボックスステータスが存在しています。
SMSのサンドボックスの有効/無効はSNSと共通で、どちらかで追加した検証済み電話番号は別のサービスでも検証済み電話番号として使うことが可能です。
購入した電話番号についても同様で、PinpointのバックエンドでSNSを使っているような印象を受けました。
実体がどうなっているのかまだよく調べていませんが。情報お持ちの方は教えて頂けると嬉しいです。
SMS送信
本日は単一送信を行います。SNSとほとんど同じ流れです。
セグメントやキャンペーンを使うとAmazon Pinpointの旨みが出てくるのだろうなと理解していますが、本日はシンプルにAPIレベルでの単一送信を行いますね。
テスト機能を使ってマネジメントコンソールから送信
マネジメントコンソールにテスト送信機能があり、APIなど用意せずに送信を行うことが出来ます。
以下の検証ではサンドボックス外のアカウントを使っています。
Sender IDオプション無しだと、発信者がNOTICE
となりました。
Sender IDを指定することが可能なので、iwasa-test
と指定してみましょう。
受信側の表示が変わりましたね。
ちなみに、差出人に返信出来ない状態で受信されていますが、Pinpointの場合は双方向SMSという機能もあります。
これもSNSと比較する際のメリットになる部分ですが、これは今度また紹介したいと思います。
boto3を使って送信
次にプログラムを使って送信してみます。
Pinpointメッセージは共通のSendMessagesコマンド/APIでメッセージ送信が可能です。
メッセージのリクエスト内で、どのチャネルでどこへどういうメッセージを送信するのかを指定します。
ここでは、AWSドキュメントに記載されている送信サンプルをベースにboto3ドキュメントを参考に、プロファイルと送信者IDを指定するよう変更して送信してみました。
import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) def send_sms_message( pinpoint_client, app_id, origination_number, destination_number, message, message_type): try: response = pinpoint_client.send_messages( ApplicationId=app_id, MessageRequest={ 'Addresses': {destination_number: {'ChannelType': 'SMS'}}, 'MessageConfiguration': { 'SMSMessage': { 'Body': message, 'MessageType': message_type, 'OriginationNumber': origination_number, 'SenderId': 'hoge-iwasa'}}}) except ClientError: logger.exception("Couldn't send message.") raise else: return response['MessageResponse']['Result'][destination_number]['MessageId'] session = boto3.Session(profile_name="hoge") message_id = send_sms_message(session.client('pinpoint'), "1bcc2ed731064d5f961243549dd7fc16", "+1xxxxxxxxxx", "+81xxxxxxxxxxx", "piyopiyopiyopiyopiyo", "TRANSACTIONAL") print(message_id)
送信出来ました。
ちなみに送信先の国に応じてダイヤルコードを付与する必要があるのと、使える機能使えない機能がかなり違っています。
日本は色々サポートされていますね。詳細は以下をご参照ください。
まとめ
本日はAmazon Pinpointを使って単純なSMS送信をしてみました。
今回のように単純にSMS送信に使うだけだとSNSとの棲み分けが難しくてメリットを感じにくいかもしれません。
ただ、Pinpointのドキュメントを色々と目を通してみたところ、マルチチャネルやセグメント・キャンペーンの機能などのPinpointマネージドな機能を活用出来ると、相当おもしろいかもしれません。
最近アップデートされた機能を使いたかったのですが、それは置いておいて、マルチチャネルや双方向SMSなどPinpointならではの主要機能を次回使ってみたいと思います。