华为云用户手册

  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 virtual_gateway VirtualGateway object 虚拟网关对象 request_id String 操作请求ID 表5 VirtualGateway 参数 参数类型 描述 id String 虚拟网关的ID vpc_id String 虚拟网关接入的VPC的ID tenant_id String 实例所属项目ID 最小长度:32 最大长度:32 name String 虚拟网关的名称 最小长度:0 最大长度:64 description String 虚拟网关的描述 最小长度:0 最大长度:128 type String 虚拟网关类型:default 缺省值:default local_ep_group Array of strings 虚拟网关到访问云上服务IPv4子网列表,通常是vpc的cidrs local_ep_group_ipv6 Array of strings 预留字段 虚拟网关到访问云上服务IPv6子网列表,通常是vpc的cidrs admin_state_up Boolean 管理状态:true或false 缺省值:true status String 操作状态,合法值是:ACTIVE,DOWN,BUILD,ERROR,PENDING_CREATE,PENDING_UPDATE,PENDING_DELETE bgp_asn Integer 虚拟网关本地的BGP自冶域号(asn) 最小值:1 最大值:4294967295 enterprise_project_id String 实例所属企业项目ID 最小长度:36 最大长度:36 tags Array of Tag objects 标签信息 数组长度:0 - 10 表6 Tag 参数 参数类型 描述 key String 标签键,最大长度36个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,中文。 最小长度:0 最大长度:36 value String 标签值,最大长度43个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,点“.”,中文。 最小长度:0 最大长度:43
  • URI GET /v3/{project_id}/dcaas/virtual-gateways/{virtual_gateway_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户项目ID virtual_gateway_id 是 String 虚拟网关ID 表2 Query参数 参数 是否必选 参数类型 描述 fields 否 Array 显示字段列表 数组长度:1 - 5
  • 请求参数 表2 请求Body参数 参数 是否必选 参数类型 描述 action 是 String 功能说明:操作标识。 取值范围: create(创建) delete(删除) 枚举值: create delete tags 否 Array of Tag objects 标签列表 sys_tags 否 Array of Tag objects 标签列表 表3 Tag 参数 是否必选 参数类型 描述 key 是 String 标签键,最大长度36个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,中文。 最小长度:0 最大长度:36 value 否 String 标签值,最大长度43个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,点“.”,中文。 最小长度:0 最大长度:43
  • 请求示例 批量添加资源标签。 POST https://{endpoint}/v3/cfa563efb77d4b6d9960781d82530fd8/dc-vgw/3320166e-b937-40cc-a35c-02cd3f2b3ee2/tags/action { "action" : "create", "tags" : [ { "key" : "key1", "value" : "value1" }, { "key" : "key2", "value" : "value2" } ] } 批量删除资源标签。 POST https://{endpoint}/v3/cfa563efb77d4b6d9960781d82530fd8/dc-vgw/3320166e-b937-40cc-a35c-02cd3f2b3ee2/tags/action { "action" : "delete", "tags" : [ { "key" : "key1" }, { "key" : "key2", "value" : "value3" } ] }
  • URI POST /v3/{project_id}/{resource_type}/{resource_id}/tags/action 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户项目ID resource_id 是 String 资源实例ID resource_type 是 String 专线服务资源类型,包括dc-directconnect/dc-vgw/dc-vif dc-directconnect:专线物理连接 dc-vgw:虚拟网关 dc-vif:虚拟接口 枚举值: dc-directconnect dc-vgw dc-vif
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 request_id String 操作请求ID switchover_test_records Array of SwitchoverTestRecord objects 倒换测试记录信息列表 page_info PageInfo object 分页查询页的信息 表5 SwitchoverTestRecord 参数 参数类型 描述 id String 倒换测试记录的唯一标识 tenant_id String 租户ID 最小长度:32 最大长度:32 resource_id String 倒换测试的资源对象ID resource_type String 倒换测试的资源对象类型 缺省值:virtual_interface 最小长度:0 最大长度:128 枚举值: virtual_interface operation String shutdown、undo_shutdown表示倒换测试操作类型 最小长度:0 最大长度:128 枚举值: shutdown undo_shutdown start_time String 倒换测试操作的开始时间 end_time String 倒换测试操作的结束时间 operate_status String 倒换测试状态记录 STARTING:初始状态 INPROGRESS:配置下发中 COMPLETE:配置下发完成 ERROR:配置下发失败 枚举值: STARTING INPROGRESS COMPLETE ERROR 表6 PageInfo 参数 参数类型 描述 previous_marker String 上一页的marker,值为资源的uuid 最小长度:0 最大长度:36 current_count Integer 当前列表中资源数量 最小值:0 最大值:2000 next_marker String 下一页的marker,值为资源的uuid,为空时表示最后一页 最小长度:0 最大长度:36
  • 响应示例 状态码: 200 OK { "request_id" : "bb154519fb167f99cdb01b7b9995ad14", "switchover_test_records" : [ { "id" : "862d61f1-d9ea-4093-ba0e-2b8d415e3ab3", "tenant_id" : "de58f033eb664102ba85e4a5db473ca5", "resource_type" : "virtual_interface", "resource_id" : "d0b3329c-0063-470c-b1dc-657656b2e540", "operation" : "shutdown", "start_time" : "2023-10-10T10:41:23.000Z", "end_time" : "2023-10-10T10:41:23.000Z", "operate_status" : "COMPLETE" } ] }
  • URI GET /v3/{project_id}/dcaas/switchover-test 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户项目ID 表2 Query参数 参数 是否必选 参数类型 描述 limit 否 Integer 每页返回的个数。 取值范围:1~2000。 最小值:1 最大值:2000 缺省值:2000 marker 否 String 上一页最后一条资源记录的ID,为空时为查询第一页。 使用说明:必须与limit一起使用。 最小长度:0 最大长度:36 fields 否 Array 显示字段列表 数组长度:1 - 5 sort_dir 否 Array 返回结果按照升序(asc)或降序(desc)排列,默认为asc sort_key 否 String 排序字段 缺省值:id 最小长度:0 最大长度:36 resource_id 否 Array 通过RESOURCE-ID过虑倒换测试记录信息
  • 响应示例 状态码: 200 GET查询操作返回成功。 { "request_id" : "80ef5f21-b81a-4546-b23d-84272507d330", "tags" : [ { "key" : "key2", "value" : "value2" }, { "key" : "key1", "value" : "value1" }, { "key" : "key3", "value" : "value3" } ] }
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 tags Array of Tag objects 标签列表 sys_tags Array of Tag objects 标签列表,没有标签默认为空数组。 request_id String 请求ID 表3 Tag 参数 参数类型 描述 key String 标签键,最大长度36个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,中文。 最小长度:0 最大长度:36 value String 标签值,最大长度43个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,点“.”,中文。 最小长度:0 最大长度:43
  • URI GET /v3/{project_id}/{resource_type}/{resource_id}/tags 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户项目ID resource_type 是 String 专线服务资源类型,包括dc-directconnect/dc-vgw/dc-vif dc-directconnect:专线物理连接 dc-vgw:虚拟网关 dc-vif:虚拟接口 枚举值: dc-directconnect dc-vgw dc-vif resource_id 是 String 资源实例ID
  • 概述 欢迎使用云专线(Direct Connect)服务。云专线用于搭建用户本地数据中心与云上VPC之间高速、低时延、稳定安全的专属连接通道,充分利用云服务优势的同时,继续使用现有的IT设施,实现灵活一体,可伸缩的混合云计算环境。 您可以使用本文档提供的API对云专线的资源进行相关操作,如创建、查询、修改、删除等。支持的全部操作请参见API概览。 在调用云专线服务的API之前,请确保已经充分了解云专线服务的相关概念,详细信息请参见产品介绍。 父主题: 使用前必读
  • 请求参数 表2 请求Body参数 参数 是否必选 参数类型 描述 tag 是 Tag object 资源标签。 表3 Tag 参数 是否必选 参数类型 描述 key 是 String 标签键,最大长度36个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,中文。 最小长度:0 最大长度:36 value 否 String 标签值,最大长度43个unicode字符,格式为大小写字母,数字,中划线“-”,下划线“_”,点“.”,中文。 最小长度:0 最大长度:43
  • URI POST /v3/{project_id}/{resource_type}/{resource_id}/tags 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户项目ID resource_id 是 String 资源实例ID resource_type 是 String 专线服务资源类型,包括dc-directconnect/dc-vgw/dc-vif dc-directconnect:专线物理连接 dc-vgw:虚拟网关 dc-vif:虚拟接口 枚举值: dc-directconnect dc-vgw dc-vif
  • 接收状态报告 需要引入的maven依赖为:org.springframework:spring-web:5.3.21(样例版本) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoController { /** * 同步短信回执 */ @PostMapping("/report") public void smsHwReport(@RequestParam String smsMsgId, // 发送短信成功时返回的短信唯一标识。 @RequestParam(required = false) String total, // 长短信拆分后的短信条数。当短信未拆分时该参数取值为1。 @RequestParam(required = false) String sequence, // 长短信拆分后的短信序号,当total参数取值大于1时,该参数才有效。当短信未拆分时该参数取值为1。 @RequestParam String status, // 短信状态报告枚举值,常见取值请参考“API参考” @RequestParam(required = false) String source, // 短信状态报告来源:1:短信平台自行产生的状态报告。2:短信中心返回的状态报告。3:华为平台产生的状态报告。 @RequestParam(required = false) String updateTime,// 短信资源的更新时间,通常为短信平台接收短信状态报告的时间,为UTC时间,格式为:yyyy-MM-dd'T'HH:mm:ss'Z',该时间会通过urlencode转义为%3a。// 当短信平台未收到短信中心上报的状态报告时,会自行构造状态报告,该状态报告中不携带“updateTime”参数。 @RequestParam(required = false) String orgCode, // 透传南向网元状态码,仅国际/港澳台短信状态报告携带,国内短信不涉及。// 当南向网元未返回状态码时不携带该参数。 @RequestParam(required = false) String extend, // 扩展字段,由用户在发送短信的请求中携带。若用户发送短信时未携带extend参数,则状态报告中也不会携带extend参数。 @RequestParam(required = false) String to) { // 本条状态报告对应的短信的接收方号码,仅当状态报告中携带了extend参数时才会同时携带该参数。 System.out.println(" ================receive smsStatusReport ======================"); System.out.println("smsMsgId: " + smsMsgId); System.out.println("total: " + total); System.out.println("sequence: " + sequence); System.out.println("status: " + status); System.out.println("source: " + source); System.out.println("updateTime: " + updateTime); System.out.println("orgCode: " + orgCode); System.out.println("extend: " + extend); System.out.println("to: " + to); } }
  • 接收上行短信 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package main import ( "fmt" "net/url" "strings" ) func main() { upData := "from=%2B86151****6789&to=1069***2019&body=***********&smsMsgId=9692b5be-c427-4525-8e73-cf4a6ac5b3f7"; onSmsUpData(upData); } func onSmsUpData(data string) { ss, _ := url.QueryUnescape(data) params := strings.Split(ss, "&") keyValues := make(map[string]string) for i := range params { temp := strings.Split(params[i],"=") keyValues[temp[0]] = temp[1]; } body := keyValues["body"]; fmt.Println("Sms up data. Body: " + body) }
  • 接收状态报告 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package main import ( "fmt" "net/url" "strings" ) func main() { // 短信平台上报状态报告数据样例(urlencode) //success_body := "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=DELIVRD"; failed_body := "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=E200027"; //onSmsStatusReport(success_body); onSmsStatusReport(failed_body); } func onSmsStatusReport(data string) { ss, _ := url.QueryUnescape(data) params := strings.Split(ss, "&") keyValues := make(map[string]string) for i := range params { temp := strings.Split(params[i],"=") keyValues[temp[0]] = temp[1]; } status := keyValues["status"]; if status == "DELIVRD" { fmt.Println("Send sms success. smsMsgId: " + keyValues["smsMsgId"]) } else { fmt.Println("Send sms failed. smsMsgId: " + keyValues["smsMsgId"]) fmt.Println("Failed status: " + keyValues["status"]) } }
  • 接收状态报告 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # -*- coding: utf-8 -*- import urllib.parse # 短信平台上报状态报告数据样例(urlencode) #success_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=DELIVRD"; failed_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=E200027"; ''' 解析状态报告数据 @param data: 短信平台上报的状态报告数据 @return: ''' def onSmsStatusReport(data): keyValues = urllib.parse.parse_qs(data); #解析状态报告数据 ''' Example: 此处已解析status为例,请按需解析所需参数并自行实现相关处理 'smsMsgId': 短信唯一标识 'total': 长短信拆分条数 'sequence': 拆分后短信序号 'source': 状态报告来源 'updateTime': 资源更新时间 'status': 状态码 ''' status = keyValues.get('status'); #状态报告枚举值 # 通过status判断短信是否发送成功 if 'DELIVRD' == str.upper(status[0]): print('Send sms success. smsMsgId: ', keyValues.get('smsMsgId')[0]); else: # 发送失败,打印status和orgCode print('Send sms failed. smsMsgId: ', keyValues.get('smsMsgId')[0]); print('Failed status: ', status[0]); if __name__ == '__main__': # onSmsStatusReport(success_body) onSmsStatusReport(failed_body)
  • 接收上行短信 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # -*- coding: utf-8 -*- import urllib.parse # 上行短信通知样例(urlencode) updata = "from=%2B86151****6789&to=1069****019&body=********&smsMsgId=9692b5be-c427-4525-8e73-cf4a6ac5b3f7"; ''' 解析上行短信通知数据 @param data: 短信平台推送的上行短信通知数据 @return: ''' def onSmsUpData(data): keyValues = urllib.parse.parse_qs(data); #解析上行短信通知数据 ''' Example: 此处已解析body为例,请按需解析所需参数并自行实现相关处理 'smsMsgId': 上行短信唯一标识 'from': 上行短信发送方的号码 'to': 上行短信接收方的号码 'body': 上行短信发送的内容 ''' body = keyValues.get('body'); #上行短信发送的内容 print('Sms up data. Body: ', body[0]); if __name__ == '__main__': onSmsUpData(updata)
  • 接收状态报告 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 /*jshint esversion: 6 */ // 短信平台上报状态报告数据样例(urlencode) //var success_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=DELIVRD"; var failed_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=E200027"; /** * 解析状态报告数据 * * @param data 短信平台上报的状态报告数据 * @returns */ function onSmsStatusReport(data) { var querystring = require('querystring'); var keyValues = querystring.parse(data); // 解析状态报告数据 /** * Example: 此处已解析status为例,请按需解析所需参数并自行实现相关处理 * * 'smsMsgId': 短信唯一标识 * 'total': 长短信拆分条数 * 'sequence': 拆分后短信序号 * 'source': 状态报告来源 * 'updateTime': 资源更新时间 * 'status': 状态码 */ var status = keyValues.status; // 状态报告枚举值 // 通过status判断短信是否发送成功 if ('DELIVRD' === status.toUpperCase()) { console.log('Send sms success. smsMsgId: ', keyValues.smsMsgId); } else { // 发送失败,打印status和orgCode console.log('Send sms failed. smsMsgId: ', keyValues.smsMsgId); console.log('Failed status: ', status); } } // onSmsStatusReport(success_body); onSmsStatusReport(failed_body);
  • 接收上行短信 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 /*jshint esversion: 6 */ // 上行短信通知样例(urlencode) var updata = "from=%2B86151****6789&to=1069****019&body=********&smsMsgId=9692b5be-c427-4525-8e73-cf4a6ac5b3f7"; /** * 解析上行短信通知数据 * * @param data 短信平台推送的上行短信通知数据 * @returns */ function onSmsUpData(data) { var querystring = require('querystring'); var keyValues = querystring.parse(data); // 解析上行短信通知数据 /** * Example: 此处已解析body为例,请按需解析所需参数并自行实现相关处理 * * 'smsMsgId': 上行短信唯一标识 * 'from': 上行短信发送方的号码 * 'to': 上行短信接收方的号码 * 'body': 上行短信发送的内容 */ var body = keyValues.body; // 上行短信发送的内容 console.log('Sms up data. Body: ', body); } onSmsUpData(updata);
  • 接收状态报告 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # -*- coding: utf-8 -*- import urllib.parse # 短信平台上报状态报告数据样例(urlencode) #success_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=DELIVRD"; failed_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=E200027"; ''' 解析状态报告数据 @param data: 短信平台上报的状态报告数据 @return: ''' def onSmsStatusReport(data): keyValues = urllib.parse.parse_qs(data); #解析状态报告数据 ''' Example: 此处已解析status为例,请按需解析所需参数并自行实现相关处理 'smsMsgId': 短信唯一标识 'total': 长短信拆分条数 'sequence': 拆分后短信序号 'source': 状态报告来源 'updateTime': 资源更新时间 'status': 状态码 ''' status = keyValues.get('status'); #状态报告枚举值 # 通过status判断短信是否发送成功 if 'DELIVRD' == str.upper(status[0]): print('Send sms success. smsMsgId: ', keyValues.get('smsMsgId')[0]); else: # 发送失败,打印status和orgCode print('Send sms failed. smsMsgId: ', keyValues.get('smsMsgId')[0]); print('Failed status: ', status[0]); if __name__ == '__main__': # onSmsStatusReport(success_body) onSmsStatusReport(failed_body)
  • 接收上行短信 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # -*- coding: utf-8 -*- import urllib.parse # 上行短信通知样例(urlencode) updata = "from=%2B86151****6789&to=1069****019&body=********&smsMsgId=9692b5be-c427-4525-8e73-cf4a6ac5b3f7"; ''' 解析上行短信通知数据 @param data: 短信平台推送的上行短信通知数据 @return: ''' def onSmsUpData(data): keyValues = urllib.parse.parse_qs(data); #解析上行短信通知数据 ''' Example: 此处已解析body为例,请按需解析所需参数并自行实现相关处理 'smsMsgId': 上行短信唯一标识 'from': 上行短信发送方的号码 'to': 上行短信接收方的号码 'body': 上行短信发送的内容 ''' body = keyValues.get('body'); #上行短信发送的内容 print('Sms up data. Body: ', body[0]); if __name__ == '__main__': onSmsUpData(updata)
  • 接收上行短信 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 /*jshint esversion: 6 */ // 上行短信通知样例(urlencode) var updata = "from=%2B86151****6789&to=1069****019&body=********&smsMsgId=9692b5be-c427-4525-8e73-cf4a6ac5b3f7"; /** * 解析上行短信通知数据 * * @param data 短信平台推送的上行短信通知数据 * @returns */ function onSmsUpData(data) { var querystring = require('querystring'); var keyValues = querystring.parse(data); // 解析上行短信通知数据 /** * Example: 此处已解析body为例,请按需解析所需参数并自行实现相关处理 * * 'smsMsgId': 上行短信唯一标识 * 'from': 上行短信发送方的号码 * 'to': 上行短信接收方的号码 * 'body': 上行短信发送的内容 */ var body = keyValues.body; // 上行短信发送的内容 console.log('Sms up data. Body: ', body); } onSmsUpData(updata);
  • 接收状态报告 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 /*jshint esversion: 6 */ // 短信平台上报状态报告数据样例(urlencode) //var success_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=DELIVRD"; var failed_body = "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=E200027"; /** * 解析状态报告数据 * * @param data 短信平台上报的状态报告数据 * @returns */ function onSmsStatusReport(data) { var querystring = require('querystring'); var keyValues = querystring.parse(data); // 解析状态报告数据 /** * Example: 此处已解析status为例,请按需解析所需参数并自行实现相关处理 * * 'smsMsgId': 短信唯一标识 * 'total': 长短信拆分条数 * 'sequence': 拆分后短信序号 * 'source': 状态报告来源 * 'updateTime': 资源更新时间 * 'status': 状态码 */ var status = keyValues.status; // 状态报告枚举值 // 通过status判断短信是否发送成功 if ('DELIVRD' === status.toUpperCase()) { console.log('Send sms success. smsMsgId: ', keyValues.smsMsgId); } else { // 发送失败,打印status和orgCode console.log('Send sms failed. smsMsgId: ', keyValues.smsMsgId); console.log('Failed status: ', status); } } // onSmsStatusReport(success_body); onSmsStatusReport(failed_body);
  • 接收状态报告 需要引入的maven依赖为:org.springframework:spring-web:5.3.21(样例版本) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoController { /** * 同步短信回执 */ @PostMapping("/report") public void smsHwReport(@RequestParam String smsMsgId, // 发送短信成功时返回的短信唯一标识。 @RequestParam(required = false) String total, // 长短信拆分后的短信条数。当短信未拆分时该参数取值为1。 @RequestParam(required = false) String sequence, // 长短信拆分后的短信序号,当total参数取值大于1时,该参数才有效。当短信未拆分时该参数取值为1。 @RequestParam String status, // 短信状态报告枚举值,常见取值请参考“API参考” @RequestParam(required = false) String source, // 短信状态报告来源:1:短信平台自行产生的状态报告。2:短信中心返回的状态报告。3:华为平台产生的状态报告。 @RequestParam(required = false) String updateTime,// 短信资源的更新时间,通常为短信平台接收短信状态报告的时间,为UTC时间,格式为:yyyy-MM-dd'T'HH:mm:ss'Z',该时间会通过urlencode转义为%3a。// 当短信平台未收到短信中心上报的状态报告时,会自行构造状态报告,该状态报告中不携带“updateTime”参数。 @RequestParam(required = false) String orgCode, // 透传南向网元状态码,仅国际/港澳台短信状态报告携带,国内短信不涉及。// 当南向网元未返回状态码时不携带该参数。 @RequestParam(required = false) String extend, // 扩展字段,由用户在发送短信的请求中携带。若用户发送短信时未携带extend参数,则状态报告中也不会携带extend参数。 @RequestParam(required = false) String to) { // 本条状态报告对应的短信的接收方号码,仅当状态报告中携带了extend参数时才会同时携带该参数。 System.out.println(" ================receive smsStatusReport ======================"); System.out.println("smsMsgId: " + smsMsgId); System.out.println("total: " + total); System.out.println("sequence: " + sequence); System.out.println("status: " + status); System.out.println("source: " + source); System.out.println("updateTime: " + updateTime); System.out.println("orgCode: " + orgCode); System.out.println("extend: " + extend); System.out.println("to: " + to); } }
  • 接收上行短信 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package main import ( "fmt" "net/url" "strings" ) func main() { upData := "from=%2B86151****6789&to=1069***2019&body=***********&smsMsgId=9692b5be-c427-4525-8e73-cf4a6ac5b3f7"; onSmsUpData(upData); } func onSmsUpData(data string) { ss, _ := url.QueryUnescape(data) params := strings.Split(ss, "&") keyValues := make(map[string]string) for i := range params { temp := strings.Split(params[i],"=") keyValues[temp[0]] = temp[1]; } body := keyValues["body"]; fmt.Println("Sms up data. Body: " + body) }
  • 接收状态报告 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package main import ( "fmt" "net/url" "strings" ) func main() { // 短信平台上报状态报告数据样例(urlencode) //success_body := "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=DELIVRD"; failed_body := "sequence=1&total=1&updateTime=2018-10-31T08%3A43%3A41Z&source=2&smsMsgId=2ea20735-f856-4376-afbf-570bd70a46ee_11840135&status=E200027"; //onSmsStatusReport(success_body); onSmsStatusReport(failed_body); } func onSmsStatusReport(data string) { ss, _ := url.QueryUnescape(data) params := strings.Split(ss, "&") keyValues := make(map[string]string) for i := range params { temp := strings.Split(params[i],"=") keyValues[temp[0]] = temp[1]; } status := keyValues["status"]; if status == "DELIVRD" { fmt.Println("Send sms success. smsMsgId: " + keyValues["smsMsgId"]) } else { fmt.Println("Send sms failed. smsMsgId: " + keyValues["smsMsgId"]) fmt.Println("Failed status: " + keyValues["status"]) } }
  • 发布后,相关文件目录和文件格式说明 由于数据集是基于OBS目录管理的,发布为新版本后,对应的数据集输出位置,也将基于新版本生成目录。 在数据集发布后,数据集将存储为manifest格式文件,manifest文件包含了数据及其标注信息,此文件的存放位置如下所示。 图5 Manifest文件存储 标注结果文件(XML)为VOC格式,存放在数据集输出目录下: |-- user-specified-output-path |-- DatasetName-datasetId |-- annotation |-- VersionMame1 |-- VersionMame1.manifest |-- annotations |-- images |-- videoName1 |-- videoName1.timestamp.xml |-- videoName2 |-- videoName2.timestamp.xml |-- VersionMame2 ... |-- ... 视频标注的关键帧存在数据集的输入目录下: |-- user-specified-input-path |-- images |-- videoName1 |-- videoName1.timestamp.jpg |-- videoName2 |-- videoName2.timestamp.jpg
  • 后续操作 针对发布后的数据集,您可以订阅AI Gallery中的预置算法,也可自己开发算法,在ModelArts管理控制台中创建训练作业,得到模型。 本教程不详细介绍如何创建训练作业,建议您参考其他教程学习。下述教程一般以图像类的数据作为示例,如需开发视频类的模型,将数据和算法均替换为视频类即可。 使用预置算法训练模型:使用订阅算法构建模型实现花卉识别。 自定义开发算法并训练模型:使用自定义算法构建模型(手写数字识别)。
共100000条