アプリケーション開発では、登録検証コード、注文更新通知、プロモーションメッセージなどのために、ユーザーに SMS を送信することがよくあります。このドキュメントでは、SDK を統合し、Alibaba Cloud Short Message Service (SMS) API を呼び出すことで、SMS 送信を迅速、安全、確実に自動化する方法について説明します。
アーキテクチャ
SMS API 呼び出しのエンドツーエンドフローには、アプリケーション、Alibaba Cloud SDK、Resource Access Management (RAM)、および Short Message Service (SMS) が含まれます。
プロセスは次のとおりです。アプリケーションに Alibaba Cloud SDK を統合し、RAM を使用して SMS 権限を持つ認証情報をアプリケーションに割り当てます。アプリケーションは、これらの認証情報を使用して SMS API を呼び出します。Alibaba Cloud がリクエストを認証し、コンプライアンスを検証した後、メッセージを Alibaba Cloud SMS ゲートウェイに渡します。Alibaba Cloud SMS ゲートウェイは、キャリアネットワーク経由で SMS をユーザーの携帯電話に配信します。
このガイドでは、SendMessageToGlobe API を例に、SMS API の呼び出し方法を説明します。次の内容を学習できます:
API の呼び出しに慣れている場合は、API リファレンスを直接参照し、必要な API を呼び出してください。
API の呼び出しには SDK の使用を推奨します。独自のリクエストを作成する場合は、V3 リクエストボディ & 署名をご参照ください。
事前準備
項目 | 説明 | 参照 |
ユーザー権限 | [RAM コンソール] で、RAM ユーザー名をクリックして権限を表示します。API を呼び出す RAM ユーザーに、 SMS 関連で必要な以下の権限が付与されていることを確認してください:
| |
| RAM コンソールで、RAM ユーザー名をクリックします。ユーザー詳細ページで、AccessKey タブをクリックして AccessKey ID を表示します。 | |
| AccessKey Secret は作成時にのみ表示されます。紛失した場合は、新しい AccessKey ペアを作成してください。 | |
アカウント残高またはパッケージクォータ | アカウント残高またはパッケージクォータが十分であることを確認してください。パッケージクォータは [リソースパッケージ統計] ページで、アカウント残高は [課金管理コンソール] で確認できます。 |
認証情報の設定
ステップ 1:RAM ユーザーの作成と権限付与
Alibaba Cloud アカウント (root ユーザー) は高度な権限を持ちます。セキュリティ上の観点から、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を使用します。
手順 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% LTAIxxxxxxxxxxxxxx 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 LTAIxxxxxxxxxxxxxx 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 と Python の例を示します。その他の言語については、「SDK リファレンス」をご参照ください。Python での完全な使用方法については、Python 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>
Python を使用する場合は、pip を使用して SDK をインストールしてください。Python 3.7 以降のバージョンがインストールされていることを確認してください。
pip install alibabacloud_dysmsapi20180501SDK の使用
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 シークレットを設定します。ランタイム環境に 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 リクエストを作成し、パラメーターを設定します。
リクエストオブジェクトの命名規則: {APIName}Request。たとえば、SendMessageToGlobe API のリクエストオブジェクトは SendMessageToGlobeRequest です。
SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
.setTo("<YOUR_VALUE>")
.setMessage("<YOUR_VALUE>");3. リクエストの開始
SendMessageToGlobe API を使用してリクエストを開始します。
レスポンスオブジェクトの命名規則: {API name}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 API を使用して、SMS メッセージを一括送信できます。
Short Message Service (SMS) のその他のユースケースについては、SDK サンプルをご参照ください。
Python SDK をご参照ください。
ダッシュボードでメッセージの統計を表示できます。