云MAS中CMPP3.0协议封装与移动短信状态报告状态码说明

简介: 云MAS中CMPP3.0协议封装与移动短信状态报告状态码说明

【1】几个术语

image.png

ISMG_Id

网关代码:0XYZ01~0XYZ99,其中XYZ为省会区号,位数不足时左补零,如北京编号为1的网关代码为001001,江西编号为1的网关代码为079101,依此类推。

SP_Id

SP的企业代码:网络中SP地址和身份的标识、地址翻译、计费、结算等均以企业代码为依据。企业代码以数字表示,共6位,从“9XY000”至“9XY999”,其中“XY”为各移动公司代码。

SP_Code

SP的服务代码:服务代码是在使用短信方式的上行类业务中,提供给用户使用的服务提供商代码。服务代码以数字表示,全国业务服务代码长度为4位即“1000”-“9999”;本地业务服务代码长度统一为5位,即“01000”-“09999”。

信产部对新的SP的服务代码分配提出了新的要求,要求以“1061”-“1069”作为前缀,目前中国移动进行了如下分配:1062—用于省内SP服务代码,1066—用于全国SP服务代码,其它号段保留。


Service_Id


SP的业务类型,数字、字母和符号的组合,由SP自定,如图片传情可定为TPCQ,股票查询可定义为11。

数据类型定义

image.png


【2】网络结构拓扑

如下图所示:


互联网短信网关(ISMG)是业务提供商(SP)与移动网内短信中心之间的中介实体,互联网短信网关一方面负责接收SP发送给移动用户的信息和提交给短信中心。另一方面,移动用户点播SP业务的信息将由短信中心通过互联网短信网关发给SP。另外,为了减轻短信中心的信令负荷,互联网短信网关还应根据路由原则将SP提交的信息转发到相应的互联网短信网关。互联网短信网关通过向汇接网关(GNS)查询的方式获得网关间的转发路由信息。

另外,ISMG还必须与数据业务管理平台DSMP进行连接,在业务流程中对用户、业务以及定购关系等进行鉴权并对业务进行批价。

这里业务提供商可以理解为就是“我们”。


【3】CMPP协议

① CMPP协议主要提供以下两类业务操作

(1)短信发送(Short Message Mobile Originate,SM MO)

(2)短信接收(Short Message Mobile Terminated,SM MT)

② 协议栈

CMPP协议以TCP/IP作为底层通信承载,具体结构如图所示:


③ 通信方式

各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发链路检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对CMPP消息的发送。

现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。

  • 长连接

通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。

参数C、T、N原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3。


网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。


消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建议为16,即接收方在应答前一次收到的消息最多不超过16条。

长连接的操作流程举例如图所示:

  • 短连接

通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。

网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。

短连接的操作流程举例如图所示:



④ 交互过程中的应答方式

在SP与ISMG之间、SMSC与ISMG之间及ISMG之间的交互过程中均采用异步方式,即任一个网元在收到请求消息后应立即回送响应消息。

如下图所示:


【4】CMPP Message

① 消息结构

image.png

这里需要注意,消息头是所有消息公共包头。也就是所有消息都是消息头+消息体。消息头结构在这里定义说明了,下面的消息定义皆为消息体结构定义。

② 消息头格式(Message Header)

image.png

以下为业务提供商(SP)与互联网短信网关(ISMG)间的消息定义。

③SP请求连接到ISMG(CMPP_CONNECT)操作

SP为客户端,向作为服务器端的ISMG发起连接请求,在通过身份验证之后SP与ISMG之间方可进行数据传输。

CMPP_CONNECT操作的目的是SP向ISMG注册作为一个合法SP身份,若注册成功后即建立了应用层的连接,此后SP可以通过此ISMG接收和发送短信。

ISMG以CMPP_CONNECT_RESP消息响应SP的请求。


3.1 CMPP_CONNECT消息定义(SP->ISMG)

image.png


3.2 CMPP_CONNECT_RESP消息定义(ISMG->SP)

image.png

④SP或ISMG请求拆除连接(CMPP_TERMINATE)操作


CMPP_TERMINATE操作的目的是SP或ISMG基于某些原因决定拆除当前的应用层连接而发起的操作。此操作完成后SP与ISMG之间的应用层连接被释放,此后SP若再要与ISMG通信时应发起CMPP_CONNECT操作。


