华为云用户手册

  • CodeArts IDE常见问题 登录华为云失败 如何配置默认的Maven配置文件settings.xml 新建主机连接失败 CMake Build Tool插件运行调试时中文乱码 连接远程主机失败 终端输出中文乱码 报错“Error: command‘clangd.applyFix’already exists” 报错“WeCode-DB is unable to watch for file changes in this large workspace” 依赖项视图长时间显示“等待语言服务初始化完成”
  • 编译构建常见问题 Npm构建报错“JavaScript heap out of memory” 如何清理Maven构建缓存配置? 如何设置多个子项目和父项目之间的引用? 推送镜像到SWR失败 Git拉取子模组失败,找不到子模组的修订版本 使用Dockerfile制作镜像失败 如何使用exec-maven-plugin插件实现Maven和npm混合编译? 如何使用jib-maven-plugin插件构建maven工程制作镜像? Maven构建报错“找不到package/symbol” Maven构建报错“找不到pom文件”
  • 代码检查常见问题 执行代码检查任务时提示:Cppcheck cannot tokenize the code correctly 执行代码检查任务时提示:no such file or directory 执行代码检查任务时提示:在Maven仓库中找不到依赖 执行代码检查任务时提示:调用CodeArts Repo失败,未授权 执行代码检查任务时提示:CC.00070400.500 C#前端使用WPF组件的项目检查失败 任务执行完成后没有数据 TypeScript任务检查失败,日志显示404
  • 代码托管常见问题 升级CodeArts Repo的SSH功能 从本地推送代码仓到CodeArts Repo时,报错"Error: Deny by project hooks setting 'default': message of commit" 在一台电脑上,如何配置多个SSH Key? TLS协议握手失败并报错"ssl handshake failure" fatal: refusing to merge unrelated histories 在CentOS系统下使用HTTPS协议克隆代码时,报错"The requested URL returned error: 401" 使用git pull拉取CodeArts Repo的代码失败,报错"Merge branch 'master' of https://test.com Please Enter a commit" 在本地提交合并请求时,报错"failed to push some refs to '....git'" 如何阻止涉密文件被推送到CodeArts Repo代码仓库 执行git push命令时,报错'origion' does not appear to be a git repository...
  • 部署常见问题 主机/代理机连通性验证问题排查方法有哪些? 执行docker login命令失败 启动/停止SpringBoot服务步骤中执行启动命令失败 部署失败,提示“权限不够” SpringBoot服务路径有误 执行Docker命令参数错误 部署失败,提示“Openjdk does not support arm” Nginx配置文件格式错误 使用sudo权限执行报错“需要密码” 部署报错,提示“环境下没有主机”
  • 步骤1:验证模型权重文件 在进行模型服务升级之前,必须先确认模型权重文件能够成功完成推理任务。只有当验证成功,确保了模型权重的功能性和准确性后,才可以进行模型权重的滚动升级。 获取待更新的模型权重文件,并上传到OBS桶中。 参考创建我的模型,用待更新的模型权重文件新建一个我的模型。关键参数请参见表1。 表1 创建模型的关键参数说明 参数 说明 来源模型 选择和待升级的模型服务的“部署模型”同一个模型框架。 权重设置与词表 选择“自定义权重”。 选择自定义权重路径 选择存放待更新的模型权重文件的OBS路径,必须选择到模型文件夹。 权重校验 开启权重文件校验。 参考部署模型服务,用新建的模型部署模型服务。 “模型设置”选择上一步新建的模型。 “资源设置”和待升级的模型服务保持一致。 其他参数自定义。 参考调用MaaS部署的模型服务,用上一步部署的模型服务验证推理效果。 如果推理结果正确,则使用该模型权重完成执行步骤2:滚动升级模型权重。 如果推理结果不正确,请先排查原因,待能正常完成推理任务后再用该模型权重文件升级。
  • 场景描述 用户在运用大型模型进行推理任务时,需定期对模型进行迭代和优化。为适应模型权重的更新和迭代,必须对已部署的服务执行相应的升级操作,以确保服务使用的是最新模型。 ModelArts Studio大模型即服务平台支持滚动升级模型权重,允许模型服务在运行时进行权重的迭代升级,该操作不会影响部署服务的正常运行。滚动升级模型权重的功能避免了重新部署整个模型服务的必要性,从而确保了服务的连续性,无需执行任何业务迁移操作。
  • 功能分支工作流优点 并行开发。支持团队成员在不影响主分支的情况下独立开发新功能或修复问题。 代码隔离。每个分支都是独立的,即一个分支上的更改不会影响其他分支,降低了代码冲突的风险。 快速迭代。通过创建和合并分支,团队可以快速迭代新功能或修复,加快软件开发的速度。 易于管理。分支的创建和合并可以通过Git命令行工具或图形界面进行,使得版本控制更加直观和方便。 代码检视。在合并分支之前进行代码检视,有助于确保代码质量和团队成员之间的知识共享。 回退和撤销。支持代码回退和撤销,使得在开发过程中出现问题时可以快速恢复到之前的状态。
  • 功能分支工作流流程 创建代码仓库。Repo目前支持新建自定义代码仓库、按模板新建代码仓库、Fork已有的代码仓库,也支持从本地导入已有的代码仓库、导入Git平台的代码仓、导入SVN平台的代码仓。 开发者在本地创建分支并开发代码或者在线创建分支分支并开发代码。 开发者提交更改的代码文件到缓存区。Repo目前支持使用Git Bash提交代码、在Eclipse提交代码。 开发者新建合并请求。 开发者解决检视意见。 Committer合入合并请求。
  • 按模板新建代码仓库 进入CodeArts Repo首页后,单击“新建仓库”,在“归属项目”下拉框中选择已有的项目或者“新建项目”。 仓库类型选择“模板仓库”,这里可选择“官方模板”或“个人模板”。其中,个人模板需要进入仓库设置,将官方模板设置为个人模板。选择模板后,根据表格填写参数。 当您在创建一个“所有访客只读”的公开仓时,如果您的“代码仓库名称”或者“描述”包含敏感词汇,包括中文和英文语法,将会新建仓库失败,并且在“新建仓库”页面的右上角提示“您所提交的内容可能存在违反法律法规的内容,请修改后重新提交。” 如果您在尝试修改设置为‘所有访客只读’的公开“仓库描述”或者“分享标题”时使用了敏感词汇,那么修改操作将会失败。 如果您在“README.md”文件输入敏感词汇和图片,进入此代码仓的“仓库首页”,右上角会显示“审核状态:不通过”,即当前仓库仅项目内成员可见,需要修改“README.md”文件内容。 在新建代码仓库后,仅有创建者能够访问该仓库。其他项目成员需要手动添加到仓库中,并分配相应的权限。因此,您需要根据需求,手动为代码仓库添加成员并为新增成员配置访问权限。 父主题: 新建Repo代码仓库
  • 请求示例 修改短信模板,请求方式:PUT ,请求URL:/v2/{project_id}/msgsms/templates/{id},路径参数:id,project_id,请求头参数:X-Auth-Token,Content-Type,请求体:app_id,region,template_content,template_name,template_type。 PUT /v2/845ada5bc7444f1295cd517af0123da1/msgsms/templates/c3f641aa-4e87-4a70-b84d-a2d685599072 HTTP/1.1 Host: 100.85.***.***:30300 Content-Type: application/json X-Auth-Token: *** Content-Length: 311 { "app_id": "******9c-1a6b-4ee5-9651-5bca450694b3", "brackets": "GB", "region": "cn", "sign_id": "******58-e866-4b30-9ca5-a476a00e8775", "template_content": "测试", "template_name": "auto_test000", "template_type": "NOTIFY_TYPE", "universal_template": 0 }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 请求体参数类型,该字段必须设置为:application/json X-Auth-Token 是 String 用户Token。通过调用 IAM 服务获取用户Token接口获取(响应消息头中X-Subject-Token的值) 表3 请求Body参数 参数 是否必选 参数类型 描述 app_id 是 String 应用主键ID,参考表5 响应SmsAppQueryResp参数中的id brackets 否 String 中括号类型。支持枚举值: CN:中文类型:【】 GB:英文类型: [] 须知: 默认值为:CN 输入值不在上述枚举值范围内的,也按CN处理。 只有地域为国内时,该字段有效。 region 是 String 地域 cn:国内 intl:国际 send_country 否 Array of Integers 发送国家id列表,只有地域为国际时,该字段有效 sign_id 否 String 签名id,对应表5 响应SmsSignatureResp参数中的ID。只有地域为国内时,该字段有效 template_content 是 String 模板内容 template_desc 否 String 模板描述 template_name 是 String 模板名称 template_type 是 String 模板类型。只有地域为国内时,该字段有效。支持枚举值: VERIFY_CODE_TYPE: 验证码类 PROMOTION_TYPE: 推广类 NOTIFY_TYPE: 通知类 universal_template 否 Integer 是否为通用模板 0: 非通用模板 1: 通用模板 variable_attributes 否 Array of SmsTemplateVariableAttrReq objects 模板参数 表4 SmsTemplateVariableAttrReq 参数 是否必选 参数类型 描述 variable_desc 否 String 变量说明,当变量类型为TEXT时,必填 variable_index 是 Integer 变量索引,对应模板内容变量索引 variable_type 是 String 变量类型,目前支持:PHONE|CHARDIGIT|DATETIME|MONEY|TEXT|NEWTEXT
  • 修订记录 发布日期 修改记录 2024-10-24 第十八次正式发布。 本次变更如下: 新增批量删除短信模板接口。 查询签名信息接口中请求参数“status”新增枚举值、新增“qualification_id”、“qualification_name”字段,表示资质ID和资质名。 创建短信签名/修改短信签名接口新增“qualification_id”字段,表示资质ID。 获取签名详情接口新增“qualification_id”、“qualification_name”字段,表示资质ID和资质名。 2024-08-23 第十七次正式发布。 本次变更如下: 下线批量删除短信模板接口。 发送短信/发送分批短信章节新增E000630错误码。 状态回执错误码( 国内短信)章节新增E000632错误码。 2024-08-02 第十六次正式发布。 本次变更如下: 新增批量删除短信模板接口。 接收状态报告/批量接收状态报告接口新增请求参数statusDesc,表示错误码描述。 发送短信/发送分批短信/API错误码(发送短信)章节新增E000041、E000042、E000043、E000044、E000045错误码。 2024-07-15 第十五次正式发布。 本次变更如下: “API错误码(发送短信)”章节新增E000630错误码。 2024-07-03 第十四次正式发布。 本次变更如下: 下线“策略和授权项说明”章节内容。 2024-05-16 第十三次正式发布。 本次变更如下: 状态回执错误码( 国内短信)新增E200047错误码。 2024-01-26 第十二次正式发布。 本次变更如下: 状态回执错误码( 国内短信)新增UT:0023错误码。 2022-10-28 第十一次正式发布。 本次变更如下: API文档结构优化,新增“使用前必读”、“API概况”、“如何调用API”与“附录”等章节。 2022-7-21 第十次正式发布。 本次变更如下: 新增短信应用、模板和签名接口。 2019-10-16 第九次正式发布。 本次变更如下: 发送短信/发送分批短信:响应参数status新增取值E200041。 接收状态报告:请求参数status和orgCode状态码归一。具体变更如下: 请求参数status删除取值RTE_ERR。 请求参数orgCode取值合入status。其中,请求参数status新增取值E200018-E200027、E200032、E200034-E200036、E200038,删除原orgCode参数取值E200040、E200041、E200042、E200045。 2019-09-05 第八次正式发布。 本次变更如下: 接收状态报告接口:请求参数status新增取值SC:0016-SC:0018。 2019-06-30 第七次正式发布。 本次变更如下: 发送短信/发送分批短信接口:结果码E200037变更为E000510。 接收状态报告接口:请求参数status新增取值SC:0013-SC:0015。 2019-03-30 第六次正式发布。 本次变更如下: 接收状态报告接口: 请求参数source新增取值3。 请求参数status新增取值SC:0001-SC:0012。 2019-01-18 第五次正式发布。 本次变更如下: 接收状态报告接口:请求参数orgCode新增取值E200040、E200041、E200042、E200045。 2018-12-24 第四次正式发布。 本次变更如下: 发送短信/发送分批短信接口:新增请求参数signature,对应通用模板功能。 2018-09-30 第三次正式发布。 本次变更如下: 发送短信/发送分批短信接口:新增结果码E200037。 接收状态报告接口:请求参数orgCode新增取值E200038。 2018-08-17 第二次正式发布。 本次变更如下: 发送短信/发送分批短信接口: 新增请求参数extend。 响应参数status新增取值E200031。 新增结果码E000027。 接收状态报告接口: 新增请求参数extend、to。 请求参数orgCode新增取值E200034、E200035、E200036。 2018-01-01 第一次正式发布。
  • 资质已审核通过,关联上签名后,为何签名的状态为“处理完毕(资质审核中)”? 历史已审核通过的签名,单击“补充资质”,关联上对应的资质后,会提交审核。若签名和资质相符,则签名状态会变更为“处理完毕(实名报备中)”并向运营商报备,报备完成后签名状态变更为“处理完毕”;若签名和资质不符,则签名状态会变更为“处理完毕(实名报备失败)”,您需要根据报备失败的原因进行修改后,重新提交资质报备。 父主题: 资质相关
  • 模板规范 模板规范分为模板格式规范和模板内容规范。 模板格式规范 文本短信模板限500字符。 不支持使用【】,【】可能会与签名混淆,导致发送失败。 不支持使用特殊符号,如¥、★、^_^、&、√、※、[]等,特殊符号可能会导致短信出现乱码。 模板内容规范 模板必须体现实际公司业务,除变量以外的文本内容必须可判断短信含义和使用场景,请尽可能多的使用固定文字描述。 不允许发送未经许可的邀请,主要指邀请注册、邀请成为会员或报名参加活动等行为。 房地产、教育、游戏行业暂只支持验证码短信。 禁止发送涉及以下信息或关键字的短信:股票、移民、金融、面试招聘、博彩赌球,彩票、返利、贷款、催款、投资理财、中奖、一元夺宝、一元秒杀、A货、医疗、整形、美容、会所、酒吧、黄赌毒、足浴、带有威胁性质、皮草、助考、商标注册、加群、加QQ、加微信、贩卖个人信息、APP下载/推广链接、好评返现、用户拉新、用户召回、运营商相关(增值业务、营业厅,移动,联通,电信,广电,大王卡,短信群发、4G\5G等)、代写论文刊物、棋牌、赌博、游戏、法院诉讼、传票、征信黑名单、党政维权、原油期货、贵金属、私募股权、评价、留学、海外置业投资、银行汇票、工商代办、开发票、招募合伙人、邀请注册、驾驶证年审、售卖软件、手机或山寨机买卖、回复确认收货、违禁品、虚拟货币、邮币邮票、上门追讨、宗教、迷信、二类电商、交友、婚恋、POS机、积分兑换、红白事、法律、财税、代理认证、专利、加盟、展会、调解、借贷、分期、积分清零、刷单、加客服、淘口令、零元购、公司注册、知识产权、公积金/社保代申报、保健养生、养老、数字藏品、问卷调查、培训讲座、保险、直播、烟、酒、茶叶、兼职、房产买卖、装修建材等及其他违反法律法规的内容。 模板内容不需要填写短信签名,发送短信时系统会自动添加。 不同类型的模板有不同的模板规范,如下: 类别 变量规范 内容规范 模板示例 验证码短信 仅支持一个变量,用于填写数字验证码。 验证码变量的“最大长度”要求为8位及以下。 国内短信必须含有验证码,注册码,校验码,动态码这4个词其中之一。 请参考短信模板示例。 通知短信 链接和联系方式不支持使用变量发送,请填写在模板的固定文本中。 不支持带营销推广的内容。 链接只能为固定网址,不能是跳转链接或短网址。 请参考短信模板示例。 推广短信 不支持变量,模板只能为纯固定文本。 推广短信除公共规范外,另禁止发送涉及以下信息的短信:培训、招商加盟类、团购会、装修(含建材,家私)、烟、酒、茶、捐款献血、迷信色彩、人工或软件刷单、做任务、虚拟货币、人民币收藏、钱币买卖、沙发翻新、工商代办、代开发票、买卖黑车、非法钓鱼、会展、网站、优惠券类推广、卡类、保险、税票、APP推广、办证、回收、医疗保健、信用卡、交友、猎头、直播及其他违反法律法规的内容。 只支持发送给有订购关系的会员用户,模板必须体现是发送给会员。 必须添加退订方式,支持回复“R”进行短信退订回复。 联系方式仅支持固话或400电话,不支持手机号。 不支持携带变量链接,请将链接作为固定文本;链接只能为固定网址,不能是跳转链接或短网址。 - 模板规范可能随运营商规则变化实时调整,最终以模板审核结果为准。 如遇到违反规范并造成恶劣影响的,将严肃处理并进行封号!请严格遵守规范要求,加强自身业务安全,健康发送短信。
  • 变量示例 变量格式 填写示例 说明 按序号标识 ${1}、${2}、...、${20} 长度限制:1-20个字符。 中间数字应代表变量在模板内容中的位置顺序。即${1}表示模板内容中的第一个变量,${2}表示模板内容中的第二个变量,以此类推。 说明: 特殊内容(如网址、手机号等)不允许设置局部变量,如www.${1}.cn、186${2}1234等。 按类型标识 ${PHONE}、${CHARDIGIT}、${DATETIME}、${MONEY}、${TEXT} 中间字符表示变量类型,各变量有默认长度限制,不支持自定义设置。 如有任何疑问,请联系华为云智能客服,将有专人为您解答。
  • 模板示例 您需要自行编辑短信内容并申请短信模板,才能发送短信,验证码短信和通知短信的模板样例请参考下表。 推广短信无模板样例,您可参考模板规范和变量规范编辑您的模板。 验证码短信示例 应用场景 模板示例 变量属性 登录/验证 您的动态码为:${1},5分钟内有效!请勿泄漏! ${1}:其他号码 您的校验码为:${1},您正在使用移动服务平台,请勿泄漏验证码。 您的验证码为:${1},该验证码5分钟内有效,请勿泄漏于他人! 您的验证码为:${1},请尽快完成验证。祝您生活愉快! 注册 您的注册码为:${1},您正在注册成为会员,感谢您的支持! 修改密码 您的检验码为:${1},您正在进行密码重置操作,如非本人操作,请忽略本短信! 修改手机号 您正在修改注册手机号码,验证码为:${1}(5分钟有效),为保障账户安全,请勿向任何人提供此验证码。 找回密码 您正在进行密码找回,验证码为:${1} (10分钟内有效),请勿向任何人提供此验证码 登录 验证码:${1},您正在登录平台账号,如非本人操作,请勿泄漏 。 变更信息 验证码:${1},您正在变更重要信息,请妥善保管账户信息。 通知短信示例 应用场景 模板示例 变量属性 会议 温馨提醒:${1} ${2} - ${3} 的会议即将开始,请您准时参加。 ${1}${2}${3}:时间 消费 尊敬的客户:您${1} ${2}消费${3}元,当前账号余额${4}元。 ${1}${2}:时间 ${3}${4}:金额 审核 您的申请已于${1} ${2}审批通过,请登录平台确认。 ${1}${2}:时间 注册 您申请的用户名为:${1},密码:${2},请登录并修改密码。 ${1}:其他 ${2}:其他号码 欢迎您的加入!请用注册的手机号码及初始密码(${1})登录。 ${1}:其他号码 修改密码 尊敬的用户,您的密码已经重置为${1},请尽快登录并修改密码。 ${1}:其他号码 快递 您的订单${1}已打包发送,快递单号${2},请注意查收。 ${1}${2}:其他号码 您的快递${1}正在配送中,请注意查收。 ${1}:其他号码 取票 您已成功预订${1}张门票,取票密码:${2},请提前到达并兑换门票。 ${1}${2}:其他号码 预约 您已成功预约 ${1} ${2}-${3},预约号${4},请提前到达等候叫号。 ${1}${2}${3}:时间 ${4}:其他号码 排队 您的排队号${1},您前面还有${2}人等待,请在现场等候叫号。 ${1}${2}:其他号码 售后咨询 已安排售后人员和您联系,请您保持电话畅通耐心等待,谢谢! - 兑换码 您的兑换申请已经通过,兑换码为${1},请勿泄漏。 ${1}:其他号码
  • 模板审核常见问题 短信模板审核的通用问题和处理建议如下: 类型 一级问题 二级问题 处理建议 错误模板示例 正确模板示例 申请错误 所属签名错误 选择“华为云短信测试”及通用签名 申请模板时,需要选择自己申请的签名。 建议在有两个以上同类型签名需要使用同一个模板时选择通用签名。 - 更多正确示例请参见模板示例。 短信模板属性与短信签名属性不一致 短信模板属性需和短信签名属性保持一致。(如:不支持以A公司的签名申请关于B公司业务的模板内容。) - 更多正确示例请参见模板示例。 在选择纯英文签名时选择了[] 目前国内短信签名符号格式仅支持【】,请修改后提交。 - 更多正确示例请参见模板示例。 短信类别错误 通知内容误选验证码类、推广内容选通知类等 根据自己的短信内容选择适合的短信类型。 - 更多正确示例请参见模板示例。 格式错误 变量错误 变量数量错误 不支持连续变量,变量总数不能超过20个。 温馨提醒:${PHONE}${CHARDIGIT}${DATETIME}的会议即将开始,请您准时参加。 温馨提醒:${1}-${2}的会议即将开始,请您准时参加。 变量格式错误 变量格式为${1}、${2}、...、${20},中间数字应代表变量在模板内容中的位置顺序。 不允许设置局部变量,如www.${1}.cn、186${2}1234等。 温馨提醒:${3}-${5}的会议即将开始,请您准时参加。 温馨提醒:${1}-${2}的会议即将开始,请您准时参加。 变量属性错误 创建模板时,支持以下五种变量属性: 电话号码:可以传入手机号、座机号、95或400、800电话等,长度为1-15个字符。 其他号码:主要用途为订单号,密码、随机密钥等,长度为1-20个字符。 时间:需要符合时间的表达方式,长度为1-20个字符。 金额:仅支持传入能够正常表达金额的数字、小数点或中文,例如壹、贰、叁、肆等,长度为1-20个字符。 其他(如名称、账号、地址等):可以设置为公司/产品/地址/姓名/内容/账号/会员名等,长度为1-20个字符。 您的验证码为:${NUM_6},5分钟内有效!请勿泄漏! 您的验证码为:${CHARDIGIT},5分钟内有效!请勿泄漏! 重复签名错误 模板内容中额外添加短信签名 发送时系统会自动添加签名【签名内容】,请去除。 【签名】您的验证码为:${1},5分钟内有效!请勿泄漏! 您的验证码为:${1},5分钟内有效!请勿泄漏! 内容错误 有严禁符号 不支持如¥、★、^_^、&、√、※、[]等特殊符号,可能会导致短信出现乱码 含不支持发送符号的,请删除。 模板中含【】符号可能会致使短信发送失败,请删除。 温馨提醒:${1}&${2}的会议即将开始,请您准时参加。 温馨提醒:${1}-${2}的会议即将开始,请您准时参加。 变量使用错误 笼统设置变量属性为“其他”,未区分时间、电话号码、数值等。 请根据短信实际内容,合理使用变量,并设置相应的变量属性,不可笼统设置为“其他”。 尊敬的客户:您${TEXT}消费${TEXT}元,当前账号余额${TEXT}元。 尊敬的客户:您${DATETIME}消费${MONEY}元,当前账号余额${MONEY}元。 内容不清晰 全变量模板;固定文本太少,变量过多,取值过大,无法辨认业务场景等 全变量模板不支持,按需求设置变量并使用尽可能多的固定文本描述,以便能判读短信内容含义及使用场景。 ${1}-${2}的${3}。 温馨提醒:${1}-${2}的会议即将开始,请您准时参加。 缺少必备关键字 推广短信内容需要添加退订方式,支持回复“R”进行短信退订 推广短信内容需要添加退订方式,请在模板中添加退订方式,支持回复“R”进行短信退订。 尊敬的会员,您收到了一个xx送给您的大礼包,请通过微信小程序查询。 尊敬的会员,xx商场年中大促全场3折起!精选款5折,叠加满500减100,全城独家限6月18日前。地址xx路xx号。拒收请回复R。 验证码模板内容必须含有验证码,注册码,校验码,动态码这4个词其中之一 请添加相应关键字,验证码模板内容必须含有验证码,注册码,校验码,动态码这4个词其中之一。 ${1},5分钟内有效!请勿泄漏! 您的验证码为:${1},5分钟内有效!请勿泄漏! 不同短信模板类型特有的问题如下: 类型 一级问题 二级问题 处理建议 错误模板示例 正确模板示例 验证码类 夹带禁发内容 不是纯验证码,夹带了营销内容 将非验证码内容删除。 您的验证码为:${1},该验证码5分钟内有效。登录之后领取新人专属福利,券等你来! 您的验证码为:${1},该验证码5分钟内有效,请勿泄漏于他人! 夹带其他变量 除验证码外还有其他长变量 请勿将短信其他内容设为变量,若验证码分注册、修改密码等多个类型,可以分开申请。 您的验证码为:${1},该验证码5分钟内有效,仅供${TXT_20}使用。 您的验证码为:${1},该验证码5分钟内有效,请勿泄漏于他人! 通知类 招聘面试不支持 - 平台目前不支持发送招聘、面试通知等,请谅解。 尊敬的XX,提醒您于${1}到${2}进行第一轮面试,请准备好相关资料。 更多正确示例请参见模板示例。 游戏、金融、房地产、教育通知不发 - 平台目前不支持发送游戏、房地产、金融、教育等通知,请谅解。 您有一个游戏奖励未领取,请登录XX手游领取。 更多正确示例请参见模板示例。 催缴性质的不发 - 平台不支持催缴短信、包括提醒支付,请谅解。 您有${MONEY}元账单待还款,最后还款日期未本月8日。 更多正确示例请参见模板示例。 通知夹带营销信息 前半段是通知内容,后半段是营销信息 通知类短信中不要夹带营销信息,可根据平台返回的审核说明对模板内容进行修改。 您已成功预订${1}张门票,取票密码:${2},请提前到达并兑换门票。关注XX公众号获取更多当地旅游信息。 您已成功预订${1}张门票,取票密码:${2},请提前到达并兑换门票。 短信含其他规则范围内的禁带内容 如优惠券、加QQ等短信模板规范中短信通知禁带内容 参照模板规范创建模板。 根据模板不通过时平台返回的审核说明对禁发内容进行删除。 更多正确示例见模板示例。 更多正确示例请参见模板示例。 推广类 明显盲发内容 没有带会员描述,模板内容无法识别是否发送给会员 发送对象为非注册用户、非会员用户、或非已产生购买的用户 开业宣传、业务介绍、公司介绍 在模板中添加会员称谓,模板内容中体现出是发会员,确认会员关系。 开业宣传、业务介绍、公司介绍等不能确认会员关系的内容均属盲发短信,不支持发送,请谅解。 xx商场xx服饰上线春季新品,欢迎到店选购,拒收请回复R。 尊敬的会员,xx商场xx服饰上线春季新品,会员叠加满500减100,限6月18日前。地址xx路xx号。拒收请回复R。 4S店、车类不发 - 4S、车类投诉风险过高,平台暂不支持发送,请谅解。 尊敬的客户,您在xx4S店产生了一笔消费单,请及时查看。 - 短信内链接无效或不合规,变量明显指向链接的 链接内容与短信内容不符、链接失效等 模板内容只支持全固定文本链接,以便平台对链接内容进行核实。 若链接为无效链接或无法打开,请您先自行检查是否填错。 若链接内容与模板内容不符,不支持发送。 亲爱的会员,您在xx品牌消费满500获赠100元的礼金券,已推送至您的券包,点击${1}链接查看,有效期为6.1-6.18,使用规则详见券面,拒收请回复R。 亲爱的会员,您在xx品牌消费满500获赠100元的礼金券,已推送至您的券包,点击https://xx/xx查看,有效期为6.1-6.18,使用规则详见券面,拒收请回复R。 注意: https://xx/xx为链接示例,请填入真实有效且与模板内容相符的固定链接。 涉及房产、家装、展会等模板审核标准中明显禁止的类型 - 创建模板前,请先仔细阅读模板规范,涉及不支持发送的行业类型,平台将直接驳回。 国际新工艺展览会于${DATETIME}国际会议中心展开,领门票点击https:xxxx。 - 内容过期 带QQ、微信\微信群、关注公众号、个人联系方式等内容 带链接变量 如重大节日后提交节日活动模板 任何节假日(如五一、十一等)的推广内容,都需提前审核模板,以免错过发送时间,造成短信内容过期。 推广短信不支持带加QQ、微信、微信群、关注公众号、个人联系方式、联系方式变量等,建议联系方式改为固话或400或官网链接等。 不支持将链接作为变量,请将链接作为固定文本。 尊敬的会员。xx商场庆端午开场,全场低至3折,更有粽子礼盒消费满额送,欢迎到场参与活动,拒收请回复R。 - 如有任何疑问,请联系华为云智能客服,将有专人为您解答。
  • 模板规范 模板规范分为模板格式规范和模板内容规范。 模板格式规范 文本短信模板限500字符。 不支持使用【】,【】可能会与签名混淆,导致发送失败。 不支持使用特殊符号,如¥、★、^_^、&、√、※、[]等,特殊符号可能会导致短信出现乱码。 模板内容规范 模板必须体现实际公司业务,除变量以外的文本内容必须可判断短信含义和使用场景,请尽可能多的使用固定文字描述。 不允许发送未经许可的邀请,主要指邀请注册、邀请成为会员或报名参加活动等行为。 房地产、教育、游戏行业暂只支持验证码短信。 禁止发送涉及以下信息或关键字的短信:股票、移民、金融、面试招聘、博彩赌球,彩票、返利、贷款、催款、投资理财、中奖、一元夺宝、一元秒杀、A货、医疗、整形、美容、会所、酒吧、黄赌毒、足浴、带有威胁性质、皮草、助考、商标注册、加群、加QQ、加微信、贩卖个人信息、APP下载/推广链接、好评返现、用户拉新、用户召回、运营商相关(增值业务、营业厅,移动,联通,电信,广电,大王卡,短信群发、4G\5G等)、代写论文刊物、棋牌、赌博、游戏、法院诉讼、传票、征信黑名单、党政维权、原油期货、贵金属、私募股权、评价、留学、海外置业投资、银行汇票、工商代办、开发票、招募合伙人、邀请注册、驾驶证年审、售卖软件、手机或山寨机买卖、回复确认收货、违禁品、虚拟货币、邮币邮票、上门追讨、宗教、迷信、二类电商、交友、婚恋、POS机、积分兑换、红白事、法律、财税、代理认证、专利、加盟、展会、调解、借贷、分期、积分清零、刷单、加客服、淘口令、零元购、公司注册、知识产权、公积金/社保代申报、保健养生、养老、数字藏品、问卷调查、培训讲座、保险、直播、烟、酒、茶叶、兼职、房产买卖、装修建材等及其他违反法律法规的内容。 模板内容不需要填写短信签名,发送短信时系统会自动添加。 不同类型的模板有不同的模板规范,如下: 类别 变量规范 内容规范 模板示例 验证码短信 仅支持一个变量,用于填写数字验证码。 验证码变量的“最大长度”要求为8位及以下。 国内短信必须含有验证码,注册码,校验码,动态码这4个词其中之一。 请参考短信模板示例。 通知短信 链接和手机手机号码不支持使用变量发送,请填写在模板的固定文本中。 不支持带营销推广的内容。 链接只能为固定网址,不能是跳转链接或短网址。 请参考短信模板示例。 推广短信 不支持变量,模板只能为纯固定文本。 推广短信除公共规范外,还禁止发送涉及以下信息或关键字的短信:培训、招商加盟类、团购会、装修(含建材,家私)、烟、酒、茶、捐款献血、迷信色彩、人工或软件刷单、做任务、虚拟货币、人民币收藏、钱币买卖、沙发翻新、工商代办、代开发票、买卖黑车、非法钓鱼、会展、网站、优惠券类推广、卡类、保险、税票、APP推广、办证、回收、医疗保健、信用卡、交友、猎头、直播及其他违反法律法规的内容。 只支持发送给有订购关系的会员用户,模板必须体现是发送给会员。 必须添加退订方式,支持回复“R”进行短信退订回复。 联系方式仅支持固话或400电话,不支持手机号。 不支持携带变量链接,请将链接作为固定文本;链接只能为固定网址,不能是跳转链接或短网址。 - 模板规范可能随运营商规则变化实时调整,最终以模板审核结果为准。 如遇到违反规范并造成恶劣影响的,将严肃处理并进行封号!请严格遵守规范要求,加强自身业务安全,健康发送短信。
  • 接收状态报告 需要引入的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); } }
  • 接收上行短信 需要引入的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 import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.PostMapping; @RestController public 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); } }
  • 调测指引 本节为您介绍新手开发者进行二次开发的调测点指引。 短信中心包括移动、联通、电信、广电、供应商(线路代理商)。 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 OK Date: Fri, 13 Apr 2018 06:29:08 GMT Server: WebServer Content-Type: application/json;charset=UTF-8 Content-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 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"]) } }
  • 国内短信开发数据准备 国内短信启动开发前需要准备的数据如下: 参数名 取值样例 获取方式 相关文档 APP_Key c8RWg3ggEcyd4D3p94bf3Y7x1Ile 登录管理控制台,从国内短信“应用管理”页面获取。 创建短信应用 APP_Secret q4Ii87BhST9vcs8wvrzN80SfD7Al APP接入地址 https://smsapi.cn-north-4.myhuaweicloud.com:443 签名名称 华为云短信测试 登录管理控制台,从国内短信“签名管理”页面获取。 须知: 请根据“所属应用”关联获取。当模板ID指定的模板类型为通用模板时,必须准备签名名称。 申请短信签名 签名通道号 csms12345678 模板ID 8ff55eac1d0b478ab3c06c3c6a492300 登录管理控制台,从国内短信“模板管理”页面获取。 须知: 请根据“所属应用”和“所属签名”关联获取。发送分批短信时,可以指定多个模板ID。 申请短信模板 访问URI 发送短信:/sms/batchSendSms/v1 发送分批短信:/sms/batchSendDiffSms/v1 从发送短信API/发送分批短信API页面中的“接口类型”介绍部分获取。 发送短信 发送分批短信 上表中的参数,除“访问URI”为固定值外,其他参数请根据对应的获取方式到控制台获取,取值样例仅为示例。 准备的数据与短信API请求参数关联关系如下: 如有任何疑问,请联系 华为云智能客服,将有专人为您解答。
  • 接收状态报告 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 # -*- 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)
共100000条