云服务器内容精选

  • Go语言 package demo import ( "bytes" "crypto" "crypto/rsa" "crypto/x509" "encoding/base64" "encoding/json" "encoding/pem" "fmt" "io/ioutil" ) type Message struct { Signature string `json:"signature"` Subject *string `json:"subject"` TopicUrn string `json:"topic_urn"` MessageId string `json:"message_id"` SignatureVersion string `json:"signature_version"` Type string `json:"type"` Message string `json:"message"` SubscribeUrl string `json:"subscribe_url"` UnsubscribeUrl string `json:"unsubscribe_url"` SigningCertUrl string `json:"signing_cert_url"` Timestamp string `json:"timestamp"` } func VerifyMessage(pemFile string, message string) bool { msg := Message{} err := json.Unmarshal([]byte(message), &msg) if err != nil { fmt.Println("Convert json to struct failed") return false } pemContent, err := ioutil.ReadFile(pemFile) if err != nil { fmt.Println("Read pem file failed") return false } certDerblock, _ := pem.Decode(pemContent) if certDerblock == nil { fmt.Println("Decode pem file failed") return false } cert, err := x509.ParseCertificate(certDerblock.Bytes) if err != nil { fmt.Println("Parse cert failed") return false } msgString := buildMessage(&msg) msgHash := crypto.SHA256.New() msgHash.Write([]byte(msgString)) msgHashSum := msgHash.Sum(nil) decodeSign, _ := base64.StdEncoding.DecodeString(msg.Signature) publicKey := cert.PublicKey.(*rsa.PublicKey) err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, msgHashSum, decodeSign) if err != nil { fmt.Println("Verify failed") return false } else { fmt.Println("Verify success") return true } } func buildMessage(msg *Message) string { if msg.Type == "Notification" { return buildNotificationMessage(msg) } else if msg.Type == "SubscriptionConfirmation" || msg.Type == "UnsubscribeConfirmation" { return buildSubscriptionMessage(msg) } return "" } func buildNotificationMessage(msg *Message) string { buf := bytes.Buffer{} buf.WriteString("message\n" + msg.Message + "\n") buf.WriteString("message_id\n" + msg.MessageId + "\n") // msg中存在Subject字段不存在的场景,需要特殊处理 if msg.Subject != nil { buf.WriteString("subject\n" + *msg.Subject + "\n") } buf.WriteString("timestamp\n" + msg.Timestamp + "\n") buf.WriteString("topic_urn\n" + msg.TopicUrn + "\n") buf.WriteString("type\n" + msg.Type + "\n") return buf.String() } func buildSubscriptionMessage(msg *Message) string { buf := bytes.Buffer{} buf.WriteString("message\n" + msg.Message + "\n") buf.WriteString("message_id\n" + msg.MessageId + "\n") buf.WriteString("subscribe_url\n" + msg.SubscribeUrl + "\n") buf.WriteString("timestamp\n" + msg.Timestamp + "\n") buf.WriteString("topic_urn\n" + msg.TopicUrn + "\n") buf.WriteString("type\n" + msg.Type + "\n") return buf.String() } 该示例代码已在go 1.15版本上测试通过。
  • HTTP(S)订阅确认消息的格式 添加HTTP(S)订阅终端以后,SMN会向订阅终端推送一条订阅确认的消息,下面将描述消息的HTTP Content,它是JSON格式的字符串,其中包括subscribe_url值,订阅确认需要GET请求subscribe_url地址进行确认,具体JSON字段说明如表2所示。 表2 HTTP(S)订阅确认消息的格式参数说明 参数 说明 type 消息类型,SubscriptionConfirmation。 signature 签名信息。 签名字段包括message,message_id,subscribe_url,timestamp,topic_urn和type,具体签名信息校验,请参见校验消息签名。 topic_urn 主题的唯一标识,表示消息归属的主题。 message_id 消息唯一标识。 signature_version 签名的版本信息,目前是V1。 message 订阅确认消息的描述。 subscribe_url 订阅确认需要访问的URL。 signing_cert_url 用于消息签名的证书URL,不需要鉴权,可直接访问。 timestamp 消息第一次发送的时间戳。 HTTP(S)订阅确认消息样例如下: { "signature": "ViE96uGbBkl+S8eWqgebi5KdmRht2U8+Rs88yuyMHq1k4h3jUkcDZ6HCqTqdpJ8nrLcdqETyyEiOQyTszJdU05z+LhfE8jerCCdSbL4zeInVkydHh0kcCRWmORye0/EuQ/gLC1UIXwvUsqbUCPnBRhNFXOeXMOPPCzK+d04xjy4QHd1H/bHxgsY3AlTe0gCFT068Zru7OK6w9aQaY44mXnN3OWGmBmoHyFab5TRXLSQNz/9u/Vj646cQMMaI0PPQ30QzGYD0MtzgDZi12m8jMTHAnMkTEcbLaEgaqmaoEnATSpEcspFKNXv2skwk7rsVakMOISpMH3+qC6RzhETA2A==", "topic_urn": "urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic", "message_id": "d86c201092574e71a3ca85826652c58b", "signature_version": "v1", "type": "SubscriptionConfirmation", "message": "You are invited to subscribe to topic: urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic. To confirm this subscription, please visit the subscribe_url included in this message. The subscribe_url is valid only within 48 hours.", "subscribe_url": "https://console.xxx.com/smn/subscription/unsubscribe?subscription_urn=urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic:653e212a43884f7188ca656c537e31ce", "signing_cert_url": "https://smn.cn-north-9.myhuaweicloud.com/smn/SMN_cn-north-9_94f60ccdfbee4588aa4d555935a56ba3.pem", "timestamp": "2019-08-12T22:40:56Z" }
  • HTTP(S)取消订阅消息的格式 HTTP(S)订阅终端取消订阅确认后,终端将收到SMN推送的取消订阅确认消息,下面将描述HTTP Content信息,它是JSON串,具体字段说明如表4所示。 表4 HTTP(S)取消订阅消息的格式参数说明 参数 说明 type 消息类型,UnsubscribeConfirmation。 signature 签名信息。 签名字段包括message,message_id,subscribe_url、timestamp,topic_urn和type,具体签名信息校验,请参见校验消息签名。 topic_urn 主题的唯一标识,表示消息归属的主题。 message_id 消息唯一标识。 signature_version 签名的版本信息,目前是V1。 message 取消订阅确认消息的描述。 subscribe_url 再次订阅确认需要访问的URL。 signing_cert_url 用于消息签名的证书URL。 timestamp 消息第一次发送的时间戳。 HTTP(S)取消订阅消息样例如下: { "signature": "ViE96uGbBkl+S8eWqgebi5KdmRht2U8+Rs88yuyMHq1k4h3jUkcDZ6HCqTqdpJ8nrLcdqETyyEiOQyTszJdU05z+LhfE8jerCCdSbL4zeInVkydHh0kcCRWmORye0/EuQ/gLC1UIXwvUsqbUCPnBRhNFXOeXMOPPCzK+d04xjy4QHd1H/bHxgsY3AlTe0gCFT068Zru7OK6w9aQaY44mXnN3OWGmBmoHyFab5TRXLSQNz/9u/Vj646cQMMaI0PPQ30QzGYD0MtzgDZi12m8jMTHAnMkTEcbLaEgaqmaoEnATSpEcspFKNXv2skwk7rsVakMOISpMH3+qC6RzhETA2A==", "topic_urn": "urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic", "message_id": "d86c201092574e71a3ca85826652c58b", "signature_version": "v1", "type": "UnsubscribeConfirmation", "message": "You are unsubscribed from topic: urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic. To subscribe to this topic again, please visit the subscribe_url included in this message. The subscribe_url is valid only within 48 hours.", "subscribe_url": "https://console.xxx.com/smn/subscription/unsubscribe?subscription_urn=urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic:653e212a43884f7188ca656c537e31ce", "signing_cert_url": "https://smn.cn-north-9.myhuaweicloud.com/smn/SMN_cn-north-9_94f60ccdfbee4588aa4d555935a56ba3.pem", "timestamp": "2019-08-12T22:40:56Z" }
  • HTTP(S)推送消息的格式 HTTP(S)订阅终端订阅确认后,终端将收到SMN推送的消息,下面将描述HTTP Content信息,它是JSON串,具体字段说明如表3所示。 表3 HTTP(S)推送消息的格式参数说明 参数 说明 type 消息类型,Notification。 signature 签名信息。 签名字段包括message,message_id,subject, timestamp,topic_urn和type,具体签名信息校验,如果subject不存在,则不参与校验,请参见校验消息签名。 subject 消息标题。 topic_urn 主题的唯一标识,表示消息归属的主题。 message_id 消息唯一标识。 signature_version 签名的版本信息,目前是V1。 message 订阅推送消息的描述。 unsubscribe_url 通过访问该链接可以取消终端订阅。 signing_cert_url 用于消息签名的证书URL。 timestamp 消息第一次发送的时间戳。 HTTP(S)推送消息样例如下: { "signature": "ViE96uGbBkl+S8eWqgebi5KdmRht2U8+Rs88yuyMHq1k4h3jUkcDZ6HCqTqdpJ8nrLcdqETyyEiOQyTszJdU05z+LhfE8jerCCdSbL4zeInVkydHh0kcCRWmORye0/EuQ/gLC1UIXwvUsqbUCPnBRhNFXOeXMOPPCzK+d04xjy4QHd1H/bHxgsY3AlTe0gCFT068Zru7OK6w9aQaY44mXnN3OWGmBmoHyFab5TRXLSQNz/9u/Vj646cQMMaI0PPQ30QzGYD0MtzgDZi12m8jMTHAnMkTEcbLaEgaqmaoEnATSpEcspFKNXv2skwk7rsVakMOISpMH3+qC6RzhETA2A==", "topic_urn": "urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic", "message_id": "d86c201092574e71a3ca85826652c58b", "signature_version": "v1", "type": "Notification", "message": "{\"enterpriseProjectId\": \"0\", \"eventTime\": \"2019-08-12 22:40:55.040632\", \"chargingMode\": \"postPaid\", \"cloudserviceType\": \"xxx.service.type.bandwidth\", \"eventType\": 1, \"regionId\": \"region01\", \"tenantId\": \"057eefe55400d2742f8cc0017870ceef\", \"resourceType\": \"xxx.resource.type.bandwidth\", \"resourceSpecCode\": \"19_bgp\", \"resourceSize\": 10, \"resourceId\": \"e091f1b1-08ef-4e2b-a27e-f85e4c19026a\", \"resouceSizeMeasureId\": 15, \"resourceName\": \"elbauto_2019_08_13_06_40_46\"}", "unsubscribe_url": "https://console.xxx.com/smn/subscription/unsubscribe?subscription_urn=urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic:653e212a43884f7188ca656c537e31ce", "signing_cert_url": "https://smn.cn-north-9.myhuaweicloud.com/smn/SMN_cn-north-9_94f60ccdfbee4588aa4d555935a56ba3.pem", "timestamp": "2019-08-12T22:40:56Z" }
  • 操作场景 接收SMN服务发送的HTTP(S)消息时,终端证书的CN名称请参考业界规范,部分特殊字符可能导致https消息发送失败。 描述SMN服务向HTTP(S)终端发送消息的格式,您可以通过消息头部信息中的消息类型来区分消息格式。消息格式包括:HTTP(S)订阅确认消息的格式、HTTP(S)推送消息的格式和HTTP(S)取消订阅消息的格式三种消息格式,HTTP/HTTPS协议均为POST方式。 当SMN服务向HTTP(S)终端发送消息时,头部包括请求X-SMN-MESSAGE-TYPE,X-SMN-MESSAGE-ID,X-SMN-TOPIC-URN,X-SMN-SUBSCRIPTION-URN,如表1所示。 表1 消息HTTP(S)头部参数说明 参数 说明 X-SMN-MESSAGE-TYPE 消息类型,消息类型分别有: SubscriptionConfirmation Notification UnsubscribeConfirmation X-SMN-MESSAGE-ID 消息唯一标识。 X-SMN-TOPIC-URN 主题的唯一标识,表示消息归属的主题。 X-SMN-SUBSCRIPTION-URN 订阅终端的唯一标识。 只在HTTP(S)推送消息和HTTP(S)取消订阅消息时,设置此字段。 关于HTTP(S)头部字段的说明: RFC 7230 章节3.2中规定,HTTP(S)头部的字段名称不区分大小写。 RFC 7540 章节8.1.2中规定,对于支持HTTP/2的服务端,头部字段信息需要统一改为全小写。 对于用户自定义的HTTP(S)头部字段,SMN也将采用上述的处理策略。 用户如果从HTTP(S)头部中获取相关字段,建议采用不区分大小写的方式。
  • JSON格式体说明 JSON格式主要用来处理用户想对不同的订阅者类型发送不同的消息,目前支持的协议Default、HTTP、HTTPS、email、FunctionGraph(函数)、FunctionGraph(工作流),其中Default是必须的,Email的内容将发给邮件类型的订阅者,其它协议依次如下所示: { "default": "Dear Sir or Madam, this is a default message.", "email": "Dear Sir or Madam, this is an email message.", "http": "{'message':'Dear Sir or Madam, this is an HTTP message.'}", "https": "{'message':'Dear Sir or Madam, this is an HTTPS message.'}", "sms": "This is an SMS message.", "functionstage": "Dear Sir or Madam, this is a functiongraph(function) message.", "functiongraph": "Dear Sir or Madam, this is a functiongraph(workflow) message." } 推荐将Default设置为通用的消息内容,对于特殊的订阅者类型再设置相应消息内容。 以下示例展现由于短信内容长度有限制,将短信设置为特殊的消息,其中HTTP、HTTPS、Email、FunctionGraph(函数)、FunctionGraph(工作流)类型的订阅收到"Dear Sir or Madam, this is a default message."的内容,而SMS类型的订阅者收到“This is an SMS message”。 { "sms": "This is an SMS message.", "default": "Dear Sir or Madam, this is a default message." }
  • JSON消息计算 选择不同的协议,生成的JSON格式消息的大小不同。JSON格式消息的字节数包含消息框中显示的花括号、双引号、空格、回车、协议名称和消息内容累计字节数。具体字节计算方式以输入消息“This is a default message.”为例。 消息:“This is a default message.”,消息本身包含26个字节。 输入消息,选择协议,生成JSON消息时,系统默认生成Default协议的消息。 { "default": "This is a default message.", "protocol1": "This is a default message.", "protocol2": "This is a default message.", …… } 1个Default协议加上用户选择的协议个数,记为N。 消息体包含的固定字节数: 每种协议的消息包含3个空格,共N个协议:3× N = 3N 每种协议的消息包含4个双引号,共N个协议: 4 × N = 4N 每种协议的消息包含1个冒号,共N个协议:1 × N = N 每种协议的消息包含1条消息内容This is a default message.,共N个协议:26 × N = 26N 逗号(N - 1)个:1 × (N - 1) = (N - 1) 回车(N + 1)个:1 ×(N + 1) = (N + 1) 花括号2个:1 × 2 = 2 协议名称 default 1个:7 × 1 = 7 选择的协议字节数: 协议名称 HTTP 1个:4 × 1 = 4 协议名称 HTTPS1个:5 × 1 = 5 协议名称 email 1个:5 × 1 = 5 协议名称 sms 1个:3 × 1 = 3 协议名称 functionstage 1个:13 × 1 = 13 协议名称 functiongraph 1个:13 × 1 = 13 合计:36N + 9 + 选择的协议字节数 例如,您选择了“HTTP”、“HTTPS”和“email”3个协议,生成的消息如下: { "default": "This is a default message.", "email": "This is a default message.", "http": "This is a default message.", "https": "This is a default message." } 加上Default,则N的值为4,生成的JSON消息字节数计算如下: 固定字节数:36 × 4 + 9 = 153 协议名称 HTTP 1个:4 × 1 = 4 协议名称 HTTPS 1个:5 × 1 = 5 协议名称 email 1个:5 × 1 = 5 合计:153 + 4 + 5 + 5 = 167
  • 查看访问日志 当您配置了消息传输日志,可以查看消息传输日志的详细信息。 日志显示格式如下: {"message_id":"$message_id","project_id":"$project_id","topic_urn":"$topic_urn","subscriber_urn":"$subscriber_urn","protocol_name":"$protocol_name","endpoint":"$endpoint","status":"$status","http_code":$http_code,"create_time":"$create_time","send_time":"$send_time"} 不支持修改日志格式。日志字段说明如表1所示。 表1 字段说明 参数 参数类型 描述 message_id String 消息ID。 project_id String 项目ID。 topic_urn String Topic的唯一的资源标识 subscriber_urn String 订阅者的唯一资源标识。 protocol_name String 不同协议对应不同的endpoint(接受消息的接入点)。目前支持的协议包括: “email”:邮件传输协议,endpoint为邮箱地址。 “sms”:短信传输协议,endpoint为手机号码。 “functiongraph” FunctionGraph(函数)传输协议,endpoint为一个函数 “functionstage”:。FunctionStage(工作流)传输协议,endpoint为一个函数工作流 “http”、“https”:HTTP/HTTPS传输协议,endpoint为URL。 endpoint String 接受消息的接入点。 status String 消息状态。目前包括以下状态: “DELIVERED”:已送达。 “FAIL_DELIVERED”:发送失败。 “REJECTS”:已拒绝。触发流控机制。 http_code Integer HTTP返回码,仅支持HTTP/HTTPS协议消息。 create_time String 消息创建时间。时间格式为UTC时间,YYYY-MM-DDTHH:MM:SSZ。 send_time String 消息发送时间。时间格式为UTC时间,YYYY-MM-DDTHH:MM:SSZ。
  • 日志示例 {"message_id":"1ae49922602a42fc83acb9689a2eb5f4","project_id":"5a9f32e4f1ec4bbe9695ff9da51c2925","topic_urn":"urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo","subscriber_urn":"urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo:b55c3c6fa7cd471b9f24818d530a8740","protocol_name":"https","endpoint":"https://127.0.0.1:443/https","status":"DELIVERED","http_code":200,"create_time":"2022-11-01T00:00:00Z","send_time":"2022-11-01T00:00:10Z"} 以上日志示例对应的字段如下: 表2 日志示例对应的字段 参数 示例 message_id 1ae49922602a42fc83acb9689a2eb5f4 project_id 5a9f32e4f1ec4bbe9695ff9da51c2925 topic_urn urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo subscriber_urn urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo:b55c3c6fa7cd471b9f24818d530a8740 protocol_name https endpoint https://127.0.0.1:443/https status DELIVERED http_code 200 create_time 2022-11-01T00:00:00Z send_time 2022-11-01T00:00:10Z
  • 不同协议消息说明 不同的订阅协议接收到的消息包含的内容可能有所不同。 邮件和HTTP(S)终端收到的消息包含:消息主题、消息内容和取消订阅的链接。 短信终端接收到的消息只包含消息内容。 FunctionGraph(函数)终端收到的消息包含消息属性、消息标题、消息内容、主题URN等信息。消息样例类似如下。字段说明如表1所示。 { "record": [{ "event_version": "1.0", "smn": { "message_attributes": "", "subject": "Welcome", "message_id": "e6fa59c6b3e0424c9c02cbed35b680e7", "topic_urn": "urn:smn:regionId:66e0f4622d6f4e3fb2db2e495298a61a:smn_123", "type": "notification", "message": "Hello", "timestamp": "2017-08-17T10:07:14Z" }, "event_source": "smn", "event_subscription_urn": "urn:cff:regionId:66e0f4622d6f4e3fb2db2e495298a61a:function:DEFAULT:mytest:latest" }] } 表1 字段说明 字段配置项 类型 说明 record JSON对象 消息列表 event_version String 版本 message_attributes String 消息属性 subject String 消息标题 message_id String 消息ID topic_urn String 主题URN type String 消息类型 message String 消息内容 timestamp String 时间戳 event_source String 消息来源 event_subscription_urn String 订阅URN FunctionGraph(工作流)终端收到的消息包含消息标题、消息内容、主题URN等信息。消息样例类似如下。字段说明如表2所示。 { "records":[{ "event_version":"1.0", "smn":{ "topic_urn":"urn:smn:regionId:995960e6a6094fdeb00b7c9991d35791:11-16", "type":"notification", "message":"Hello", "timestamp":"2017-11-27T09:53:41Z", "subject":"test_1127", "message_id":"27d6e9e1249240288b47817bf637192b" }, "event_source":"SMN", "event_subscription_urn":"urn:smn:regionId:995960e6a6094fdeb00b7c9991d35791:11-16:dcd78adcb194431587d4992c374f8465"}] } 表2 字段说明 字段配置项 类型 说明 records JSON对象 消息列表 event_version String 版本 topic_urn String 主题URN type String 消息类型 message String 消息内容 timestamp String 时间戳 subject String 消息标题 message_id String 消息ID event_source String 消息来源 event_subscription_urn String 订阅URN 父主题: 附录
  • 支持审计的关键操作列表 在您的账户中启用云审计服务后,SMN服务的API被调用时,日志文件可能会跟踪记录该操作,并依据时间和数据的变化将日志文件转储到对象存储桶。 如果您在没有登录的情况下调用SMN的取消订阅(Unsubscribe)操作,云审计则不会记录这些操作。例如,当您需要取消订阅时,在电子邮件通知中单击取消订阅的链接,此时会在未登录的情况下调用Unsubscribe,这种情况下您的取消订阅操作则不会被云审计记录。 云审计支持的消息通知服务操作列表如表1所示。 表1 云审计支持的SMN操作列表 操作名称 资源类型 事件名称 创建主题 topic createTopic 删除主题 topic deleteTopic 更新主题 topic updateTopic 更新主题策略 topic updateTopicAttribute 删除所有主题策略 topic deleteTopicAttributes 删除指定名称的主题策略 topic deleteTopicAttributeByName 添加订阅 subscription subscribe 删除订阅 subscription delsubscribe 创建消息模板 message_template createMessageTemplate 批量创建消息模板 message_template batchCreateMessageTemplate 更新消息模板 message_template updateMessageTemplate 删除消息模板 message_template deleteMessageTemplate 创建短信签名 sms createSmsSign 删除短信签名 sms deleteSmsSign 更新短信回调事件 sms updateSmsEvent 父主题: 记录消息通知服务
  • 操作场景 消息模板指消息的固定格式。如果您要发布的消息内容丰富,并且这条消息需要多次发布,每次发布时需要变更的内容极少,此时您可以套用已创建的消息模板向订阅者发送消息。 在相同的消息模板名称下面,可创建一个或多个不同协议类型的消息模板来适配不同协议的订阅者,但必须包含一个Default协议类型的模板。不同协议类型的消息模板可以设置不同的模板内容,使用{tag}占位符代替变量。如果没有预置的Default协议的模板,将不允许发送该模板。 使用模板格式发送消息时,需要选择模板名称,名称选定后,系统会按照Default、SMS、Email、HTTP、HTTPS、FunctionGraph(函数)、FunctionGraph(工作流)的协议顺序,将该模板名称下不同协议的所有模板内容中的{tag}标签列出,重复的{tag}只列出一次,并在右侧显示拥有该{tag}的协议名称。设置{tag}值之后,消息通知服务会自动替换模板的{tag}标签为对应的参数值。如果{tag}没有设置参数值,模板内容不做替换。消息通知服务会按照模板名称和订阅者协议类型获取模板内容,如果对应订阅协议的模板内容不存在,将使用Default模板内容发送。 在这一部分中,您可以按照模板格式进行消息推送至您设定的订阅终端地址。在发送模板消息之前,您需要先创建好消息模板,关于消息模板的详细信息请参见《消息通知服务用户指南》的“消息模板管理”章节。
  • 操作场景 消息模板指消息的固定格式,发布消息时可以使用已创建的消息模板向订阅者发送消息。使用模板发送消息,发送时会自动替换模板变量为对应的参数值。 消息模板通过消息名称进行分组,消息名称下面可以根据不同的协议创建不同的模板。每个模板名称下面都必须要创建一个Default模板。当按照模板格式推送消息时,不同协议订阅者优先会选择模板名称下面对应的协议模板,如果对应的协议模板不存在,则采用默认Default的模板。如果没有预置的Default协议的模板,将不允许发送该模板。 当您需要发送模板格式的消息时,可参考本章节管理消息模板。
  • 消息通知服务支持的传输协议有哪些? 消息通知服务支持的协议有“邮件”、“短信”、“HTTP”和“HTTPS”、“FunctionGraph(函数)”、“FunctionGraph(工作流)”等。 “邮件”:消息以电子邮件形式发送到订阅的邮箱地址。 “短信”:消息以短信文本消息发送到订阅的电话号码。 “HTTP”、“HTTPS”: 消息以HTTP/HTTPS请求的形式发送到订阅的URL,目前只支持公网域名或者公网IP地址。 “FunctionGraph(函数)”:使用已发布的消息的负载调用订阅的FunctionGraph(函数)终端。 “FunctionGraph(工作流)”:使用已发布的消息触发执行订阅的FunctionGraph(工作流)终端。 语音通知:将消息转化为语音,通知到订阅的电话号码。消息内容只支持云服务推送,不支持用户直接发送语音消息。 语音只支持中国大陆部分地区拨打,具体支持地区请参考语音通话服务区域限制。 钉钉群消息:将消息通过钉钉机器人发送到钉钉群。 企业微信群消息:将消息通过企业微信群机器人发送到企业微信群。 飞书群消息:将消息通过飞书机器人发送到飞书群。 其中,“语音通知”、“钉钉群消息”、“企业微信群消息”、“飞书群消息”当前是公测功能,如果需要使用请提交工单申请开通公测。 开通公测后,会导致用户当前token失效,需要重新登录才能继续使用(使用API调用时,需要重新获取token)。 企业微信群消息,钉钉群消息,飞书群消息有发送条数限制和接收方系统故障情况,可能会导致消息发送失败。 当出现上述原因时,SMN不保证消息成功送达。
  • 取消订阅 不同的订阅协议对应不同的取消订阅方式: 短信取消订阅:因为短信长度有限,无法每次推送消息时候附带取消订阅的链接,用户需通过请求确认的链接进入WEB页面进行取消订阅。 具体流程如下: 添加订阅后,消息通知服务会向订阅终端发送订阅确认短信,如图1所示,短信中包含订阅确认的链接。 图1 订阅确认短信 单击短信中的确认链接 ,进入WEB页面提示“订阅成功”。该页面下方有提示信息:如果您不希望订阅这个主题,点击“这里”取消订阅。 图2 订阅成功 单击“这里”,进入取消订阅页面,确认待取消订阅的相关信息,包含主题名称、主题URN、订阅URN。 图3 确认取消订阅 确认无误后,单击“确定”,取消订阅成功。 图4 取消订阅成功 邮件取消订阅:消息通知服务向指定邮箱地址发送电子邮件消息,其中包含取消订阅的链接,订阅者单击进入取消订阅的页面。如果取消成功,页面会显示取消订阅成功,稍后消息通知服务会向这个订阅者发送一封确认取消订阅的邮件(48小时内有效)。如果误操作了取消订阅,可以通过该消息重新订阅。 具体流程如下: 添加订阅后,消息通知服务会向指定邮箱地址发送电子邮件消息,如图5所示,邮件中包含订阅确认的链接。 图5 订阅确认邮件 单击邮件中的“订阅确认”链接 ,进入WEB页面提示“订阅成功”。该页面下方有提示信息:如果您不希望订阅这个主题,点击“这里”取消订阅。 图6 订阅成功 单击“这里”,进入取消订阅页面,确认待取消订阅的相关信息,包含主题名称、主题URN、订阅URN。 图7 确认取消订阅 确认无误后,单击“确定”,取消订阅成功。 图8 取消订阅成功 HTTP(S)取消订阅,消息通知服务向指定的URL发送消息。消息体中包含取消订阅的链接,订阅者需要访问该链接,如果取消订阅成功,将获取HTTPS协议的200返回码,稍后消息通知服务会向这个订阅者发送一次取消订阅的消息(48小时内有效)。如果误操作了取消订阅,可以通过访问重新订阅的链接重新订阅。HTTP(S)消息头和消息体参数含义请参见HTTP(S)终端节点使用样例简介。