腾讯云短信
通过腾讯云短信服务(SendSms)把告警发送成短信,新人可按步骤直接完成配置。
概述
腾讯云短信通知媒介利用腾讯云 SMS · SendSms API,把告警以普通短信的形式下发到手机。常作为邮件/IM 的兜底通道。
- 适用场景:必须兜底通知、不装 IM 的用户、值班人员换班提醒等。
- 你需要准备:
- 已开通腾讯云短信 SMS 的账号;
- 腾讯云 SecretId / SecretKey(建议用 CAM 子账号,只授予 SMS 发送权限);
- SmsSdkAppId(短信应用 ID,SMS 控制台里创建);
- 已审核通过的 短信签名 和 短信模板。
- 整个配置分三步:①在腾讯云控制台准备应用/签名/模板 → ②在夜莺新建腾讯云短信通知媒介 → ③用户填手机号、通知规则里选接收人。
签名和模板需要工单审核(通常数小时到 1 个工作日),首次接入建议预留时间。
第一步:在腾讯云控制台准备资料
- 登录 腾讯云短信控制台。
- 创建短信应用:进入 应用管理 → 创建应用,得到 SmsSdkAppId(一串数字)。
- 创建短信签名:
签名管理 → 创建签名,按引导填写企业/个人资质审核。 - 创建短信模板:
正文模板 → 创建正文模板。- 模板类型选"通知类";
- 关键:模板只能有一个变量
{1},因为夜莺预置的请求体里写的是TemplateParamSet = ["{{$tpl.content}}"]——只传了一个值,对应{1}。 - 把固定话术写在模板里,让
{1}只放变化部分:
然后到夜莺 → 消息模板 → 复制一份您有一条 {1} 级别的告警,请及时处理Tencent SMS,把content字段改成你想填进{1}的内容。 - 审核通过后拿到
TemplateId(数字 ID)。
- 在 CAM 创建子账号,授予策略
QcloudSMSFullAccess(或自定义最小权限),记下 SecretId / SecretKey。
第二步:在夜莺新建腾讯云短信通知媒介
-
登录夜莺 → 左侧菜单 通知 → 通知媒介。
-
在左侧类型面板点击 腾讯云短信,进入新建页面(URL
/notification-channels/add?ident=tx-sms)。 -
填写基础配置:

字段 说明 名称 例如 腾讯云短信联系方式 保持默认 PhoneURL 保持默认 https://sms.tencentcloudapi.com请求方法 POST -
请求头部分,除了常规的
Content-Type / Host,腾讯云还要求填鉴权相关字段:
参数名 值 是否需要改 Content-Typeapplication/json保持默认 Hostsms.tencentcloudapi.com保持默认 Secret_ID你的 SecretId 需要改 Secret_Key你的 SecretKey 需要改 Servicesms保持默认 X-TC-ActionSendSms保持默认 X-TC-Region你的地域 需要改,例如 ap-guangzhou/ap-beijing,按短信应用所在地域填X-TC-Version2021-01-11保持默认 Secret_ID/Secret_Key不会明文发送:夜莺在发出请求前会用它们计算 TC3-HMAC-SHA256 签名,并从请求头中移除。 -
最后改"请求体",把占位符换成你的值:
{ "PhoneNumberSet": ["{{ $sendto }}"], "SignName": "需要改为实际的签名", "SmsSdkAppId": "需要改为实际的appid", "TemplateId": "需要改为实际的模板id", "TemplateParamSet": ["{{$tpl.content}}"] }字段 值 说明 PhoneNumberSet["{{ $sendto }}"]保持默认——发送时会替换成接收人的手机号;国内号码要求 E.164 格式,即 +86138XXXXXXXX(见 Q4 说明)SignName你的短信签名 第一步审核通过的签名名称,一字不差 SmsSdkAppId你的应用 ID 第一步创建的数字 ID TemplateId你的模板 ID 第一步审核通过的数字 ID TemplateParamSet["{{$tpl.content}}"]按模板变量顺序对应一个数组——夜莺默认只传一个值,因此你的腾讯云短信模板只能有一个 {1}。{{$tpl.content}}来自系统自带的Tencent SMS消息模板,默认渲染为级别状态: S<级别> {Triggered/Recovered}规则名称: <规则名> -
点击 保存。
第三步:用户配置手机号 & 通知规则
-
进入 人员组织 → 用户管理,给目标用户填写 手机号。
国内号码两种填法都可以:
- 直接 11 位
138XXXXXXXX(推荐),并在请求体PhoneNumberSet里把{{ $sendto }}改成"+86{{ $sendto }}"; - 或者直接存完整的
+86138XXXXXXXX,请求体保持默认。
- 直接 11 位
-
进入 通知 → 通知规则 → 新增:
- 通知媒介:选腾讯云短信;
- 消息模板:选系统自带的
Tencent SMS——它的content字段默认渲染为级别状态: S<级别> {Triggered/Recovered}规则名称: <规则名>,例如级别状态: S1 Triggered规则名称: CPU使用率超阈值。配合默认请求体TemplateParamSet = ["{{$tpl.content}}"],这串文本会作为{1}的值发给腾讯云; - 注意短信整体长度按 70 字符/条计费,告警规则名 + 级别状态过长时可以复制一份
Tencent SMS模板改短; - 接收人 / 接收团队:选目标用户;
- 适用级别 / 适用时段:按需过滤;
- 保存。
-
点击"通知测试",手机应在数秒内收到一条
【签名】您有一条告警 xxx的短信。
计费与合规
- 按成功发送条数计费,每 70 字/条。详见 腾讯云 SMS 定价。
- 每个手机号有频控(默认 1 分钟 1 条,同签名+模板 1 天 10 条),通知类模板可工单申请调高。
- 实际发送内容必须和模板审核内容完全一致,否则会被拦截(
FailedOperation.InsertAuthFail/FailedOperation.TemplateIncorrectOrUnapproved)。
常见问题
Q1:AuthFailure.SignatureFailure?
A:Secret_Key 错了或本机时间漂移过大。确保服务器时间和 NTP 同步。
Q2:FailedOperation.TemplateIncorrectOrUnapproved / 模板未审核?
A:
TemplateId填错;- 模板没审核通过;
TemplateParamSet数组长度与模板变量数不一致。
Q3:FailedOperation.SignatureIncorrectOrUnapproved / 签名错误?
A:SignName 与审核通过的签名不完全一致(注意空格、括号、中英文字符)。
Q4:InvalidParameterValue.InvalidPhoneNumber?
A:腾讯云要求手机号为 E.164 格式(+86...)。两种做法:
- 用户的"手机号"字段本身存成
+86138XXXXXXXX; - 或在请求体里把
{{ $sendto }}改成+86{{ $sendto }}自动拼接。
Q5:FailedOperation.InsufficientBalance?
A:账户余额不足,充值并在控制台设置余额告警。
Q6:LimitExceeded.PhoneNumberCountLimit 单次号码数超限?
A:SendSms 单次最多 200 个号码。夜莺默认是按接收人循环调用,一人一次——如果要一次请求打包多个号码,可以把请求体改成:
{
"PhoneNumberSet": {{batchContactsJsonMarshal $sendtos}},
"SignName": "...",
"SmsSdkAppId": "...",
"TemplateId": "...",
"TemplateParamSet": ["{{$tpl.content}}"]
}
注意:这种模式下所有号码收到的短信内容完全一致。
Q7:国际短信?
A:国际号码直接以国家码拼接即可(如 +6587654321);但需要在腾讯云控制台单独开通国际短信,并使用国际短信模板。