ISMG或SP以CMPP_TERMINATE_RESP消息响应请求。

  • CMPP_TERMINATE消息定义(SP->ISMG或ISMG -> SP)无消息体。
  • CMPP_TERMINATE_RESP消息定义(SP->ISMG或ISMG -> SP)无消息体。

⑤ SP向ISMG提交短信(CMPP_SUBMIT)操作

CMPP_SUBMIT操作的目的是SP在与ISMG建立应用层连接后向ISMG提交短信。

ISMG以CMPP_SUBMIT_RESP消息响应。

5.1CMPP_SUBMIT消息定义(SP->ISMG)

image.png

image.png


5.2 CMPP_SUBMIT_RESP消息定义(ISMG ->SP)

image.png


⑥ SP向ISMG查询发送短信状态(CMPP_QUERY)操作

CMPP_QUERY操作的目的是SP向ISMG查询某时间的业务统计情况,可以按总数或按业务代码查询。ISMG以CMPP_QUERY_RESP应答。

6.1 CMPP_QUERY消息的定义(SP->ISMG)

image.png

6.2 CMPP_QUERY_RESP消息的定义(ISMG->SP)

image.png

⑦ ISMG向SP送交短信(CMPP_DELIVER)操作

CMPP_DELIVER操作的目的是ISMG把从短信中心(SMSC)或其它ISMG转发来的短信送交SP,SP以CMPP_DELIVER_RESP消息回应。

7.1 CMPP_DELIVER消息定义(ISMG->SP)

image.png

当ISMG向SP送交状态报告时,信息内容字段(Msg_Content)格式定义如下:

image.png

ISMG向SP送交状态报告中的STAT字段含义:发送短信的应答结果。SP根据该字段确定CMPP_SUBMIT消息的处理状态。

Stat字段含义如下表所示:

image.png

注意:

  • 其中ACCEPTED为中间状态,网关若从短信中心收到后应丢弃,不做任何操作;
  • Stat字段长度为7个字节,填写时应填上表中Final Message States中的缩写形式,如状态为DELIVERED时填写DELIVRD,依此类推;
  • SP等待状态报告缺省时间为48小时。

7.2 CMPP_DELIVER_RESP消息定义(SP -> ISMG)

image.png


⑧ SP向ISMG发起删除短信(CMPP_CANCEL)操作

CMPP_CANCEL操作的目的是SP通过此操作可以将已经提交给ISMG的短信删除,ISMG将以CMPP_CANCEL_RESP回应删除操作的结果。

8.1 CMPP_CANCEL消息定义(SP->ISMG)

image.png

8.2 CMPP_CANCEL_RESP消息定义(ISM->SP)

image.png

⑨ 链路检测(CMPP_ACTIVE_TEST)操作


本操作仅适用于通信双方采用长连接通信方式时用于保持连接。


CMPP_ACTIVE_TEST定义(SP-> ISMG或ISMG->SP)无消息体。


CMPP_ACTIVE_TEST_RESP定义(SP ->ISMG或ISMG->SP)

image.png


【5】状态码实例

① Stat状态码实例

image.png


② 管理平台DSMP返回的错误

image.png

image.png


③ SCP返回的错误

image.png


④ 下一级短信网关ISMG返回的错误

image.png


⑤ 短信中心SMSC返回的错误

image.png

image.png


【6】Command_Id说明

image.png

image.png


【7】封装CMPP3.0中遇到的一些实际问题

这里用的是移动的云mas,移动云mas首先要申请账号,移动政企申请后会把账号、密码和EC name(企业名称)发给你,然后你需要登录http://mas.10086.cn/login 页面后台,进行一系列操作。

CMPP3.0 移动云MAS接口地址:112.35.10.165:1991 这个分别对应ismgIp和ismgPort。就是短信网关的ip和端口。

然后,通常你需要在“管理”-“接口管理”中新建接口:

① CMPP_CONNECT参数


这里需要用到的参数有Source_Addr,Shared secret,Version和Timestamp。CMPP3.0中Version为0x30,Timestamp这个是时间戳,这两个不用再说。


