mcpField
A
alibabacloud-sms-send-short-message

alibabacloud-sms-send-short-message

github.com/aliyunその他281129 回インストール1 日前に更新
リポジトリ

alibabacloud-sms-send-short-message について

Aliyun CLIを通じてAlibaba Cloud Short Message Serviceを操作するスキルです。SMSの送信と状態確認を行うエージェント向けに、単体・一括送信、署名やテンプレートの照会、統計、資格記録に加え、署名とテンプレート不要のテスト送信を提供します。

主な機能

  1. 01SMSの単体送信と一括送信
  2. 02署名とテンプレートの状態確認
  3. 03送信詳細と配信レシートの照会
  4. 04期間別の送信統計集計
  5. 05SMS資格記録の検索
  6. 06テスト認証コードSMSの送信

活用シーン

  1. 01指定した電話番号への通知や認証コードの送信
  2. 02複数番号への異なる署名やテンプレートパラメーターでの送信
  3. 03送信結果と配信レシートの調査
  4. 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.md
manifest.json
ram-policies.md
sms-error-codes.md
sms-qualification.md
scripts/
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 エージェントは推測したり、でっち上げたりしてはいけません。代わりに、次の手順に従います。

  1. ユーザーに積極的に確認します:「どの署名/テンプレートを使用しますか?わからない場合は、アカウントで承認済みのものを一覧表示し、選んでいただけます。」
  2. ユーザーの同意後、一覧 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/キャリアごとの登録状況。
  3. テンプレート変数を解決します:選択されたテンプレートに ${xxx} プレースホルダーが含まれる場合は、各変数の値を 1 つずつ確認し、--template-param の JSON にまとめます。
  4. 電話番号:必ずユーザーから明示的に電話番号を指定してもらいます。このドキュメント内の 13800138000 のようなプレースホルダー番号を、実際の宛先として再利用してはいけません。
  5. 最終確認:重要なパラメーターをすべて収集したら、送信計画の全体を改めて提示し、ユーザーから明示的な確認(例:「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 で失敗するためです)。代わりに、次の手順に従ってください。

  1. 状況を説明する:通常の SMS を送信するには承認済みの署名とテンプレートが必要ですが、まだ用意されていないことを説明します。
  2. 組み込みのテスト SMS を提案する:Alibaba Cloud の組み込みテスト署名/テンプレートを使用し、電話番号だけで送信できる send-test-verification を提案します。
  3. 電話番号を尋ねる:受信者の --phone(単一の番号)を入力するようユーザーに促します。このドキュメントにあるプレースホルダー 13800138000 を実際の受信者として再利用してはいけません。
  4. 確認して送信する:ユーザーから番号を受け取り、確認を得た後、aliyun dysmsapi send-test-verification --phone <number> --api-version 2017-05-25 を呼び出します。
  5. 次の手順を案内する:本番 SMS を送信できるように、コンソールで署名とテンプレートを作成し、承認を受けるようユーザーに伝えます。

前提条件

  1. aliyun CLI(>= 3.3.3)をインストールする — references/cli-installation-guide.md を参照してください。

  2. dysmsapi プラグインをインストールする:aliyun plugin install --names dysmsapi。

  3. 認証情報を設定する — 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 を使用してください。

  4. 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.NotFoundAccessKey ID が間違っていますAccessKey ID を確認します
SignatureDoesNotMatchSecret が間違っていますAccessKey Secret を確認します
Forbidden.RAM権限が不足していますRAM ユーザーに SMS の権限があることを確認します

実行フロー

  1. 事前確認:aliyun CLI(>= 3.3.3)がインストールされ、dysmsapi プラグインが利用可能であることを確認します。 認証情報が設定されていることを確認し、references/manifest.json から {skill-version} を読み取り、新しい {session-id} を生成します(Observability を参照)。
  2. 必須パラメーター(phone-numbers、sign-name、template-code)を検証します。 署名またはテンプレートが指定されていない場合は、ユーザーに確認します。同意を得た後、query-sms-sign-list/query-sms-template-list を呼び出し、承認済みの候補を提示します。 アカウントに承認済みの署名もテンプレートもない場合は、send-sms を呼び出さず、テスト用認証 SMS を提案します(ステップ 5a)。
  3. [任意、--verify]:get-sms-sign で署名を検証します。SignStatus=1 が必須です。また、SignIspRegisterDetailList[*].RegisterResult を情報としてユーザーに提示します(未登録の通信事業者でも配信される場合があるため、処理をブロックしないでください)。
  4. [任意、--verify]:get-sms-template でテンプレートのステータスを検証します(TemplateStatus=1)。
  5. 送信:aliyun dysmsapi send-sms で送信します(受信者ごとに内容をパーソナライズする場合は send-batch-sms を使用します)。 5a. [署名/テンプレートがない場合]テスト SMS を送信:アカウントに承認済みの署名/テンプレートがない場合は、ユーザーに単一の --phone を指定してもらい、確認後に aliyun dysmsapi send-test-verification --phone <number> を呼び出します。その後、本番送信に向けて署名/テンプレートを作成し、承認を得るよう案内します。
  6. 結果を返す: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

注意事項

  1. プラグインのインストール:初回利用時は aliyun plugin install --names dysmsapi が必要です。
  2. API バージョン:CLI を直接呼び出す場合は、--api-version 2017-05-25 が必須です。
  3. パラメーター形式:ケバブケースを使用します(例:--PhoneNumbers ではなく --phone-numbers)。
  4. タイムアウト:--read-timeout 3 が必要です。タイムアウト後、再試行するか判断する前に配信状況を照会してください。
  5. ユーザーエージェント:すべての API コマンドに、Observability セクションで説明されているバージョン付きの --user-agent を指定してください。ハードコードした値や、セッション情報を含まない値は使用しないでください。
  6. 冪等性:SendSms/SendBatchSms は冪等ではありません。ビジネスロジック層で重複送信を防いでください。
  7. 単一送信と一括送信:認証コードには send-sms を優先してください。send-batch-sms が必要なのは、受信者ごとに異なる署名またはテンプレートパラメーターが必要な場合のみです(≤ 100)。
  8. 課金:課金はキャリアでの配信状況によって決まります。API が成功してもキャリアで配信に失敗した場合は課金されません。QPS 制限はユーザーあたり 5000/s です。send-test-verification は無料です。
  9. 認証情報の安全性:AK/SK をハードコードしないでください。常にデフォルトの認証情報チェーン(環境変数 / ~/.aliyun/config.json / ECS RAM ロール / OIDC)を使用してください。
  10. パラメーターの確認:署名やテンプレートを推測しないでください。必ずユーザーに確認し、同意を得た後で query-sms-sign-list / query-sms-template-list を取得してください(「対話型パラメーター確認」を参照)。
  11. 送信結果の報告:送信レスポンスが示すのはゲートウェイで受け付けられたことのみであり、配信された証拠にはなりません。query-send-details で確認してください(シナリオ 3)。

参考資料

コメント