アプリケーション開発では、登録時の確認コード、注文更新の通知、プロモーションメッセージなど、ユーザーに SMS を送信する場面がよくあります。このドキュメントでは、SDK を統合し、Alibaba Cloud Short Message Service (SMS) API を呼び出すことで、SMS 送信を迅速、安全、かつ確実に自動化する方法について説明します。
アーキテクチャ
SMS API を呼び出すエンドツーエンドのフローには、ご利用のアプリケーション、Alibaba Cloud SDK、Resource Access Management (RAM)、および SMS が関わります。
プロセスは次のとおりです。ご利用のアプリケーションに Alibaba Cloud SDK を統合し、RAM を使用して SMS 権限を持つ認証情報をご利用のアプリケーションに割り当てます。ご利用のアプリケーションはこれらの認証情報を使用して SMS API を呼び出します。Alibaba Cloud がリクエストを認証し、コンプライアンスを検証した後、メッセージは Alibaba Cloud SMS ゲートウェイに渡され、キャリアネットワークを介してユーザーの携帯電話に SMS が配信されます。
このガイドでは、SendMessageToGlobe 操作を例に、SMS API を呼び出す方法を説明します。このガイドで学習する内容は次のとおりです。
API の呼び出しに慣れている場合は、直接 API リファレンス を参照し、必要な操作を呼び出すことができます。
API の呼び出しには SDK の使用を推奨します。独自のリクエストを構築する場合は、「V3 リクエストボディと署名」をご参照ください。
事前準備
項目 | 説明 | リファレンス |
ユーザー権限 | RAM コンソールで、RAM ユーザー名をクリックして権限を表示します。API を呼び出す RAM ユーザーに必要な SMS 関連の権限が付与されていることを確認してください:
| |
| RAM コンソールで、RAM ユーザーの名前をクリックします。ユーザー詳細ページで、AccessKey タブをクリックして AccessKey ID を表示します。 | |
| AccessKey Secret は作成時にのみ表示されます。紛失した場合は、新しい AccessKey ペアを作成してください。 | |
アカウント残高またはパッケージクォータ | アカウント残高またはパッケージクォータが十分であることを確認してください。[リソースパッケージ統計] ページでパッケージクォータを確認するか、[課金管理] コンソールでアカウント残高を確認できます。 |
認証情報の設定
ステップ 1:RAM ユーザーの作成と権限付与
ルートアカウントは完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用してください。詳細については、「概要」をご参照ください。
-
RAM ユーザーの作成: [ユーザーの作成] ページに移動します。 必須情報を指定し、アクセス設定 に 永久 AccessKey の使用 を選択し、次に はい をクリックします。 後で使用するために AccessKey を保存します。
-
RAM ユーザーに権限を付与する: [ユーザー] ページに移動します。作成した RAM ユーザーを見つけ、操作 列の ポリシーのアタッチ をクリックします。ポリシー 検索ボックスに AliyunDysmsFullAccess と入力してポリシーを選択し、権限を付与 をクリックします。
-
AliyunDysmsFullAccess:SMS サービスを管理するための完全な権限を付与します。
-
AliyunDysmsReadOnlyAccess:SMS サービスにアクセスするための読み取り専用権限を付与します。
-
カスタムポリシーを作成するには、「RAM 認可」をご参照ください。
ステップ 2:アクセス認証情報の設定
AccessKey ペアを環境変数に保存します。Linux、macOS、Windows で環境変数を設定する。
-
AccessKey ペアをハードコーディングしないでください。環境変数から取得してください。
-
サンプルコードでは、環境変数
ALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRETを使用します。
ステップ 3:環境変数の設定
Windows
Windows では、システムのプロパティ、CMD、または PowerShell を使用して環境変数を設定できます。
システムのプロパティ
この方法では、永続的な環境変数を設定します。
システム変数を変更するには、管理者権限が必要です。
環境変数の変更は、実行中のアプリケーションには影響しません。新しい変数設定を適用するには、開いているコマンドラインインターフェイス、IDE、またはその他のアプリケーションを再起動する必要があります。
Windows デスクトップで、
Win+Qを押します。検索ボックスに「システムの環境変数の編集」と入力し、それを選択して [システムのプロパティ] ウィンドウを開きます。[システムのプロパティ] ウィンドウで、[環境変数] をクリックします。[システム環境変数] セクションで、[新規] をクリックします。[変数名] を
ALIBABA_CLOUD_ACCESS_KEY_IDに、[変数値] をご利用の AccessKey ID に設定します。この手順をALIBABA_CLOUD_ACCESS_KEY_SECRETでも繰り返します。3 つのウィンドウすべてで [OK] をクリックして設定を保存し、閉じます。
CMD または Windows PowerShell ウィンドウを開き、次のコマンドを実行して環境変数が設定されていることを確認します。
CMD コマンド:
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Microsoft Windows [Version 10.0.22621.3593] (c) Microsoft Corporation. All rights reserved. C:\Windows\System32>echo %ALIBABA_CLOUD_ACCESS_KEY_ID% LTAI C:\Windows\System32>Windows PowerShell コマンド:
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows PS C:\Windows\system32> echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID LTAIxxx PS C:\Windows\system32>
CMD
永続的
現在のユーザーのすべての新しいセッションで持続する環境変数を設定するには、次の手順に従います。
CMD で次のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。 setx ALIBABA_CLOUD_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" # YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。 setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"新しい CMD ウィンドウを開きます。
新しい CMD ウィンドウで、次のコマンドを実行して環境変数が設定されていることを確認します。
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
一時的
現在のセッションのみの環境変数を設定するには、CMD で次のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。
set ALIBABA_CLOUD_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=YOUR_ACCESS_KEY_SECRET現在のセッションで次のコマンドを実行して、環境変数が設定されていることを確認できます。
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%PowerShell
永続的
現在のユーザーのすべての新しいセッションで持続する環境変数を設定するには、次の手順に従います。
PowerShell で次のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。 [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) # YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。 [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)新しい PowerShell ウィンドウを開きます。
新しい PowerShell ウィンドウで、次のコマンドを実行して環境変数が設定されていることを確認します。
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
一時的
現在のセッションのみの環境変数を設定するには、PowerShell で次のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "YOUR_ACCESS_KEY_SECRET"現在のセッションで次のコマンドを実行して、環境変数が設定されていることを確認できます。
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRETLinux
永続的
現在のユーザーのすべての新しいセッションで持続する環境変数を設定するには、変数をシェルの起動ファイルに追加します。
次のコマンドを実行して、環境変数の設定を
~/.bashrcファイルに追加します。# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。 echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc # YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。 echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc~/.bashrcファイルを手動で編集することもできます。次のコマンドを実行して変更を適用します。
source ~/.bashrcターミナルウィンドウを再度開き、次のコマンドを実行して環境変数が設定されていることを確認します。SDK を使用する前に IDE を再起動してください。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
一時的
現在のセッションのみの環境変数を設定するには、次の手順に従います。
次のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID" # YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"次のコマンドを実行して、環境変数が設定されていることを確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
macOS
永続的
現在のユーザーのすべての新しいセッションで持続する環境変数を設定するには、変数をシェルの起動ファイルに追加します。
ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを確認します。
echo $SHELLデフォルトのシェルタイプに基づいて手順に従います。
Zsh
次のコマンドを実行して、環境変数の設定を
~/.zshrcファイルに追加します。# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。 echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc # YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。 echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc~/.zshrcファイルを手動で編集することもできます。次のコマンドを実行して変更を適用します。
source ~/.zshrcターミナルウィンドウを再度開き、次のコマンドを実行して環境変数が設定されていることを確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
Bash
次のコマンドを実行して、環境変数の設定を
~/.bash_profileファイルに追加します。# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。 echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile # YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。 echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile~/.bash_profileファイルを手動で編集することもできます。次のコマンドを実行して変更を適用します。
source ~/.bash_profileターミナルウィンドウを再度開き、次のコマンドを実行して環境変数が設定されていることを確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
一時的
現在のセッションのみの環境変数を設定するには、次の手順に従います。
以下のコマンドは Zsh と Bash の両方で機能します。
次のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID" # YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"次のコマンドを実行して、環境変数が設定されていることを確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
環境変数を変更した後、ビルドおよび実行環境を再起動またはリフレッシュしてください。これにより、IDE、コマンドラインインターフェイス、バックグラウンドサービスなどのアプリケーションが新しい変数をロードします。
SDK のインストール
このガイドでは Java の例を提供します。他の言語については、「SDK リファレンス」をご参照ください。
Java 8 以降のバージョンがインストールされていることを確認してください。
次の Maven 依存関係を追加して SDK をインストールします。
the-latest-versionを最新のバージョン番号に置き換えてください。<dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20180501</artifactId> <!-- 'the-latest-version' を最新のバージョン番号に置き換えてください:https://mvnrepository.com/artifact/com.aliyun/dysmsapi20180501 --> <version>the-latest-version</version> </dependency>
SDK の使用
1. クライアントの初期化
Alibaba Cloud SDK は、AccessKey や STS トークンなど、さまざまな認証情報を使用してクライアントを初期化することをサポートしています。詳細については、「認証情報の管理」をご参照ください。このトピックでは、AccessKey を例として使用します。
package com.aliyun.sample;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20180501.Client;
public class Sample {
public static Client createClient() throws Exception {
Config config = new Config()
// AccessKey ID を設定します。実行環境に ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// AccessKey Secret を設定します。実行環境に ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// System.getenv() メソッドはシステム環境変数を取得します。コードに AccessKey 認証情報をハードコーディングしないでください。
// エンドポイントを設定します。
config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";
return new Client(config);
}
}2. リクエストオブジェクトの構築
API リクエストを作成し、要件に基づいてパラメーターを設定します。
リクエストオブジェクトの命名規則:{API名}Request、たとえば、SendMessageToGlobe API のリクエストオブジェクトは SendMessageToGlobeRequest です。
SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
.setTo("<YOUR_VALUE>")
.setMessage("<YOUR_VALUE>");3. リクエストの開始
SendMessageToGlobe API を使用して API リクエストを開始します。
レスポンスオブジェクトの命名規則:{API名}Response。たとえば、SendMessageToGlobe API のレスポンスオブジェクトは SendMessageToGlobeResponse です。
SendMessageToGlobeResponse sendSmsResponse = client.sendMessageToGlobe(sendSmsRequest);他のリクエストパラメーターも設定できます。詳細については、「API リクエストの開始」をご参照ください。
タイムアウトとリトライの設定については、「タイムアウト期間の設定」および「リトライメカニズムの設定」をご参照ください。
SDK の例外タイプとその処理については、「例外処理」をご参照ください。
出力は次のようになります:
{
"headers": {
"date": "Tue, 24 Oct 2023 07:47:17 GMT",
"content-type": "application/json;charset=utf-8",
"content-length": "263",
"connection": "keep-alive",
"keep-alive": "timeout=25",
"access-control-allow-origin": "*",
"access-control-expose-headers": "*",
"x-acs-request-id": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"x-acs-trace-id": "29c11fe4c778b74774d5f5602f0e7975",
"etag": "2a+mcDRTDkXqx9VF7b6U57Q3"
},
"statusCode": 200,
"body": {
"ResponseCode": "OK",
"NumberDetail": {
"Region": "Taiwan",
"Country": "Taiwan, Province of China",
"Carrier": "FarEasTone"
},
"RequestId": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"Segments": "1",
"ResponseDescription": "OK",
"To": "88691567****",
"MessageId": "191921698133637273"
}
}API エラーコード
詳細については、国際メッセージのエラーコードをご参照ください。
コストとリスク
コストの内訳:SMS はメッセージごとに課金され、料金は国やリージョンによって異なります。詳細な料金については、課金をご参照ください。
主なリスク:
認証情報の漏洩:漏洩した AccessKey は、アカウント内のすべてのリソースを危険にさらし、予期せぬ請求や恐喝につながる可能性があります。深刻な場合、その不正使用は Alibaba Cloud や他のユーザーに損害を与える可能性もあります。詳細については、「漏洩した AccessKey の処理」をご参照ください。
コンテンツのコンプライアンス:送信するコンテンツが、送信先の国やリージョンの法律および規制に準拠していることを確認する必要があります。準拠しない場合、メッセージがブロックされたり、アカウントが停止されたりする可能性があります。
関連コンテンツ
OpenAPI Explorer で API 呼び出しをデバッグします。
BatchSendMessageToGlobe 操作を使用して、SMS メッセージをバッチで送信します。
SDK の例で、その他の Short Message Service のユースケースを見つけます。
ダッシュボードでメッセージ統計を表示します。