需求描述:
现在是2020年5月,中移动RCS刚刚推出,由于工作原因需要在原开发的SIP协议栈基础上增加对RCS富媒体短信的支持,但是这个系统相关的一些业务支持还不清楚,这里做下记录。
RCS系统概述:
RCS(Rich Communication Suite)也叫增强型富媒体短信,什么概念呢,普通的短信一般只能是文本,RCS增强型富媒体短信有点象微信里的消息,可以是文本,也可以是图片,短视频,交互式查询框,也能够发红包,可以想象一下在不安装任何app的情况下就能实现微信的大部分功能。
RCS平台侧网络结构:
在中移动内部网络中会新增加5GMC消息系统和Maap平台管理模块。UE与5G消息之间的接口基于GSMA UP2.4系列标准,要求平台兼容UP2.3、UP1.0及企标5G消息终端,但新终端均应以UP2.4系列及以上版本作为技术参考。
信令接口使用SIP协议,涉及到的SIP方法主要有两种:MESSAGE与INVITE,两种方法的消息体格式是统一的。媒体流的传输使用MSRP,媒体通道的连接信息在信令交互中协商。
终端发消息的方式:
平台稍微有点复杂,这些基本地上都由大厂来完成,作为user端,最主要是的是如何完成消息的发送。上段所描述的MESSAGE与INVITE方法也有这种说法:
- pager模式,用信令传递IM,消息之间没有明确的联系,或者说“会话”的概念仅存在于用户的想象中。
- session模式,用INVITE建立,用BYE结束的一个会话,IM是其中的媒体流。
当长度小于STANDALONE SWITCHOVER SIZE设置的值时,采用pager模式;大于时采用session模式。STANDALONE SWITCHOVER SIZE的默认值是1300字节,这个值也可以在终端注册时进行改变。
CPIM消息
CPIM (Common Presence and Instant Messaging)是一种IM通信中的会话描述格式。CPIM具体的消息格式由 RFC3862 定义。
(1)MESSAGE消息分为两部分:消息头部分、消息体部分。
(2)IMDN做为状态报告,当用户需要状态报告时,在CPIM中携带IMDN头域。
(3)消息文本内容被封装在CPIM中,并使用base64做为传输编码。
(4)对于无法在SIP MESSAGE方法内携带的SIP头域,如Contact头,在需要携带时,可将此类头域作为参数携带于CPIM消息体内的From头域中。
5G消息体类型
Content type | 用途 |
---|---|
text/plain | 表示消息内容为无格式正文 |
Message/CPIM | 消息采用CPIM格式,可携带CPIM规范定义的头域,如携带IMDN需要的头域等 |
application/sdp | 表示内容包含SDP信息可用于媒体协商 |
application/resource-lists+xml | 用于群发/群聊消息时,在信令中携带号码列表 |
multipart/mixed | 表示消息体中的内容是混合组合类型,多段数据用boundary分隔 |
message/imdn+xml | 消息体中的内容是IMDN信息 |
application/vnd.gsma.rcspushlocation+xml | 地理位置推送,用于群聊session中发送地理位置的MSRP消息 |
application/vnd.gsma.rcs-ft-http+xml | HTTP文件传输 |
application/vnd.gsma.botmessage.v1.0+json | 富媒体卡片 |
application/vnd.gsma.botsuggestion.v1.0+json | 建议操作 |
application/vnd.gsma.botsuggestion.response.v1.0+json | 对建议操作的回复 |
application/vnd.gsma.botsharedclientdata.v1.0+json | 终端共享数据 |
application/vnd.gsma.rcsrevoke+xml | Chatbot消息撤回请求(不到达终端) |
application/vnd.gsma.rcsspam-report+xml | Chatbot消息举报 |
5G消息中心注册流程
注册流程和一般的SIP注册流程相同,在参数上略有区别。需携带sip.instance=<UUID>,UUID格式根据RFC4412格式,由DMS配置参数获取,需携带终端支持的业务能力。
终端支持能力见表:
参数条目 | 子条目 | 参数条目属性 | 是否可选 |
---|---|---|---|
Enabler协议信息 | 协议版本 | 终端使用的消息协议版本,即CPM版本信息 | 必选 |
Service业务信息 | 携带该头的端的类型 | "client" / "serv" / "bot" | 必选 |
终端使用的RCS版本 | RCS profile版本号 | 必选 | |
Terminal information 终端信息 | 终端厂商名 | 厂商名称缩写,定义同RCC.14第2.4节 | 终端 必选 |
客户端型号 | RCS客户端型号信息。定义同RCC.07 v10.0第2.3.3.2节需要在HTTP相关请求中同样携带此信息 | 终端必选 | |
Operating System information | 操作系统信息 | 操作系统类型 "Android" / "IOS" / "SymbianOS" / "Windows" / "Other" | 终端必选 |
操作系统版本 | 版本号 | 终端必选 | |
厂商自定义扩展 | 自定义扩展内容 | 终端可选 |
消息举例(注册请求(AKA鉴权方式)):
REGISTER sip:bj.ims.mnc000.mcc460.3gppnetwork.org SIP/2.0
Via: SIP/2.0/UDP 183.1.28.128:11065;branch=z9hG4bK06ip8ai8obyobpap0idbch5ao;Role=3;Dpt=8e62_16;TRC=71a-ffffffff
Call-ID: asbcGGecbxhJM@50.51.120.82
From: <sip:+8613800138100@bj.ims.mnc000.mcc460.3gppnetwork.org>;tag=HHecbxH
To: <sip:+8613800138100@bj.ims.mnc000.mcc460.3gppnetwork.org>
CSeq: 1 REGISTER
Allow: INVITE,ACK,BYE,CANCEL,REGISTER,INFO,PRACK,SUBSCRIBE,NOTIFY,MESSAGE,REFER,PUBLISH
Authorization: Digest username="+8613800138100@bj.ims.mnc000.mcc460.3gppnetwork.org",realm="bj.ims.mnc000.mcc460.3gppnetwork.org",nonce="",uri="sip:bj.ims.mnc000.mcc460.3gppnetwork.org",response=""
Supported: 100rel,path
User-Agent: CPM-client/OMA2.2 RCS-client/UP_2.0UP_2.4 term-Vendor1/Model1-XXXX client-CLN1/Software1234 OS-Android/8.1
P-Access-Network-Info: 3GPP-E-UTRAN-TDD;utran-cell-id-3gpp="4600800000000001"
Contact: <sip:user@183.1.28.128:11065;transport=udptcp;Dpt=8e62_16; sip.instance="urn:gsma:imei<urn:uuid:cf9e4a75-663b-1032-ac45-159f940783c5>:351564060017928">;expires=3600;+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg,urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.largemsg;+g.gsma.rcs.cpm.pager-large, urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session";+g.3gpp.iari-ref=" urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot.sa,urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.fthttp";+g.gsma.rcs.botversion="#<=4"
Path: <sip:term@183.1.28.128:11065;transport=udptransport=tcp;lr;ssn;hwnos;TYPE=V4;IP=50.51.120.82;PORT=16891;Dpt=8e62_86;TRC=71a-ffffffff>
P-Visited-Network-ID: "cmcc.rcs.com"
Max-Forwards: 70
Content-Length: 0