那么Source_Addr,Shared secret究竟是什么?看接口文档给的文字定义并没有给实例,不免让人一头雾水。

如上面图中红字标注,此处的Source_Addr就是SP_Id,就是你申请接口时的用户名!Shared secret则是你申请接口时填写的密码!


② CMPP_SUBMIT中几个参数

Service_Id ,就是你的签名编码。

Msg_src,就是sp_id,就是你申请接口时候的用户名。

Src_Id,就是服务代码,这个和Service_Id同样可以在“管理”–“EC管理”里面看到。

至此,封装CMPP3.0时用到的几个核心参数就分析完了:

cmpp:
    ismgIp: 短信网关IP
    ismgPort: 短信网关端口
    spId: 申请接口的用户名
    sharedSecret: 申请接口的密码
    spCode: 服务代码
    version: 0x30--CMPP3.0是这个
    serviceId: 签名

③ 长连接与短连接

如果你每次请求都创建新的客户端与远程连接,那么不用做CMPP_ACTIVE_TEST。否则的话 ,你需要进行CMPP_ACTIVE_TEST操作。

你应该以某个间隔,周期性的向短信网关发送CMPP_ACTIVE_TEST,短信网关会返回一个CMPP_ACTIVE_TEST_RESP。否则短信网关会自动断开连接。也就是说,你需要写一个定时器,固定间隔执行CMPP_ACTIVE_TEST操作。


④ 应用签名问题

如下所示:

应用签名就是免签名,就是需要手动在短信内容开头(结尾也可以,建议开头)拼接签名,如【河南社保】。否则的话,回执状态中会提示签名为空导致短信发送失败。至于签名是什么,这个自己看云MAS管理后台就知道了,实在不知道问移动云MAS客户经理。

应用签名(免签名)需要客户经理走流程申请网关删除签名,本网签名也要删除。这样在发送短信的时候只需要在短信内容开头拼接短信签名就OK。

如下所示:

【河南社保】短信验证码:458932

业务场景:比如不同机构调用你的短信接口,不同机构使用不同的签名。


⑤ CMPP_DELIVER与短信发送状态


CMPP_DELIVER操作的目的是ISMG把从短信中心或其它ISMG转发来的短信送交SP,SP以CMPP_DELIVER_RESP消息回应。这是云MAS接口文档的原话,其实翻译成白话就是–短信发送状态!(而非短信提交状态,与CMPP_SUBMIT区别)。

也就是说,如果你要想监控短信发送状态,或者记录短信发送状态,就应该监控 CMPP_DELIVER!短信发送状态主要内容对应字段为Msg_Content,是一个对象,具体参考云mas cmpp3.0接口文档。


目录
相关文章
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
6757 0
|
3月前
|
数据采集 存储 人工智能
从0到1:天猫AI测试用例生成的实践与突破
本文系统阐述了天猫技术团队在AI赋能测试领域的深度实践与探索,讲述了智能测试用例生成的落地路径。
从0到1:天猫AI测试用例生成的实践与突破
|
6月前
|
JSON 运维 网络协议
做短信接口时,http接口和cmpp接口怎么选?
本文介绍了短信接口中HTTP与CMPP协议的区别及适用场景,帮助开发者根据业务需求选择合适的接口类型。
719 1
|
7月前
|
人工智能 Java 开发工具
MCP Java 开发指南
MCP Java 开发指南
4907 43
MCP Java 开发指南
|
Linux Apache
Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
7384 0
|
XML 前端开发 Java
怎样将MultipartFile和File互转
该文介绍了如何在Java开发中优雅地转换MultipartFile和File。MultipartFile是Spring框架用于接收上传文件的类,而File是操作系统文件的代表。文章提供了三种将MultipartFile转换为File的方法:使用`transferTo`方法、FileOutputStream和Java NIO。另外,还介绍了在测试场景下将File转换为MultipartFile,通过MockMultipartFile实现。
1594 1
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
7616 30
|
Java Android开发
IDEA设置项目编码格式【修改为GBK 或 UTF-8】
这篇文章介绍了在IntelliJ IDEA中如何设置项目编码格式,包括将项目编码修改为GBK或UTF-8的详细步骤和图解。
21724 12
IDEA设置项目编码格式【修改为GBK 或 UTF-8】