阿里云短信

通过阿里云短信服务(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 个手机号,但夜莺目前是按接收人循环调用,一人一次。人数多时适当拉大"重试间隔"避免频控。

参考资料

更新时间 2026-04-25

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