AmazonSNSを使用してkotlinからSMSを送信する


Photo by Austin Distel on Unsplash

スマホへのSMSの送信は以前は国内のサービスを使用する必要がありましたが、数年前からAWSのAmazon SNSでも対応しているようです。
AWSと別にサービスを契約せずに済み導入時の手間が省けるのはありがたいものです。

JavaでSMSを送信するサンプルコードは多いですがkotlinのサンプルコードは少ないので書き留めておきます。

エンジニアのUさんが調べてコードを書いてくれたのでこれをパクってブログ用に整形します。

まずはbuild.gradleにAWS SDKの依存関係を追加します。

dependencies {
    implementation "com.amazonaws:aws-java-sdk-bom:1.11.683"
    implementation "com.amazonaws:aws-java-sdk-sns:1.11.683"
}

importは以下の2つが必要です。

import com.amazonaws.auth.*
import com.amazonaws.services.*

AmazonSNSClientを初期化します。
追加で認証情報やリージョンを指定することもできます。

val snsClient = AmazonSNSClient.builder()

送信先電話番号とメッセージを指定してpublishで送信します。

val request = PublishRequest()
request.phoneNumber = targetPhoneFix
request.message = message

snsClient.publish(request)

関数にするとこんな具合です。
kotlinのコードはJavaに比べると簡潔にかけるので見やすくて良いですね。

fun sendSms(region: String, accessKey: String, secretKey: String, targetPhone: String, message: String) {
    val targetPhoneFix =
        if (targetPhone.startsWith("0")) "81" + targetPhone.substring(1)
        else targetPhone

    val credentialsProvider = AWSStaticCredentialsProvider(BasicAWSCredentials(accessKey, secretKey))

    val snsClient = AmazonSNSClient.builder()
        .withCredentials(credentialsProvider)
        .withRegion(region)
        .build()

    val request = PublishRequest()
    request.phoneNumber = targetPhoneFix
    request.message = message

    snsClient.publish(request)
}

IAMアクセス権限

SMS送信にはIAMに以下の権限を付与する必要があります。
動作確認であれば、既存のAmazonSNSFullAccessポリシーを付与すれば送信できます

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "*"
        }
    ]
}

注意点

  • 初期状態では送信数に制限があるので本格運用するならAWSにリクエストを送って制限を解除してもらう必要があります。このへんは毎度ながら面倒です。
  • 国内のスマホの電話番号は通常090や080など0始まりですが、SMSを送信するには先頭の”0″を取り除いて先頭に81(国番号)を追加した番号を指定する必要があります。

参考

SMS メッセージの送信 – Amazon Simple Notification Service

関連記事

最近の記事 おすすめ記事
  1. 新人さん向けの品質についての読書会

  1. Deep learning勉強筆記3-機械学習の最も基本の概念

  2. 現役エンジニアがChatGPT、Copilotを使った所感

  3. KotlinとNull Safety

カテゴリー

アーカイブ

検索


TOP
TOP