透過阿里雲簡訊服務(SendSms)將告警以簡訊方式發送到值班人員手機,新手可依步驟逐步完成設定。

概述

阿里雲簡訊通知媒介利用 阿里雲 簡訊服務 · SendSms API,把告警以一般簡訊的形式推送到手機。一般作為電子郵件/IM 的補充管道——即使手機未安裝 IM,簡訊也能收到。

  • 適用情境:維運值班兜底通知、未安裝 IM 的主管/客戶需要被同步告警。
  • 你需要準備:
    • 一個已實名認證、已開通簡訊服務的阿里雲帳號;
    • 阿里雲 AccessKey ID / AccessKey Secret(建議使用 RAM 子帳號);
    • 已審核通過的簡訊簽名 SignName(例如「夜鶯監控」);
    • 已審核通過的簡訊範本 TemplateCode(形如 SMS_123456789)。
  • 整個設定分三步:①在阿里雲申請簽名與範本 → ②在夜鶯新建阿里雲簡訊通知媒介 → ③為使用者設定手機號碼,並在通知規則裡選擇接收人

阿里雲簡訊簽名與範本都需要工單審核(1~3 個工作日),且不同產業對文案要求不同,建議提前多申請幾個備用範本。

第一步:在阿里雲控制台準備資料

  1. 登入 阿里雲簡訊服務控制台,首次使用需要開通。

  2. 申請簡訊簽名:進入 國內訊息 → 簽名管理 → 新增簽名。企業使用者建議填寫營業執照上的公司簡稱,個人使用者只能用個人姓名、App 名稱等。

  3. 申請簡訊範本:進入 國內訊息 → 範本管理 → 新增範本

    • 範本類型選「通知簡訊」(告警情境不能選「行銷簡訊」);

    • 重點:變數名稱要叫 incident,因為夜鶯預先設定的請求內容裡寫的是 TemplateParam = {"incident":"故障{{$tpl.incident}},請及時處理"}——也就是說「故障 + 規則名 + ,請及時處理」這一整段會作為 ${incident} 的取值傳給阿里雲;

    • 建議的範本內容(最簡單):

      您有一條告警 ${incident}
      

      審核通過後使用者手機收到的簡訊是:【你的簽名】您有一條告警 故障CPU使用率超門檻,請及時處理

    • 提交審核,通過後得到 SMS_XXXXXXXX

  4. RAM 存取控制 建立子帳號,授予 AliyunDysmsFullAccess 權限,記下 AccessKey ID / AccessKey Secret

