alibabacloud-sms-send-short-message について
Aliyun CLIを通じてAlibaba Cloud Short Message Serviceを操作するスキルです。SMSの送信と状態確認を行うエージェント向けに、単体・一括送信、署名やテンプレートの照会、統計、資格記録に加え、署名とテンプレート不要のテスト送信を提供します。
主な機能
- 01SMSの単体送信と一括送信
- 02署名とテンプレートの状態確認
- 03送信詳細と配信レシートの照会
- 04期間別の送信統計集計
- 05SMS資格記録の検索
- 06テスト認証コードSMSの送信
活用シーン
- 01指定した電話番号への通知や認証コードの送信
- 02複数番号への異なる署名やテンプレートパラメーターでの送信
- 03送信結果と配信レシートの調査
- 04署名とテンプレートの設定前のサービス検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-sms-send-short-messageインストール後、Claude Code で/alibabacloud-sms-send-short-messageを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cli-installation-guide.mdmanifest.jsonram-policies.mdsms-error-codes.mdsms-qualification.mdscripts/send_sms.sh詳細
重要:CLI の遵守事項(最初にお読みください)
以下の宣言は、このスキル内のすべての aliyun CLI の呼び出しに適用されます。
後述する送信/クエリ操作、ワークフローの手順、または機能シナリオを実行する前に、必ず遵守してください。
事前確認:Aliyun CLI は 3.3.3 以降が必須です
[MUST] 確認してください:
aliyun version— バージョンは 3.3.3 以降である必要があります。
- 初回インストールまたはメジャーアップグレード:
/bin/bash -c "$(curl -fsSL --connect-timeout 10 --max-time 120 https://aliyuncli.alicdn.com/setup.sh)"- 通常のアップデート(CLI >= 3.3.5):
aliyun upgrade— インストールスクリプトを再実行するよりも、この組み込みのセルフアップデートを優先してください。- インストール手順の詳細は
references/cli-installation-guide.mdを参照してください。
事前確認:Aliyun CLI プラグインの更新が必要です
[MUST]
aliyun configure set --auto-plugin-install trueを実行して、自動プラグインインストールを有効にしてください。 [MUST]aliyun plugin updateを実行して、既存のプラグインを常に最新の状態にしてください。
可観測性(すべての aliyun コマンドで必ず遵守してください)
クラウド API を呼び出す前に、このスキルのルートにある references/manifest.json を読み込み、最上位にある空でない文字列の version のみを {skill-version} として使用してください。ファイルが存在しない、無効である、またはフィールドが存在しない/空である/文字列ではない場合は、停止してエラーを報告してください。バージョンを決して捏造、推測したり、別のスキルの値を再利用したりしないでください。
バージョンとセッションは、現在のスキル名およびスキルルートに紐付けてください。この会話でこのスキルが初めてクラウド API を呼び出す前に、新しいランダムな 32 文字の小文字の 16 進数セッション ID を生成してください。このスキルでは、会話中を通して同じセッション ID を再利用してください。各スキルには、それぞれ異なるセッション ID を使用する必要があります。ドキュメント、例、別のスキル、または以前の会話からセッション ID を決してコピーしないでください。また、{session-id} というプレースホルダーをそのまま送信しないでください。スキルを切り替える場合、またはこのスキルに戻る場合は、このスキルのマニフェストを読み直してください。どちらの値も、スキル間で再利用しないでください。
ルール:クラウド API を呼び出すすべての aliyun CLI コマンドには、--user-agent フラグを含める必要があります。
ローカルユーティリティコマンド(例:configure、plugin、version)はこのフラグに対応していないため、対象外です。
Markdown の例では、簡潔にするためフラグを省略してもかまいません。実際に実行するすべてのコマンドには、実行時に生成または拡張されたコマンドも含め、エージェントが以下のフラグを正確に追加する必要があります。各例のブロックで UA の定型文を繰り返す必要はありません。
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-sms-send-short-message/{session-id} skill-version/{skill-version}"
UA の値にはスペースが含まれるため、全体を必ず二重引用符で囲んでください。どの aliyun API コマンドでも、このフラグを省略、変更、または付け忘れないでください。
スクリプト/Terraform の実行: スコープ付きの両方の値をインラインで注入してください。
# Python SDK script
SKILL_SESSION_ID={session-id} SKILL_VERSION={skill-version} python3 scripts/deploy.py
# Terraform
TF_VAR_session_id={session-id} TF_VAR_skill_version={skill-version} terraform apply
# provider: configuration_source = "AlibabaCloud-Agent-Skills/alibabacloud-sms-send-short-message/${var.session_id} skill-version/${var.skill_version}"
スクリプトと Terraform 設定では、両方の値を必須とし、同じ UA プロダクトを構築してください。
生成される Terraform プロバイダーでは、configuration_source = "AlibabaCloud-Agent-Skills/alibabacloud-sms-send-short-message/${var.session_id} skill-version/${var.skill_version}" を設定してください。
ラッパースクリプト scripts/send_sms.sh では、環境変数として両方の値が必要です。
SKILL_SESSION_ID={session-id} SKILL_VERSION={skill-version} ./scripts/send_sms.sh send -p "..." -s "..." -t "..."
概要
このスキルは、aliyun CLI を基盤として Alibaba Cloud Short Message Service(SMS)のエンドツーエンド機能を提供し、以下の機能を公開します。
- SMS の送信:認証コード、通知、またはマーケティングメッセージを送信します(SendSms)。
- 一括送信:電話番号ごとに異なる署名/テンプレートパラメーターを使用して送信します(SendBatchSms)。
- 署名の管理:承認ステータスと署名の一覧を照会します。
- テンプレートの管理:承認ステータスとテンプレートの一覧を照会します。
- 送信ステータスの照会:SMS の送信詳細と配信結果を照会します。
- 送信統計の照会:指定期間内の送信数/成功数/失敗数の集計を照会します (QuerySendStatistics)。
- SMS 資格情報の照会:レコードの一覧(QuerySmsQualificationRecord)と
個別レコードの詳細(QuerySingleSmsQualification)を照会します。詳しくは
references/sms-qualification.mdを参照してください。 - テスト SMS の送信:承認済みの署名やテンプレートがまだないアカウント向けに、組み込みのテスト用認証コード SMS を 1 つの電話番号に送信します(SendTestVerification)。署名やテンプレートは不要です。署名/テンプレートを承認申請する前にサービスを検証する場合に便利です。
対話形式でのパラメーター確認(必読)
送信系の操作(send-sms/send-batch-sms)を実行する前に、このスキルは必ず次の重要なパラメーターを先に確認する必要があります:--sign-name、--template-code、--template-param(テンプレートにプレースホルダーが含まれる場合)、および
--phone-numbers/--phone-number-json。
重要:パラメーターの確認 — コマンドまたは API 呼び出しを実行する前に、ユーザーがカスタマイズできるすべてのパラメーター(例:RegionId、署名/テンプレート名、電話番号、テンプレート変数など)をユーザーに確認する必要があります。明示的な承認なしに、デフォルト値を推測または使用してはいけません。
処理ルール
ユーザーが署名またはテンプレートを明示的に指定していない場合、AI エージェントは推測したり、でっち上げたりしてはいけません。代わりに、次の手順に従います。
- ユーザーに積極的に確認します:「どの署名/テンプレートを使用しますか?わからない場合は、アカウントで承認済みのものを一覧表示し、選んでいただけます。」
- ユーザーの同意後、一覧 API を呼び出します:
aliyun dysmsapi query-sms-sign-list ...を実行し、候補ごとにaliyun dysmsapi get-sms-sign --sign-name <name>を実行します。aliyun dysmsapi query-sms-template-list ...- 必須フィルター:
SignStatus = 1(承認済み)の署名と、TemplateStatus = 1のテンプレートのみを残します。キャリア登録状況だけを理由に署名を除外してはいけません。未登録のキャリアでも配信できる場合があります。代わりに、候補一覧の追加列としてSignIspRegisterDetailList[*].RegisterResult(キャリアごとの登録状況)を表示し、ユーザーが判断できるようにします。列:インデックス/コード/名前/内容/SignStatus/キャリアごとの登録状況。
- テンプレート変数を解決します:選択されたテンプレートに
${xxx}プレースホルダーが含まれる場合は、各変数の値を 1 つずつ確認し、--template-paramの JSON にまとめます。 - 電話番号:必ずユーザーから明示的に電話番号を指定してもらいます。このドキュメント内の
13800138000のようなプレースホルダー番号を、実際の宛先として再利用してはいけません。 - 最終確認:重要なパラメーターをすべて収集したら、送信計画の全体を改めて提示し、ユーザーから明示的な確認(例:「confirm」/「send」)を得た後に限り、
send-sms/send-batch-smsを呼び出します。
署名/テンプレートが無効な場合の迅速な復旧
send-sms が isv.SMS_SIGN_NAME_ILLEGAL/isv.SMS_TEMPLATE_ILLEGAL を返した場合、エージェントは「既存の署名とテンプレートを一覧表示する」ことを積極的に提案し、ユーザーの同意を得た後、むやみに再試行するのではなく一覧 API を呼び出す必要があります。
アカウントに署名またはテンプレートがない場合(テスト確認)
ユーザーが SMS の送信を依頼したものの、アカウントに承認済みの署名と承認済みのテンプレートがどちらもない場合(新規アカウントの場合や、query-sms-sign-list/
query-sms-template-list の結果に承認済みの項目がない場合など)、エージェントは
send-sms/send-batch-sms を試してはいけません(isv.SMS_SIGN_NAME_ILLEGAL/
isv.SMS_TEMPLATE_ILLEGAL で失敗するためです)。代わりに、次の手順に従ってください。
- 状況を説明する:通常の SMS を送信するには承認済みの署名とテンプレートが必要ですが、まだ用意されていないことを説明します。
- 組み込みのテスト SMS を提案する:Alibaba Cloud の組み込みテスト署名/テンプレートを使用し、電話番号だけで送信できる
send-test-verificationを提案します。 - 電話番号を尋ねる:受信者の
--phone(単一の番号)を入力するようユーザーに促します。このドキュメントにあるプレースホルダー13800138000を実際の受信者として再利用してはいけません。 - 確認して送信する:ユーザーから番号を受け取り、確認を得た後、
aliyun dysmsapi send-test-verification --phone <number> --api-version 2017-05-25を呼び出します。 - 次の手順を案内する:本番 SMS を送信できるように、コンソールで署名とテンプレートを作成し、承認を受けるようユーザーに伝えます。
前提条件
-
aliyun CLI(>= 3.3.3)をインストールする —
references/cli-installation-guide.mdを参照してください。 -
dysmsapi プラグインをインストールする:
aliyun plugin install --names dysmsapi。 -
認証情報を設定する — CLI のデフォルト認証情報チェーン(優先順位:環境変数 →
~/.aliyun/config.json→ ECS RAM ロール → OIDC Token)を使用します。aliyun configure getで確認してください。export ALIBABA_CLOUD_ACCESS_KEY_ID=<your-access-key-id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-access-key-secret> export ALIBABA_CLOUD_REGION_ID=cn-hangzhou重要:コードやコマンドに AK/SK をハードコードしないでください。ECS では RAM ロールを、K8s では OIDC を使用してください。
-
SMS Console で SMS サービスを有効化し、承認済みの署名とテンプレートを作成します。これらがない場合、使用できるのは
send-test-verification(テスト SMS)のみです。
使用方法
aliyun CLI を直接呼び出す
SMS の送信(一括送信/宛先ごとの送信方法については「例」を参照):
aliyun dysmsapi send-sms --api-version 2017-05-25 \
--phone-numbers "13800138000" --sign-name "AliyunDemo" --template-code "SMS_123456" \
--template-param '{"code":"123456"}' --read-timeout 3
# Batch send: per-phone signature / template params (<= 100 numbers)
aliyun dysmsapi send-batch-sms --api-version 2017-05-25 \
--phone-number-json '["13800138000","13900139000"]' --sign-name-json '["SignA","SignB"]' \
--template-code "SMS_123456" \
--template-param-json '[{"code":"111111"},{"code":"222222"}]' --read-timeout 3
# Test SMS: no signature/template needed, single phone only
aliyun dysmsapi send-test-verification --api-version 2017-05-25 --phone "13800138000" --read-timeout 3
一覧/ステータス/詳細の照会:
# Approved signatures / templates (use to populate user choices)
aliyun dysmsapi query-sms-sign-list --api-version 2017-05-25 --page-index 1 --page-size 50 --read-timeout 3
aliyun dysmsapi query-sms-template-list --api-version 2017-05-25 --page-index 1 --page-size 50 --read-timeout 3
# Single signature / template lookup
aliyun dysmsapi get-sms-sign --api-version 2017-05-25 --sign-name "AliyunDemo" --read-timeout 3
aliyun dysmsapi get-sms-template --api-version 2017-05-25 --template-code "SMS_123456" --read-timeout 3
# Per-message delivery details (use BizId for precise lookup)
aliyun dysmsapi query-send-details --api-version 2017-05-25 \
--phone-number "13800138000" --send-date "20260326" \
--page-size 10 --current-page 1 --read-timeout 3
# Aggregated statistics (--is-globe: 1=domestic, 2=intl/HK-Macao-Taiwan).
# Optional filters: --sign-name "AliyunDemo" --template-type 0
aliyun dysmsapi query-send-statistics --api-version 2017-05-25 --is-globe 1 \
--start-date "20260301" --end-date "20260326" --page-index 1 --page-size 10 --read-timeout 3
# SMS qualification — list records / single detail by GroupId
aliyun dysmsapi query-sms-qualification-record --api-version 2017-05-25 --page-no 1 --page-size 20 --read-timeout 3
aliyun dysmsapi query-single-sms-qualification --api-version 2017-05-25 --qualification-group-id 10000123 --read-timeout 3
資格審査 API のフィルターの全パラメーター、レスポンススキーマ、状態の列挙値のマッピングについては、
references/sms-qualification.mdに記載されています。
ラッパースクリプトを使用する
scripts/send_sms.sh は --api-version、--read-timeout、およびバージョン付きの --user-agent を自動的に適用します。環境変数に SKILL_SESSION_ID と SKILL_VERSION が必要です(「可観測性」を参照)。セッションごとに一度、次のようにエクスポートしてください。
export SKILL_SESSION_ID={session-id} SKILL_VERSION={skill-version}
# Send (single or comma-separated phones); add --verify to pre-check sign/template
./scripts/send_sms.sh send -p "13800138000" -s "AliyunDemo" -t "SMS_123456" -tp '{"code":"123456"}'
# Send a test verification SMS (no signature/template needed)
./scripts/send_sms.sh send-test -p "13800138000"
# List & inspect
./scripts/send_sms.sh list-signs
./scripts/send_sms.sh list-templates
./scripts/send_sms.sh query-sign --sign-name "AliyunDemo"
./scripts/send_sms.sh query-template --template-code "SMS_123456"
# Status & statistics (--is-globe / --sign-name / --template-type are optional filters)
./scripts/send_sms.sh query-status -p "13800138000" --send-date "20260326" --biz-id "xxx^0"
./scripts/send_sms.sh query-statistics --start-date "20260301" --end-date "20260326"
パラメーター
aliyun dysmsapi send-sms
| パラメーター | 必須 | 説明 |
|---|---|---|
| --api-version | はい | API バージョン。2017-05-25 に固定 |
| --phone-numbers | はい | 電話番号。カンマ区切りで最大 1000 件 |
| --sign-name | はい | SMS 署名名 |
| --template-code | はい | SMS テンプレートコード |
| --template-param | いいえ | テンプレート変数の JSON。例:'{"code":"123456"}' |
| --out-id | いいえ | 外部トラッキング ID |
| --read-timeout | はい | 読み取りタイムアウト(秒)。推奨値は 3 |
aliyun dysmsapi send-batch-sms(バッチ送信)
| パラメーター | 必須 | 説明 |
|---|---|---|
| --api-version | はい | API バージョン。2017-05-25 固定です |
| --phone-number-json | はい | 電話番号の JSON 配列。最大 100 件です。例:'["138xxx","139xxx"]' |
| --sign-name-json | はい | 署名名の JSON 配列。電話番号の件数と一致させる必要があります |
| --template-code | はい | テンプレートコード(すべての電話番号で同じテンプレートを使用します) |
| --template-param-json | いいえ | テンプレート変数の JSON 配列。電話番号の件数と一致させる必要があります |
| --sms-up-extend-code-json | いいえ | 上流 SMS 拡張コードの JSON 配列 |
| --out-id | いいえ | 外部トラッキング ID。256 文字未満 |
| --read-timeout | はい | 読み取りタイムアウト(秒)。推奨値は 3 です |
SendSms と SendBatchSms の違い:
send-smsは最大 1000 件の番号で同じ署名/テンプレートを使用しますが、send-batch-smsでは電話番号ごとに異なる署名/テンプレートパラメーターを使用できます(最大 100 件)。
aliyun dysmsapi send-test-verification(テスト SMS、署名/テンプレート不要)
| パラメーター | 必須 | 説明 |
|---|---|---|
| --api-version | はい | API バージョン。2017-05-25 固定です |
| --phone | はい | 送信先の電話番号 1 件。例:13800138000 |
| --read-timeout | はい | 読み取りタイムアウト(秒)。推奨値は 3 です |
使用するタイミング:承認済みの署名/テンプレートがまだないアカウントでのみ使用します。Alibaba Cloud の組み込みテスト署名とテンプレートを使用し、無料で、固定のテスト認証コードを 1 件の番号に送信します。本番環境で
send-smsの代わりに使用するものではありません。実際の業務 SMS には、署名/テンプレートを作成して承認を受けてください。
aliyun dysmsapi query-send-statistics
| パラメーター | 必須 | 説明 |
|---|---|---|
| --api-version | はい | API バージョン。2017-05-25 固定です |
| --is-globe | はい | 範囲:1 = 国内、2 = 国際/香港・マカオ・台湾 |
| --start-date | はい | 開始日(yyyyMMdd) |
| --end-date | はい | 終了日(yyyyMMdd) |
| --page-index | はい | 現在のページ。1 から開始します |
| --page-size | はい | ページサイズ。1~50 |
| --template-type | いいえ | 0=認証コード、1=通知、2=マーケティング(法人)、3=国際/香港・マカオ・台湾(法人)、7=デジタル |
| --sign-name | いいえ | 署名名で絞り込み |
| --read-timeout | はい | 読み取りタイムアウト(秒)。推奨値は 3 です |
レスポンス:
Data.TargetList[](各項目にSendDate、TotalCount、RespondedSuccessCount、RespondedFailCount、NoRespondedCountが含まれます)とData.TotalSizeを返します。
ラッパースクリプトのオプション
| オプション | 短縮形 | 説明 |
|---|---|---|
| --phone-numbers | -p | 電話番号 |
| --sign-name | -s | 署名名 |
| --template-code | -t | テンプレートコード |
| --template-param | -tp | テンプレート変数(JSON) |
| --out-id | -o | 外部トラッキング ID |
| --verify | — | 送信前に署名/テンプレートを検証 |
| --region | -r | リージョン ID。デフォルトは cn-hangzhou |
| --profile | — | 指定した aliyun CLI プロファイルを使用 |
出力
送信成功時のレスポンス
{
"BizId": "114814474505895421^0",
"Code": "OK",
"Message": "OK",
"RequestId": "4C3D8B1B-B3D8-5673-B724-1F251799CE9A"
}
承認ステータスのリファレンス
| 値 | SignStatus / TemplateStatus | 説明 |
|---|---|---|
| 0 | 審査中 | 現時点では SMS を送信できません |
| 1 | 承認済み | 送信に利用できます |
| 2 | 却下 | 修正して再提出する必要があります |
| 10 | キャンセル済み | 署名/テンプレートはキャンセルされています |
エラー処理
よくあるビジネスエラーコード
| エラーコード | 説明 | 推奨される対応 |
|---|---|---|
| isv.SMS_SIGNATURE_SCENE_ILLEGAL | 署名とテンプレートのシーンが不一致 | 署名とテンプレートのシーンが一致していることを確認します |
| isv.SMS_TEMPLATE_ILLEGAL | テンプレートがない、または未承認 | テンプレートが承認されていることを確認します |
| isv.SMS_SIGN_NAME_ILLEGAL | 署名がない、または未承認 | 署名が承認されていることを確認します |
| isv.MOBILE_NUMBER_ILLEGAL | 電話番号の形式が正しくありません | 電話番号の形式を確認します |
| isv.AMOUNT_NOT_ENOUGH | アカウント残高が不足しています | SMS の利用枠をチャージします |
| isv.BUSINESS_LIMIT_CONTROL | スロットリングが発生しました | 送信レートを下げます |
| SignatureNotFound | 署名が見つかりません | コンソールで署名を作成します |
| TemplateNotFound | テンプレートが見つかりません | コンソールでテンプレートを作成します |
query-send-detailsのErrCode= Alibaba のisv.*/isp.*(上記)+通信事業者の配信結果(DELIVERED、MOBILE_NOT_ON_SERVICE、MOBILE_SEND_LIMIT、…)。全一覧とトリアージについては、references/sms-error-codes.mdを参照してください。
CLI 設定エラー
| エラーメッセージ | 原因 | 解決方法 |
|---|---|---|
| InvalidAccessKeyId.NotFound | AccessKey ID が間違っています | AccessKey ID を確認します |
| SignatureDoesNotMatch | Secret が間違っています | AccessKey Secret を確認します |
| Forbidden.RAM | 権限が不足しています | RAM ユーザーに SMS の権限があることを確認します |
実行フロー
- 事前確認:aliyun CLI(>= 3.3.3)がインストールされ、dysmsapi プラグインが利用可能であることを確認します。
認証情報が設定されていることを確認し、
references/manifest.jsonから{skill-version}を読み取り、新しい{session-id}を生成します(Observability を参照)。 - 必須パラメーター(
phone-numbers、sign-name、template-code)を検証します。 署名またはテンプレートが指定されていない場合は、ユーザーに確認します。同意を得た後、query-sms-sign-list/query-sms-template-listを呼び出し、承認済みの候補を提示します。 アカウントに承認済みの署名もテンプレートもない場合は、send-smsを呼び出さず、テスト用認証 SMS を提案します(ステップ 5a)。 - [任意、--verify]:
get-sms-signで署名を検証します。SignStatus=1が必須です。また、SignIspRegisterDetailList[*].RegisterResultを情報としてユーザーに提示します(未登録の通信事業者でも配信される場合があるため、処理をブロックしないでください)。 - [任意、--verify]:
get-sms-templateでテンプレートのステータスを検証します(TemplateStatus=1)。 - 送信:
aliyun dysmsapi send-smsで送信します(受信者ごとに内容をパーソナライズする場合はsend-batch-smsを使用します)。 5a. [署名/テンプレートがない場合]テスト SMS を送信:アカウントに承認済みの署名/テンプレートがない場合は、ユーザーに単一の--phoneを指定してもらい、確認後にaliyun dysmsapi send-test-verification --phone <number>を呼び出します。その後、本番送信に向けて署名/テンプレートを作成し、承認を得るよう案内します。 - 結果を返す:
Code=OKが示すのはゲートウェイによる受付のみです。BizIdを返します。ユーザーに最終的な配信結果を報告するには、必ずquery-send-details(シナリオ 3)を呼び出します。送信レスポンスを配信の証拠として使用しないでください。
例
シナリオ 1:認証コードを送信する(または同じ署名/パラメーターで一括送信する)
# 1) Pull approved signatures & templates first (so the user can pick)
aliyun dysmsapi query-sms-sign-list --api-version 2017-05-25 --page-index 1 --page-size 50 --read-timeout 3
aliyun dysmsapi query-sms-template-list --api-version 2017-05-25 --page-index 1 --page-size 50 --read-timeout 3
# 2) Send (after user confirmation). For bulk, comma-separate up to 1000 numbers in
# --phone-numbers; all of them share this signature and these template params.
aliyun dysmsapi send-sms --api-version 2017-05-25 \
--phone-numbers "13800138000" --sign-name "YourSign" --template-code "SMS_xxx" \
--template-param '{"code":"123456"}' --read-timeout 3
シナリオ 2:受信者ごとに内容をパーソナライズして一括送信する
aliyun dysmsapi send-batch-sms --api-version 2017-05-25 \
--phone-number-json '["13800138000","13900139000"]' \
--sign-name-json '["BrandA","BrandB"]' \
--template-code "SMS_xxx" \
--template-param-json '[{"code":"111111"},{"code":"222222"}]' --read-timeout 3
--phone-number-json、--sign-name-json、--template-param-jsonの長さは一致しており、1 対 1 で対応している必要があります。
シナリオ 3:配信状況と集計統計を確認する
# Per-message delivery (uses BizId returned by send-sms)
aliyun dysmsapi query-send-details --api-version 2017-05-25 \
--phone-number "13800138000" --send-date "20260326" --biz-id "xxx^0" \
--page-size 10 --current-page 1 --read-timeout 3
# Range-based aggregated statistics (1 row per send-day)
aliyun dysmsapi query-send-statistics --api-version 2017-05-25 --is-globe 1 \
--start-date "20260301" --end-date "20260326" --page-index 1 --page-size 10 --read-timeout 3
send-sms/send-batch-smsのレスポンスが確認するのは、ゲートウェイによる受付(Code=OK+BizId)のみであり、配信の証拠にはなりません。ユーザーから「届きましたか?」「配信されましたか?」と尋ねられた場合は、必ずquery-send-detailsを呼び出し(正確に照会するにはBizIdを使用)、SendStatus(1=処理中、2=失敗、3=配信済み)とErrCodeを提示してください。送信 API のレスポンスだけを根拠に回答しないでください。
シナリオ 4:署名/テンプレートがない場合にテスト SMS を送信する
承認済みの署名/テンプレートがない新規アカウントの場合は、ユーザーに単一の電話番号を尋ねてから、組み込みのテスト用認証 SMS を送信します。
aliyun dysmsapi send-test-verification --api-version 2017-05-25 --phone "13800138000" --read-timeout 3
成功レスポンスでは
Code=OK/Success=trueが返されます。その後、実際の業務 SMS にsend-smsを使用できるよう、コンソールで署名とテンプレートを作成して承認を得るよう案内します。
複数環境/複数アカウント
aliyun CLI は複数のプロファイルに対応しています。認証情報には環境変数または RAM ロールを優先して使用し、プロファイルはリージョンの選択にのみ使用してください。
aliyun configure set --profile prod --region cn-hangzhou
aliyun dysmsapi send-sms --profile prod --api-version 2017-05-25 \
--phone-numbers "13800138000" --sign-name "Sign" --template-code "SMS_xxx" --read-timeout 3
注意事項
- プラグインのインストール:初回利用時は
aliyun plugin install --names dysmsapiが必要です。 - API バージョン:CLI を直接呼び出す場合は、
--api-version 2017-05-25が必須です。 - パラメーター形式:ケバブケースを使用します(例:
--PhoneNumbersではなく--phone-numbers)。 - タイムアウト:
--read-timeout 3が必要です。タイムアウト後、再試行するか判断する前に配信状況を照会してください。 - ユーザーエージェント:すべての API コマンドに、Observability セクションで説明されているバージョン付きの
--user-agentを指定してください。ハードコードした値や、セッション情報を含まない値は使用しないでください。 - 冪等性:SendSms/SendBatchSms は冪等ではありません。ビジネスロジック層で重複送信を防いでください。
- 単一送信と一括送信:認証コードには
send-smsを優先してください。send-batch-smsが必要なのは、受信者ごとに異なる署名またはテンプレートパラメーターが必要な場合のみです(≤ 100)。 - 課金:課金はキャリアでの配信状況によって決まります。API が成功してもキャリアで配信に失敗した場合は課金されません。QPS 制限はユーザーあたり 5000/s です。
send-test-verificationは無料です。 - 認証情報の安全性:AK/SK をハードコードしないでください。常にデフォルトの認証情報チェーン(環境変数 /
~/.aliyun/config.json/ ECS RAM ロール / OIDC)を使用してください。 - パラメーターの確認:署名やテンプレートを推測しないでください。必ずユーザーに確認し、同意を得た後で
query-sms-sign-list/query-sms-template-listを取得してください(「対話型パラメーター確認」を参照)。 - 送信結果の報告:送信レスポンスが示すのはゲートウェイで受け付けられたことのみであり、配信された証拠にはなりません。
query-send-detailsで確認してください(シナリオ 3)。
参考資料
- Alibaba Cloud CLI のドキュメント
- SMS サービスのコンソール
- SendSms API のドキュメント
- SendTestVerification API(テスト SMS、署名・テンプレート不要)
- 送信ステータスのエラーコード(ローカル) —
query-send-detailsのErrCode(Alibaba のisv.*/isp.*+ キャリアからの配信結果)。上流の資料:101347 / 101346 - SMS の資格情報照会(ローカル) —
QuerySmsQualificationRecord/QuerySingleSmsQualification