华为云用户手册

  • 计费说明 短信类型 类型说明 计费模式 计费规则 参考文档 国内短信 向中国大陆号码发送短信。支持发送验证码和行业通知短信。国内短信支持三网合一(移动、联通、电信,新增支持广电)专属通道。查看开通流程。 按需计费 系统默认使用按需计费模式,具体价格请参见按需计费。 验证码短信和通知短信计费方式一致。 短信发送成功才计费。 按需计费 套餐包 购买套餐包后发送短信优先扣除短信套餐包额度,超出部分按需计费(套餐包额度计算在阶梯内)。 验证码短信和通知短信计费方式一致。 短信发送成功才计费。 按套餐包计费 资源包 购买资源包后发送短信扣除短信资源包额度,资源包用尽系统自动停发。继续发送需重新购买资源包。 验证码短信和通知短信计费方式一致。 发送即计费,即调用接口/群发助手成功则计费。 以下情况不收费:“status”或“状态码”为华为平台错误码。 查看所有状态回执错误码(其中状态码来源是华为平台的不计费)。 按资源包计费
  • 购买指引 登录短信控制台,进入“总览”页面,选择“国内短信”页签。 单击“购买资源包”,进入购买页面。 参数 说明 资源包类型 分为推广短信和行业短信(验证码短信和通知短信)两种类型。 已购买资源包不支持变更资源包类型,请按需选择。推广短信包不可用于行业短信短信发送。 规格 资源包用尽即止。 已购买资源包不支持退订和修改,请根据实际业务量,选择合适的规格。 购买时长 各规格有效期均为一年,到期后未使用的额度不支持退款,请在有效期内使用完毕。 购买数量 不限制购买数量和次数。 确认资源包清单后,在页面右下角单击“立即购买”。 确认订单无误后,单击“去支付”。 若发现订单有误,请单击“上一步”修改订单信息后再继续购买。 根据界面提示进行订单支付。 使用消息&短信服务。 资源包购买完成后可以直接使用消息&短信服务,系统会根据资源包和短信属性自动匹配。当资源包和短信属性一致时,会自动使用资源包抵扣对应的短信费用,资源包剩余量为0时将停发此资源包,即用尽即停。
  • 套餐包抵扣顺序 抵扣顺序原则 当购买了多个相同属性的资源包,会按照资源包过期时间顺序进行抵扣,优先抵扣过期时间近的资源包。 若您一次性购买多个资源包,则资源包生效时间和结束时间相同。 示例 场景 某客户分别购买了两个行业短信用尽即止资源包 资源包A:规格1万条,2024年5月1日生效,购买时长1年,即2025年5月1日过期。 资源包B:规格10万条,2024年5月10日生效,购买时长1年,即2025年5月10日过期。 抵扣顺序 2024年5月1日~2024年5月9日 只有资源包A生效。 使用资源包A抵扣,超出1万条系统自动停发。 2024年5月10日~2025年4月30日 资源包A、B同时生效,叠加使用。 优先使用资源包A抵扣,超出1万条部分使用资源包B抵扣,超出11万条系统自动停发。 2025年5月1日~2025年5月9日 资源包A过期,只有资源包B生效。 使用资源包B抵扣,超出10万条系统自动停发。 2025年5月10日~ 资源包A、B均已过期,系统自动停发。
  • 价格详情 购买资源包后即可发送短信,资源包额度用尽即停。 按不同类型的短信模板,扣除不同类型资源包内的额度。如您使用行业短信套餐包,则系统会扣除您行业短信资源包内的额度,不影响推广短信资源包。 如有任何疑问,请联系华为云智能客服,将有专人为您解答。 表1 行业短信包(用于验证码短信&通知短信) 规格 500条 5000条 1万条 10万条 50万条 300万条 1亿条 价格(元) 32.5 325 630 6,000 29,000 165,000 475,0000 每条单价(元/条) 0.065 0.065 0.063 0.060 0.058 0.055 0.0475 有效期 1年 1年 1年 1年 1年 1年 1年 表2 推广短信包 规格 5000条 1万条 10万条 50万条 300万条 价格(元) 400 780 7,500 36,500 210,000 每条单价(元/条) 0.080 0.078 0.075 0.073 0.070 有效期 1年 1年 1年 1年 1年 父主题: 按资源包计费(用尽即停)
  • 计费规则 购买资源包后发送短信即扣除已购买资源包内的额度,资源包用尽系统自动停发。继续发送需重新购买资源包。 如果先后购买了两个同类型的资源包,优先使用先生效的资源包,前一个资源包用量耗尽,才会使用后一个资源包。 验证码短信和通知短信计费方式一致。 发送即计费,即调用接口/群发助手成功则计费。 以下情况不收费:“status”或“状态码”为华为平台错误码。 查看所有状态回执错误码(其中状态码来源是华为平台的不计费)。
  • 资源包说明 您可以通过包年包月(资源包)的方式,提前购买使用额度和时长,获取更多的优惠。购买资源包发送短信,资源用尽时,自动停止使用。 资源包与账号绑定,不支持跨账号和跨区域使用。 资源包不支持退订,建议您在购买资源包前提前规划资源的使用额度和时长。 资源包购买后即时生效,到期后自动失效,不支持延期,资源包使用后剩余资源不支持退订。 资源包用尽即停,若您需要继续发送短信,请在资源包用量耗尽前重新购买新的资源包。若您一次性购买多个资源包,其生效时间和结束时间相同。
  • 套餐包说明 您可以通过包年包月(套餐包)的方式,提前购买使用额度和时长,获取更多的优惠。超出套餐包的部分自动转按需计费。如何购买套餐包? 套餐包到期后,不会影响您在消息&短信服务上的使用和数据安全。您只要保证云服务账号上有足够的余额,系统会自动以按需计费的模式进行结算。 套餐包与账号绑定,不支持跨账号使用。 套餐包不支持退订,建议您在购买套餐包前提前规划资源的使用额度和时长。 套餐包购买后即时生效,到期后自动失效,不支持延期,套餐包使用后剩余资源不支持退订。 套餐包仅支持抵扣套餐包购买后产生的费用,不支持抵扣套餐包购买前产生的费用。 套餐包用量即将耗尽时,若需要继续发送短信,请重新购买新的套餐包。
  • 计费规则 发送短信优先扣除已购买套餐包内的额度,超出部分按需计费(套餐包额度计算在阶梯内)。 如果先后购买了两个同类型的套餐包,优先使用先生效的套餐包,前一个套餐包用量耗尽,才会使用后一个套餐包。 短信字数超过规定长度时,系统会将一条长短信拆分成多条短信进行计算,短信条数计算详情请参见短信发送规则。 按不同类型的短信模板,扣除不同类型套餐包内的额度。如您使用行业短信套餐包,则系统会扣除您行业短信套餐包内的额度,不影响推广短信套餐包的额度。 验证码短信和通知短信计费方式一致。 短信发送成功才计费。
  • 套餐包抵扣顺序 抵扣顺序原则 当购买了多个相同属性的套餐包,会按照套餐包过期时间顺序进行抵扣,优先抵扣过期时间近的套餐包。 若您一次性购买多个套餐包,则套餐包生效时间和结束时间相同。 示例 场景 某客户分别购买了两个行业短信包 套餐包A:规格1万条,2024年5月1日生效,购买时长1年,即2025年5月1日过期。 套餐包B:规格10万条,2024年5月10日生效,购买时长1年,即2025年5月10日过期。 抵扣顺序 2024年5月1日~2024年5月9日 只有套餐包A生效。 使用套餐包A抵扣,超出1万条部分按需计费。 2024年5月10日~2025年4月30日 套餐包A、B同时生效,叠加使用。 优先使用套餐包A抵扣,超出1万条部分使用套餐包B抵扣,超出11万条部分按需计费。 2025年5月1日~2025年5月9日 套餐包A过期,只有套餐包B生效。 使用套餐包B抵扣,超出10万条部分按需计费。 2025年5月10日~ 套餐包A、B均已过期,此时为按需计费。
  • 价格详情 使用短信套餐包时,优先扣除已购买套餐包内的额度,超出部分按需计费(套餐包额度计算在阶梯内)。 按不同类型的短信模板,扣除不同类型套餐包内的额度。如您使用行业短信套餐包,则系统会扣除您行业短信套餐包内的额度,不影响推广短信套餐包。 如有任何疑问,请联系华为云智能客服,将有专人为您解答。 表1 行业短信包(用于验证码短信&通知短信) 规格 500条 5000条 1万条 10万条 50万条 300万条 价格(元) 32.5 325 630 6,000 29,000 165,000 每条单价(元/条) 0.065 0.065 0.063 0.060 0.058 0.055 有效期 1个月 1年 1年 1年 1年 1年 表2 推广短信包 规格 5000条 1万条 10万条 50万条 300万条 价格(元) 400 780 7,500 36,500 210,000 每条单价(元/条) 0.080 0.078 0.075 0.073 0.070 有效期 1年 1年 1年 1年 1年 父主题: 按套餐包计费(用尽按需)
  • 购买指引 登录短信控制台,进入“总览”页面,选择“国内短信”页签。 单击“购买套餐包”,进入购买页面。 参数 说明 套餐包类型 分为推广短信和行业短信(验证码短信和通知短信)两种类型。 规格 超出当前套餐包的额度或使用时段,将自动转为按需计费。 已购买套餐包不支持退订和修改,请根据实际业务量,选择合适的规格。 购买时长 除“行业短信-500条”规格有效期为一个月外,各规格有效期均为一年,到期后未使用的额度不支持退款,请在有效期内使用完毕。 购买数量 按需套餐包单次购买上限1个,但不限制购买次数,购买1个以上套餐包请分多次购买。 确认套餐包清单后,在页面右下角单击“立即购买”。 确认订单无误后,单击“去支付”。 若发现订单有误,请单击“上一步”修改订单信息后再继续购买。 根据界面提示进行订单支付。 使用消息&短信服务。 套餐包购买完成后可以直接使用消息&短信服务,系统会根据套餐包和短信属性自动匹配。当套餐包和短信属性一致时,会自动使用套餐包抵扣对应的短信费用,超出套餐包的短信费用将自动转为按需计费。
  • 后续操作 鉴于以下原因,请您购买套餐包后务必及时参考通用设置,配置流量阈值。 为辅助降低因客户自身业务被盗刷短信等引起的损失,订购套餐包后请及时根据业务需求调整流量阈值。 实际套餐包用量与按需用量,即实际短信发送量受默认流量阈值限制,订购套餐包后请及时调整默认限额值,避免影响业务。 套餐包余量的扣减可能存在0~2小时的延时(参见查看套餐包详情查看套餐包余量),套餐包用尽后自动转按需计费。如您想要实现套餐包用尽自动停发,避免转按需计费,请购买套餐包后使用阈值管理控制发送量,将默认月限额值与套餐包规格改为一致(如:套餐包购买规格为“行业短信10万条” ,月限额值设置为100000)。阈值管理默认月发送量上限值10000条,您可以根据实际业务需求提交工单申请提升阈值上限。
  • 查看资源包剩余量 如果您已购买资源包,您可以在消息&短信管理控制台上查看已购买资源包的剩余量。资源包剩余量阈值如何设置? 余量统计存在时延,请以实际产生的计费流量为准。 登录短信控制台。 在左侧导航树中选择“资源包管理”。 根据实际业务需求选择“产品类型”或“资源包类型”页签,查看对应资源包的剩余量。 产品类型:以不同资源包区域进行分类统计。 资源包类型:以不同资源包购买规格进行分类统计。 父主题: 按资源包计费(用尽即停)
  • 资源和成本规划 该解决方案主要部署如下资源,不同产品的花费仅供参考,具体请参考华为云官网价格,实际以收费账单为准: 表1 资源和成本规划(按需计费) 华云服务 配置示例 每月预估花费 语音交互 服务 区域:华北-北京四 计费模式:按需计费 涉及服务:录音文件识别 录音文件识别:2.5元/小时 2.5 * 10 = 25 元 对象存储服务 区域:华北-北京四 计费模式:按需计费 存储策略:多AZ存储 桶策略:私有 存储类别:标准存储 数据存储(多AZ存储):0.1390元/GB/月 请求费用:0.0100元/万次 以未压缩的10小时8kHz 16bit采样位数采样率双声道WAV录音为例,预计每月新增1GB数据量,花费0.1390元。 该方案存储费用消耗较低,详细参考每月账号。 函数工作流 服务 区域:华北-北京四 计费模式:按需计费 函数内存:128MB 执行超时时间:900秒 请求次数0-100万次/月:免费 计量时间:0-400,000GB/秒:免费 节点执行次数:0-5000次:免费 0.00元 合计 - 约25.14元
    AI
  • 约束与限制 部署该解决方案前,您需 注册华为账号 并开通华为云,完成实名认证,且账号不能处于欠费或冻结状态,请根据资源和成本规划中预估价格。 该方案只支持用户上传采样率为8000的双声道中文录音音频,其中音频支持pcm16k16bit、pcm8k16bit、ulaw16k8bit、ulaw8k8bit、alaw16k8bit、alaw8k8bit、vox8k4bit、v3_8k4bit、WAV(支持pcm/ulaw/alaw/adpcm编码格式)、MP3、M4A、ogg-speex、ogg-opus、AMR。 因函数工作流超时时间限制,上传的录音时长不应超过20min。 本解决方案提供的测试样例由华为云语音交互服务 语音合成 服务生成,仅用于demo演示。 卸载解决方案前,请先确保OBS桶中无数据,否则解决方案将卸载失败。
    AI
  • 给rf_admin_trust委托添加 IAM Agency Management FullAccess策略 打开“ 统一身份认证 ”菜单。 图14 统一身份认证菜单 进入“委托”菜单,选择rf_admin_trust委托。 图15 委托列表 进入“授权记录”菜单,单击“授权”按钮。 图16 授权记录 在搜索框输入IAM Agency Management FullAccess,勾选过滤出来的记录,单击下一步,并确认完成权限的配置。 图17 配置IAM Agency Management FullAccess策略 配置好后的情况:rf_admin_trust委托拥有Tenant Administrator和IAM Agency Management FullAccesss权限。 图18 授权记录列表
    AI
  • 快速部署 本章节主要帮助用户快速部署该解决方案。 表1 参数填写说明 参数名称 类型 是否必填 参数解释 默认值 function_name String 必填 函数名称,用于定义创建函数及其他资源前缀,不支持重名。取值范围:2-60个字符,可包含字母、数字、下划线和中划线,以大/小写字母开头,以字母或数字结尾。 private-number-speech-analytics-demo speech_bucket_name String 必填 OBS桶名称,全局唯一,用于上传wav语音文件。取值范围:3~63个字符,支持小写字母、数字、中划线(-)、英文句号(.) 空 channel_id String 必填 事件网格 EG中云服务事件通道ID,默认default通道ID,用于接收云服务事件源产生的事件。获取请参考获取事件网格 EG云服务事件通道ID。 空 result_bucket_name String 必填 OBS桶名称,全局唯一,用于存放隐私通话质检识别结果。取值范围:3~63个字符,支持小写字母、数字、中划线(-)、英文句号(.) 空 登录华为云解决方案实践,选择“ 语音识别 -隐私通话内容分析”模板,单击“一键部署”,跳转至解决方案创建堆栈界面。 图1 解决方案实施库 在选择模板界面中,单击“下一步”。 图2 选择模板 在配置参数界面中,参考表1完成自定义参数填写,单击“下一步”。 图3 配置参数 在资源设置界面中,在权限委托下拉框中选择“rf_admin_trust”委托,单击“下一步”。 图4 资源栈设置 在配置确认界面中,单击“创建执行计划”。 图5 配置确认 在弹出的创建执行计划框中,自定义填写执行计划名称,单击“确定”。 图6 创建执行计划 单击“部署”,并且在弹出的执行计划确认框中单击“执行”。 图7 执行计划 图8 执行计划确认 待“事件”中出现“Apply required resource success”,表示该解决方案已经部署完成。 图9 部署完成 父主题: 实施步骤
    AI
  • 结果示例 隐私通话内容分析结果如下所示,支持语音识别结果、原始录音文件地址、录音时长、规则命中结果、命中位置等多个字段。 { 'asr_result': { 'status': 'FINISHED', 'create_time': '2022-11-24T20: 20: 31.522Z', 'start_time': '2022-11-24T20: 20: 31.822Z', 'finish_time': '2022-11-24T20: 20: 37.701Z', 'audio_duration': 27000, 'segments': [{ 'start_time': 5530, 'end_time': 5800, 'result': { 'text': '喂。', 'analysis_info': { 'role': 'AGENT', 'emotion': 'NORMAL', 'speed': 5.555555 } } }, { 'start_time': 5990, 'end_time': 7730, 'result': { 'text': '你好,我这边是银行的。', 'analysis_info': { 'role': 'AGENT', 'emotion': 'NORMAL', 'speed': 7.758621 } } }, { 'start_time': 8120, 'end_time': 10610, 'result': { 'text': '您的银行卡号填写错误,少填一位。', 'analysis_info': { 'role': 'AGENT', 'emotion': 'NORMAL', 'speed': 8.433735 } } }, { 'start_time': 10700, 'end_time': 15420, 'result': { 'text': '银行卡暂时被冻结无法提现需要提供3800元解冻费。', 'analysis_info': { 'role': 'AGENT', 'emotion': 'NORMAL', 'speed': 8.15678 } } }, { 'start_time': 16270, 'end_time': 17240, 'result': { 'text': '啊这样吗。', 'analysis_info': { 'role': 'USER', 'emotion': 'NORMAL', 'speed': 6.185567 } } }, { 'start_time': 17480, 'end_time': 19720, 'result': { 'text': '不敢相信,不过我卡里没那么多钱。', 'analysis_info': { 'role': 'USER', 'emotion': 'NORMAL', 'speed': 9.375 } } }, { 'start_time': 20500, 'end_time': 21910, 'result': { 'text': '您方便来银行一趟吗?', 'analysis_info': { 'role': 'AGENT', 'emotion': 'NORMAL', 'speed': 9.574469 } } }, { 'start_time': 22310, 'end_time': 23720, 'result': { 'text': '我现场教您怎么处理。', 'analysis_info': { 'role': 'AGENT', 'emotion': 'NORMAL', 'speed': 9.574469 } } }, { 'start_time': 24440, 'end_time': 27810, 'result': { 'text': '不不不,我听出来了,你是骗子吧,再见。', 'analysis_info': { 'role': 'USER', 'emotion': 'NORMAL', 'speed': 6.676558 } } }] }, 'audio_url': 'https: //private-number-speech-analytics-demo-input.obs.cn-north-4.myhuaweicloud.com/private-number-demo.wav', 'audio_duration': 27000, 'rules_hit_results': [{ 'hit_rule_name': '检测通话中是否出现诈骗话术', 'hit_rule_items': [{ 'hit_text': '银行卡暂时被冻结无法提现需要提供3800元解冻费。', 'role': 'AGENT', 'start_time': 10700, 'end_time': 15420 }] }]}
    AI
  • 名词解释 基本概念、云服务简介、专有名词解释 语音交互服务SIS:以API的形式,对外提供语音转文本以及文本转语音的服务。 函数工作流 FunctionGraph:FunctionGraph是一项基于事件驱动的函数托管计算服务。使用FunctionGraph函数,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用。 对象存储服务 OBS:对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。
    AI
  • 接收上行短信 1 2 3 4 5 6 7 8 9101112131415161718192021222324 package mainimport ( "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 91011121314151617181920212223242526272829303132 package mainimport ( "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"]) }}
  • 国内短信开发数据准备 国内短信启动开发前需要准备的数据如下: 参数名 取值样例 获取方式 相关文档 APP_Key c8RWg3gg*********4bf3Y7x1Ile 登录管理控制台,从国内短信“应用管理”页面获取。 创建短信应用 APP_Secret q4Ii87BhST********zN80SfD7Al APP接入地址 https://example.cn-north-4.myhuaweicloud.com:443 签名名称 华为云短信测试 登录管理控制台,从国内短信“签名管理”页面获取。 须知: 请根据“所属应用”关联获取。当模板ID指定的模板类型为通用模板时,必须准备签名名称。 申请短信签名 签名通道号 csms12345678 模板ID 8ff55eac1d0b47********3c6a492300 登录管理控制台,从国内短信“模板管理”页面获取。 须知: 请根据“所属应用”和“所属签名”关联获取。发送分批短信时,可以指定多个模板ID。 申请短信模板 访问URI 发送短信:/sms/batchSendSms/v1 发送分批短信:/sms/batchSendDiffSms/v1 从发送短信API/发送分批短信API页面中的“接口类型”介绍部分获取。 发送短信 发送分批短信 上表中的参数,除“访问URI”为固定值外,其他参数请根据对应的获取方式到控制台获取,取值样例仅为示例。 准备的数据与短信API请求参数关联关系如下: 如有任何疑问,请联系华为云智能客服,将有专人为您解答。
  • 接收上行短信 需要引入的maven依赖为:org.springframework:spring-web:5.3.21(样例版本) 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829 import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.bind.annotation.PostMapping;@RestControllerpublic class DemoController { /* * @param smsMsgId 上行短信的唯一标识。 * @param from 上行短信发送方的号码。 * @param to 上行短信接收方的号码。 * @param body 上行短信发送的内容。 * @param createTime //上行短信创建时间,即短信平台接收到用户发送的上行短信的时间(采用标准UTC格式,例如:2018-02-12T15:30:20Z。不同编程语言中的时间格式转换方式不同,部分语言可参考表 不同编程语言的时间格式)。 * //在控制台创建应用时配置需要“接收上行短信回复时间”后,平台才会在Body中附带此字段,该字段只对http协议的短信生效。 */ @PostMapping("/up SMS ") public void receiveHwSms(@RequestParam String smsMsgId, @RequestParam String from, @RequestParam String to, @RequestParam String body, @RequestParam(required = false) String createTime) { System.out.println(" ================receive upSMS ======================"); // 打印上面的RequestParam System.out.println(" smsMsgId: " + smsMsgId); System.out.println(" from: " + from); System.out.println(" to: " + to); System.out.println(" body: " + body); System.out.println(" createTime: " + createTime); }}
  • 接收状态报告 需要引入的maven依赖为:org.springframework:spring-web:5.3.21(样例版本) 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic 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); }}
  • 调测指引 本节为您介绍新手开发者进行二次开发的调测点指引。 短信中心包括移动、联通、电信、广电、供应商(线路代理商)。 Check 1:合法性检查。在发起发送短信请求前,对请求参数合法性做必要的检查,如: 请求Headers参数“Content-Type”在发送短信API中取值为application/x-www-form-urlencoded,在发送分批短信API中取值为application/json。 请求Body参数“to”在发送短信API中取值为字符串,在发送分批短信API中取值为字符串数组。 如果需要接收短信状态报告通知,则“statusCallback”参数值不能为空,且地址有效可达。 如果“templateId”指定的模板类型为通用模板,则必须通过“signature”指定在通用模板短信内容前面补充的签名。 Check 2:结果码解析。获取请求结果时,请解析出响应结果码,并参考API错误码中的处理建议进行修正。 HTTP/1.1 200 OKDate: Fri, 13 Apr 2018 06:29:08 GMTServer: WebServerContent-Type: application/json;charset=UTF-8Content-Length: 220{"result":[{"originTo":"+86155****5678","createTime":"2018-05-25T16:34:34Z","from":"1069-******0012","smsMsgId":"d6e3cdd0-522b-4692-8304-a07553cdf591_8539659","status":"000000"}],"code":"000000","description":"Success"} 其中,“code”取值为“E000510”时,还需解析“status”参数值,进行定位分析。 Check 3:解析拦截状态码。所发短信内容触发华为平台拦截时,华为云短信服务会推送状态报告通知给客户,请解析出状态码,并参考状态回执错误码中“状态码来源”为“华为平台”的处理建议进行修正。 仅在发送短信请求中“statusCallback”参数已设置回调地址时,华为云短信服务才会推送状态报告通知。否则,请登录短信控制台,进入发送详情页查看状态码。 Check 4:解析送达状态码。华为云短信服务收到短信中心的短信状态通知时,会推送状态报告通知给客户,请解析出状态码,并参考状态回执错误码中的处理建议进行修正。 仅在发送短信请求中“statusCallback”参数已设置回调地址时,华为云短信服务才会推送状态报告通知。否则,请登录短信控制台,进入发送详情页查看状态码。 如有任何疑问,请联系华为云智能客服,将有专人为您解答。
  • 接收状态报告 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 # -*- 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 9101112131415161718192021222324252627 # -*- 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 910111213141516171819202122232425262728 /*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 9101112131415161718192021222324252627282930313233343536373839 /*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 910111213141516171819202122232425262728 /*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);
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全