腾讯云语音
通过腾讯云语音服务(VMS · SendTtsVoice)给值班人员打电话播报告警,新人可按步骤直接完成配置。
概述
腾讯云语音通知媒介利用腾讯云 VMS(语音消息服务) · SendTtsVoice API,把告警以 TTS(文字转语音)方式自动拨打到值班人员手机。用于对时效性要求最高的严重告警——电话比短信、IM 更能把人叫醒。
- 适用场景:夜间/节假日的 P0 级告警、需要强制触达的故障通知。
- 你需要准备:
- 一个已实名认证、开通语音消息 VMS 的腾讯云账号;
- 腾讯云 SecretId / SecretKey(建议用 CAM 子账号);
- 已审核通过的 语音模板
TemplateId; - 已创建的 VoiceSdkAppid(语音应用 ID,VMS 控制台里创建)。
- 整个配置分三步:①在腾讯云开通 VMS 并申请语音模板 → ②在夜莺新建腾讯云语音通知媒介 → ③用户填手机号、通知规则里选接收人。
腾讯云 VMS 模板/签名需要工单审核,周期 1~3 个工作日。
第一步:在腾讯云控制台准备资料
- 登录 腾讯云语音消息控制台,首次使用需开通服务。
- 创建语音应用:进入 应用管理 → 创建应用,得到 VoiceSdkAppid(7 位数字)。
- 创建语音模板:
- 在 应用管理 → 你的应用 → 正文模板,申请一个 TTS 模板;
- 关键:模板只能有一个变量
{1},因为夜莺预置的请求体里写的是TemplateParamSet = ["{{$tpl.content}}"]——只传了一个值,对应模板里的{1}。 - 把固定话术写在模板里,让
{1}只放变化部分:
然后到夜莺 → 消息模板 → 复制一份您有一条告警,{1},请及时处理Tencent Voice,把content字段改短(例如改成{{$event.RuleName}})。 - 提交审核,通过后得到
TemplateId(一串数字,如1234567)。
- 在 CAM 访问管理 · 子账号 创建一个子账号,授予策略
QcloudVMSFullAccess(或等效权限),记下 SecretId / SecretKey(仅创建时显示一次)。
第二步:在夜莺新建腾讯云语音通知媒介
-
登录夜莺 → 左侧菜单 通知 → 通知媒介。
-
在左侧类型面板中点击 腾讯云语音,进入新建页面(URL
/notification-channels/add?ident=tx-voice)。 -
填写基础信息:

区块 字段 是否需要改 说明 基础配置 名称 需要 例如 腾讯云语音变量配置 联系方式 保持默认 Phone发送时 $sendto取用户的手机号HTTP 配置 URL 保持默认 https://vms.tencentcloudapi.com(VMS 固定域名)HTTP 配置 请求方法 POST -
请求头部分,除了常规的
Content-Type / Host外,腾讯云特有的鉴权字段也都放在这里——这是唯一需要你改的几个:
参数名 值 是否需要改 Content-Typeapplication/json保持默认 Hostvms.tencentcloudapi.com保持默认 Secret_ID你的 SecretId 需要改,第一步 CAM 拿到的 AKID Secret_Key你的 SecretKey 需要改 Servicevms保持默认 X-TC-ActionSendTtsVoice保持默认 X-TC-Regionap-beijing按语音应用所在地域改,常见 ap-guangzhou/ap-beijing/ap-nanjingX-TC-Version2020-09-02保持默认(API 版本) 说明:
Secret_ID/Secret_Key虽然是填在"请求头"里,但夜莺后端在发送前会把它们取出来计算 TC3-HMAC-SHA256 签名,并从实际请求头中移除——不会明文传给腾讯云。 -
滚到"请求体",默认模板已经帮你写好:
{ "CalledNumber": "+86{{ $sendto }}", "TemplateId": "需要改为实际的模板id", "TemplateParamSet": ["{{$tpl.content}}"], "VoiceSdkAppid": "需要改为实际的appid" }把其中的占位符替换成你的值:
字段 值 说明 CalledNumber+86{{ $sendto }}保持默认——必须带 +86前缀(国际 E.164 格式)TemplateId你的模板 ID 第一步审核通过的数字 ID TemplateParamSet["{{$tpl.content}}"]按模板变量顺序对应一个数组——夜莺默认只传一个值,因此你的腾讯云模板只能有一个 {1}。{{$tpl.content}}来自系统自带的Tencent Voice消息模板,默认渲染为S<级别>{Triggered/Recovered}<规则名>VoiceSdkAppid你的 AppID 第一步创建的 7 位数字 -
点击 保存。
第三步:用户配置手机号 & 通知规则
- 进入 人员组织 → 用户管理,为接电话的用户填写手机号(11 位国内号码,不带 +86 前缀,前缀会由请求体自动拼上)。
- 进入 通知 → 通知规则 → 新增:
- 通知媒介:选腾讯云语音媒介;
- 消息模板:选系统自带的
Tencent Voice——它的content字段默认渲染为S{{$event.Severity}}{{if $event.IsRecovered}}Recovered{{else}}Triggered{{end}}{{$event.RuleName}},例如S1Triggered CPU使用率超阈值。配合默认请求体TemplateParamSet = ["{{$tpl.content}}"],这串文本会作为{1}的取值发给腾讯云; - 注意
{{$tpl.content}}的长度必须在腾讯云单变量长度限制内(默认 ≤ 30 字符),告警规则名很长时建议复制一份Tencent Voice模板改短再用; - 接收人 / 接收团队:选目标用户;
- 适用级别:建议只勾一级(Critical);
- 保存。
- 点击"通知测试",目标手机应在 10 秒内响铃并播报一段 TTS 告警语音。
腾讯云侧计费与配额
- VMS 按通话时长/条数计费,详见 腾讯云 VMS 定价。
- 对同一手机号有日呼叫次数上限(默认较低),可工单申请调整。
- 若对方按键(如按 1 认领),腾讯云会回调预留的 URL——夜莺当前默认不接入此回调;需要认领流程可自行实现。
常见问题
Q1:返回 AuthFailure.SignatureFailure?
A:Secret_Key 错了,或机器时间漂移过大(TC3 签名对时间敏感,超过 ±5 分钟即判失败)。检查服务器 NTP 时间是否准。
Q2:返回 UnauthorizedOperation / CAM?
A:子账号没挂 QcloudVMSFullAccess 策略;或者你用的 SecretId 属于没开通 VMS 的账号。
Q3:返回 FailedOperation.InvalidTemplate / 模板审核未通过?
A:检查 TemplateId 是否写对;登录 VMS 控制台看模板状态是否为"审核通过"。
Q4:返回 FailedOperation.InsufficientBalance?
A:账户余额不足。充值或设置充值告警。
Q5:返回 InvalidParameterValue.InvalidCalledNumber?
A:CalledNumber 必须是 E.164 格式,国内号码写成 +861XXXXXXXXXX。夜莺的默认模板已经帮你在 {{ $sendto }} 前拼了 +86,别再双写。
Q6:TemplateParamSet 数组长度和模板不匹配会报什么?
A:腾讯云会返回 InvalidParameterValue.TemplateParamSet。请打开 VMS 模板,数一下 {1} {2} {3} 有几个,数组长度要和它相等;并且不能有空串。
Q7:多个接收人会怎么调度?
A:SendTtsVoice 单次只呼一个号码,夜莺会按接收人逐一调用。人数多时适当拉大"重试间隔"(例如 500ms)避免触发并发限流。
Q8:我用的是海外账号 / 国际号码?
A:腾讯云国际语音服务(SendCallVoice 等)属于不同产品线,夜莺默认 ident 不覆盖。需要国际语音请在媒介里把 URL 改成国际 endpoint、X-TC-Action 改为对应接口名,并按国际号码格式填 CalledNumber。