アプリケーション開発において、ユーザーに対して検証コード、通知、またはプロモーションメッセージを送信する必要が生じることがあります。たとえば、ユーザーがアカウント登録を行う際に検証コードを送信したり、注文ステータスが変更された際に通知を送信したりします。本トピックでは、Alibaba Cloud ソフトウェア開発キット(SDK)を連携して Short Message Service(SMS)API を呼び出す方法について説明します。これにより、テキストメッセージの送信を高速・安全・確実に自動化できます。
アーキテクチャ
Short Message Service API の呼び出しには、お客様のアプリケーション、Alibaba Cloud SDK、Resource Access Management(RAM)、および Short Message Service が関与します。
このプロセスのコアロジックは以下のとおりです:開発者が Alibaba Cloud SDK をアプリケーションに組み込みます。その後、開発者は RAM を使用して、Short Message Service へのアクセス権限を持つアクセス認証情報をアプリケーションに割り当てます。アプリケーションはその認証情報を用いて Short Message Service API を呼び出し、リクエストを送信します。Alibaba Cloud のサーバー側では、リクエストが認証され、コンプライアンス要件がチェックされます。リクエストが承認されると、メッセージは SMS ゲートウェイへ送信され、キャリアネットワークを経由してユーザーの携帯電話へ配信されます。
本トピックでは、 SendMessageToGlobe 操作を例として、Short Message Service API の呼び出し手順を説明します。以下について学習できます:
API の呼び出し手順に既に慣れている場合は、 API リファレンス を参照し、必要な操作を呼び出してください。
API 呼び出しには、SDK を連携することを推奨します。リクエストのカプセル化をカスタマイズして API を呼び出したい場合は、「リクエストボディおよび署名メカニズム V3」をご参照ください。
事前準備
前提条件 | 説明 | 参考資料 |
ユーザー権限 | RAM コンソール にアクセスし、RAM ユーザー名をクリックしてユーザー権限を確認します。API 呼び出しに使用する RAM ユーザーが Short Message Service に必要な権限を持っていることを確認してください:
| |
| RAM コンソール にアクセスし、RAM ユーザー名をクリックして製品ページを開き、AccessKey タブをクリックして、AccessKey ID を確認します。 | |
| AccessKey Secret は作成後に表示されません。ローカルにバックアップがない場合は、新しい AccessKey ペアを作成してください。 | |
アカウント残高/パッケージクォータ | アカウントに十分な残高またはパッケージクォータがあることを確認してください。パッケージクォータは、パッケージ統計 ページで確認できます。また、アカウント残高は、費用とコスト ページで確認できます。 |
アクセス認証情報の構成
ステップ 1:RAM ユーザーの作成と権限付与
Alibaba Cloud アカウントには高度な権限があります。セキュリティのため、API 呼び出しや日常的な操作には Resource Access Management(RAM)ユーザーを使用することを推奨します。RAM ユーザーの詳細については、「RAM ユーザーの概要」をご参照ください。
RAM ユーザーの作成: ユーザーの作成 にアクセスします。ユーザー名を設定し、Access Configuration を Permanent AccessKey に設定します。はい をクリックします。作成直後に AccessKey ペアを保存してください。
RAM ユーザーへの権限付与: ユーザー にアクセスします。作成した RAM ユーザーを見つけ、Actions をクリックし、Attach Policy をクリックします。Policy の検索ボックスに AliyunDysmsFullAccess を入力し、該当ポリシーを選択して Grant permissions をクリックします。
AliyunDysmsFullAccess:Alibaba Cloud SMS の完全管理権限を付与します。
AliyunDysmsReadOnlyAccess:Alibaba Cloud SMS の読み取り専用権限を付与します。
カスタムポリシーを作成する場合は、「RAM 権限付与」をご参照ください。
ステップ 2:アクセス認証情報の取得
AccessKey ペア を環境変数に設定します。詳細については、「Linux、macOS、Windows における環境変数の構成」をご参照ください。
AccessKey ペアが漏洩しないよう、アプリケーション内にハードコードしないでください。代わりに環境変数を使用してください。
本例では、環境変数名として
ALIBABA_CLOUD_ACCESS_KEY_IDおよびALIBABA_CLOUD_ACCESS_KEY_SECRETを使用します。
環境変数の構成手順
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%Windows PowerShell コマンド:
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
CMD
永続的環境変数の追加
API キーの環境変数を現在のユーザー向けにすべての新規セッションで利用可能にする場合、以下の手順を実行します。
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
永続的環境変数の追加
API キーの環境変数を現在のユーザー向けにすべての新規セッションで利用可能にする場合、以下の手順を実行します。
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
永続的環境変数の追加
API キーの環境変数を現在のユーザー向けにすべての新規セッションで利用可能にする場合、永続的環境変数を追加します。
以下のコマンドを実行し、環境変数の設定を
~/.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
永続的環境変数の追加
API キーの環境変数を現在のユーザー向けにすべての新規セッションで利用可能にする場合、永続的環境変数を追加します。
ターミナルで以下のコマンドを実行し、デフォルトシェルの種類を確認します。
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 ペアや Security Token Service(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() メソッドはシステム環境変数を取得します。getenv() メソッド内で AccessKey 情報をハードコードしないでください。
// エンドポイントを構成します。
config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";
return new Client(config);
}
}2. リクエストオブジェクトの構築
API リクエストを構築し、必要に応じてパラメーターを渡します。
リクエストオブジェクトは {API 操作名}Request という命名規則に従います。 たとえば、SendMessageToGlobe 操作のリクエストオブジェクトは SendMessageToGlobeRequest です。
SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
.setTo("<YOUR_VALUE>")
.setMessage("<YOUR_VALUE>");3. リクエストの送信
SendMessageToGlobe 操作を使用して API リクエストを完了します。
応答オブジェクトは {API 操作名}Response という命名規則に従います。 たとえば、SendMessageToGlobe 操作の応答オブジェクトは SendMessageToGlobeResponse です。
SendMessageToGlobeResponse sendSmsResponse = client.sendMessageToGlobe(sendSmsRequest);コードを実行すると、以下の出力が返されます:
{
"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 エラーコードと解決策
詳細については、 エラーコード をご参照ください。
コストとリスク
コスト構成:Short Message Service は主に送信メッセージ数に基づいて課金されます。1 通あたりの価格は国またはリージョンによって異なります。詳細な料金については、製品課金 をご参照ください。
主なリスク:
認証情報の漏洩:AccessKey ペアが漏洩すると、アカウント下のすべてのリソースが危険にさらされます。これにより、不正なリソース使用、予期しない課金、データセキュリティ侵害などが発生する可能性があります。詳細については、「AccessKey ペア漏洩に対する対策」をご参照ください。
コンテンツのコンプライアンス:送信するコンテンツは、宛先の国またはリージョンの法令および規制に準拠している必要があります。準拠していない場合、メッセージの送信に失敗したり、アカウントが一時停止される可能性があります。
関連コンテンツ
OpenAPI ポータルでオンラインデバッグを実行するには、「 Short Message Service の OpenAPI Explorer」にアクセスしてください。
複数のテキストメッセージを一括送信するには、「 BatchSendMessageToGlobe」操作を使用します。
Short Message Service のその他のユースケースについては、「 SDK のサンプル」をご参照ください。
SMS 統計(メッセージ数など)を取得するには、「」または「ビジネス統計」にアクセスしてください。

