透過阿里雲語音服務 SingleCallByTts 撥打電話給值班同仁播報告警,新手可依步驟逐步完成設定。

概述

阿里雲語音通知媒介利用 阿里雲 語音服務(VMS) · 語音通知(SingleCallByTts) API,把告警以 TTS(文字轉語音)方式自動撥打到值班人員手機。一般用於「必須叫醒人」的 P0 級告警。

  • 適用情境:夜間/假日的嚴重告警,電話比 IM 更容易把人叫醒。
  • 你需要準備:
    • 一個已實名認證、已開通語音服務的阿里雲帳號;
    • 阿里雲 AccessKey ID / AccessKey Secret(建議使用 RAM 子帳號,僅授予語音服務的發送權限);
    • 通過審核的 TTS 語音範本TtsCode / TTS_1234567);
    • (選填)已申請的被叫顯號CalledShowNumber),若未申請,將顯示阿里雲官方號碼。
  • 整個設定分三步:①在阿里雲開通語音服務並申請 TTS 範本 → ②在夜鶯新建阿里雲語音通知媒介 → ③為使用者設定手機號碼,並在通知規則裡選擇接收人

阿里雲語音服務對於 TTS 範本、顯號等需要工單審核,週期通常 1~3 個工作日,建議提前 1 週啟動。

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

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

  2. 建立 TTS 範本(語音範本):

    • 進入 國內語音 → 語音範本管理 → 新增範本

    • 範本類型選「文字轉語音範本」;

    • 重點:變數名稱要叫 incident,因為夜鶯預先設定的請求內容裡寫的是 TtsParam = {"incident":"故障{{$tpl.incident}},一鍵認領請按1"}——也就是說,最終會把「故障 + 規則名 + ,一鍵認領請按1」這一整段文字作為 ${incident} 的取值傳給阿里雲;

    • 建議的範本內容(最簡單、最能避免變數長度問題):

      您有一條告警 ${incident}
      

      審核通過後實際播報會是:您有一條告警 故障CPU使用率超門檻,一鍵認領請按1

    • 提交審核,通過後得到範本編號 TTS_XXXXXXXX

  3. (選填)申請被叫顯號:進入 號碼管理 → 號碼申請,申請一個專屬號碼 CalledShowNumber。未申請的話,將使用阿里雲預設外撥號碼。

  4. RAM 存取控制 建立一個子帳號,授予權限 AliyunDyvmsFullAccess記下 AccessKey ID 與 AccessKey Secret(Secret 只顯示一次,務必妥善保存)。

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

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

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

  3. 填寫基礎資訊:

    阿里雲語音基礎設定

    區塊 欄位 是否需要修改 說明
    基礎設定 名稱 需要 例如 阿里雲語音,在通知規則裡選擇媒介時看到的就是這個名稱
    變數設定 聯絡方式 保持預設 Phone 語音通知必須以使用者的手機號碼作為 $sendto
    HTTP 設定 URL 保持預設 https://dyvmsapi.aliyuncs.com(語音服務固定網域)
    HTTP 設定 請求方法 POST
    HTTP 設定 請求標頭 保持預設 Content-Type: application/jsonHost: dyvmsapi.aliyuncs.com簽章時需要,請勿刪除
  4. 往下捲動到「請求參數」,這裡是唯一需要修改的地方

    阿里雲語音請求參數

    把預先設定的欄位裡的佔位符替換成你的實際值:

    參數名稱 說明
    AccessKeyId 你的 AK ID 在第一步 RAM 控制台取得的 LTAI5t...
    AccessKeySecret 你的 AK Secret 對應的 Secret,請妥善保存切勿外流
    CalledNumber {{ $sendto }} 保持預設,發送時會替換成接收人的手機號碼
    CalledShowNumber 你的顯號 或 留空 未申請顯號就把這一整列刪掉,阿里雲會以預設號碼撥出
    TtsCode TTS_XXXXXXXX 第一步申請到的語音範本編號
    TtsParam {"incident":"故障{{$tpl.incident}},一鍵認領請按1"} 範本裡的變數賦值,JSON 字串;左邊 key(這裡是 incident)必須與阿里雲 TTS 範本裡的 ${xxx} 變數名稱完全一致{{$tpl.incident}} 來自系統內建的 Aliyun Voice 訊息範本(預設為 {{$event.RuleName}}

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

  5. 點擊 儲存

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

  1. 進入 人員組織 → 使用者管理,為需要接電話的使用者填寫手機號碼欄位(必須是 11 位中國手機號碼;如需國際漫遊請在阿里雲單獨開通)。
  2. 進入 通知 → 通知規則 → 新增
    • 通知媒介:選擇阿里雲語音媒介;
    • 訊息範本:選系統內建的 Aliyun Voice——它的 incident 欄位預設渲染為 {{$event.RuleName}}(僅規則名,最短)。搭配預設請求內容 TtsParam = {"incident":"故障{{$tpl.incident}},一鍵認領請按1"},最終送到阿里雲的變數值約等於 故障<規則名>,一鍵認領請按1
    • 接收人 / 接收團隊:選擇目標使用者(使用者必須已填手機號碼);
    • 適用級別:建議只勾一級告警(Critical);
    • 儲存。
  3. 點擊「通知測試」,測試機應在 10 秒內響起並播報一段 TTS 告警語音。

阿里雲側的計費與配額

  • 語音通知按通話時長計費,具體價格參考 阿里雲語音服務定價
  • 每個自然日同一號碼呼叫次數有預設上限(可工單申請調高)。被叫接通率、接聽時長都可在阿里雲控制台的「用量統計」中查看。
  • 接通後若對方按鍵(例如按「1」認領),阿里雲會把按鍵事件回呼到你預留的回呼位址——夜鶯 v8 預設處理這種回呼;如果確需認領流程,需要自行接收回呼 Webhook。

常見問題

Q1:回傳 InvalidAccessKeyId.NotFound / SignatureDoesNotMatch

A:AK 填錯或 Secret 填錯。常見原因:

  • 把子帳號的 Display Name 當成 AK ID 填了;
  • 貼上 AK Secret 時帶了多餘的空格/換行;
  • 子帳號所在的 RAM 策略未授權語音服務,AliyunDyvmsFullAccess 沒掛上去。

Q2:回傳 isv.SMART_INVALID_APP_KEY / TtsCode Invalid

A:TtsCode 填錯或語音範本未審核通過。登入語音服務控制台 → 語音範本管理,確認範本狀態為 審核通過

Q3:TtsParam 報錯 TtsParam variable not match

A:TtsParam 裡的 key 必須與語音範本裡 ${xxx} 部分完全一樣,並且所有變數都要給值。例如範本 您有一條告警 ${incident},請按 ${button} 認領TtsParam 必須寫成 {"incident":"...","button":"1"}

Q4:isv.MOBILE_NUMBER_ILLEGAL

A:使用者填的手機號碼格式不對。語音服務要求不帶國碼的 11 位中國手機號碼;國際號碼需單獨工單申請。

參考資料

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