第二步:在夜鶯新建阿里雲簡訊通知媒介

  1. 登入夜鶯 → 左側選單 通知 → 通知媒介

  2. 在左側類型面板中點擊 阿里雲簡訊,進入新建頁面(URL /notification-channels/add?ident=ali-sms)。

  3. 填寫基礎資訊:

    阿里雲簡訊基礎設定

    區塊 欄位 是否需要修改 說明
    基礎設定 名稱 需要 例如 阿里雲簡訊
    變數設定 聯絡方式 保持預設 Phone 簡訊以使用者的手機號碼作為 $sendto
    HTTP 設定 URL 保持預設 https://dysmsapi.aliyuncs.com
    HTTP 設定 請求方法 POST
    HTTP 設定 請求標頭 保持預設 Content-Type: application/jsonHost: dysmsapi.aliyuncs.com簽章時需要,請勿刪除
  4. 往下找到「請求參數」,把預先設定的欄位裡的佔位符替換成你的實際值:

    阿里雲簡訊請求參數

    參數名稱 說明
    AccessKeyId 你的 AK ID 第一步 RAM 控制台取得的 LTAI5t...
    AccessKeySecret 你的 AK Secret 對應的 Secret
    PhoneNumbers {{ $sendto }} 保持預設,發送時會替換為接收人手機號碼
    SignName 你的簡訊簽名 第一步審核通過的簽名名稱,完全照抄,一個字都不能差
    TemplateCode SMS_XXXXXXXX 第一步審核通過的範本編號
    TemplateParam {"incident":"故障{{$tpl.incident}},請及時處理"} JSON 字串;左邊 key(這裡是 incident)必須與阿里雲範本裡的 ${xxx} 變數名稱完全一致{{$tpl.incident}} 來自系統內建的 Aliyun SMS 訊息範本(預設為 {{$event.RuleName}}

    夜鶯後端會自動使用你填寫的 AK/SK 計算 ACS3-HMAC-SHA256 簽章,並在呼叫前把 AccessKeyId / AccessKeySecret 從 query 中移除,不會以明文形式出現在實際請求中。

  5. 點擊 儲存

第三步:為使用者設定手機號碼 & 通知規則

  1. 進入 人員組織 → 使用者管理,為需要接收簡訊的使用者填寫手機號碼欄位(11 位中國手機號碼;國際號碼需另外開通國際簡訊)。
  2. 進入 通知 → 通知規則 → 新增
    • 通知媒介:選擇阿里雲簡訊媒介;
    • 訊息範本:選系統內建的 Aliyun SMS——它的 incident 欄位預設渲染為 {{$event.RuleName}},搭配預設的請求內容 TemplateParam = {"incident":"故障{{$tpl.incident}},請及時處理"},最終送到阿里雲的 ${incident} 取值約等於 故障<規則名>,請及時處理
    • 接收人 / 接收團隊:選擇目標使用者;
    • 適用級別 / 適用時段:依需求過濾;
    • 儲存。
  3. 點擊「通知測試」,若參數正確,手機會在數秒內收到一條 【你的簽名】 您有一條告警 xxx 的簡訊。

阿里雲側的計費與合規

  • 簡訊按條計費,每 70 字一條,超過的內容會拆分成多條收費。具體價格參考 阿里雲簡訊定價
  • 簡訊內容必須與範本審核時的文案完全一致。範本裡沒有的文字、或被審核駁回的關鍵字,阿里雲會拒發(回傳 isv.OUT_OF_SERVICEisv.ILLEGAL_CONTENT)。
  • 每個簽名 + 範本對同一手機號碼有頻率限制(預設 1 分鐘 5 條、1 小時 10 條、24 小時 50 條,通知類範本可工單申請調整)。

常見問題

Q1:回傳 SignatureDoesNotMatch

A:AK Secret 填錯;或簽名內容包含不可見字元(換行、空格)。

Q2:回傳 isv.SMS_SIGNATURE_ILLEGAL / 簽名不合法

A:SignName 參數值與實際審核通過的簽名不一致,請檢查空格、標點、中英文括號。簽名欄位必須嚴格一致

Q3:回傳 isv.OUT_OF_SERVICE / isv.ILLEGAL_CONTENT

A:範本內容與審核時不符,或含有敏感詞。回到阿里雲控制台,點進範本詳情查看「原始範本內容」,把 TemplateParam 填入的值控制在與範本一致的上下文中。

Q4:回傳 isv.MOBILE_NUMBER_ILLEGAL

A:使用者填的手機號碼格式不對。國內號碼只填 11 位(不帶 +86);國際號碼需走 SendMessageToGlobe(不同 API,需另建一個通知媒介、手動修改 URL 與 action)。

Q5:我希望簡訊裡同時出現告警規則名 + 觸發值 + 時間,但範本只接受一個變數?

A:

  • 方法一:申請一個包含多個變數的範本,例如 【${name}】 ${level} 告警:${detail},然後在 TemplateParam 裡分別賦值;
  • 方法二:讓 {{$tpl.incident}} 在訊息範本裡拼接成一行緊湊文字(不超過 20 字),直接塞到一個變數裡發送。

Q6:一次告警想群發給多人?

A:阿里雲 SendSms 單次最多支援 1000 個手機號碼,但夜鶯目前是按接收人逐一呼叫,一人一次。人數較多時建議適當拉長「重試間隔」以避免頻率限制。

參考資料

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云