总体说明
实现符合5G消息规范(RCS)
的消息对象数据结构。
rcs
rcs-data
只定义消息对象的数据结构,不执行数据处理相关的逻辑,例如:生成 ID。
消息结构
RcsMsg
接口定义了消息对象的基本属性和方法。
RcsMsgBase
类提供消息对象的最小实现。rcs-data
中,所有消息对象记录的都是符合mime
规范的内容,都包含 1 个mime/Entity
实例。可以用header
方法设置或读取消息头。因为,消息是可以嵌套的,消息的基本信息不一定用在自身一级,所以消息的基本信息没有记录在mine
的头中。
消息对象可以分为携带消息内容的消息对象和用于补充信息其他消息的消息对象。携带消息内容的消息对象是RcsMsgMono
类。携带其他消息的消息对象是RcsMsgDecorator
,包括:递送报告请求(ImdnDemand
),建议列表(SuggestionChiplist
)和群发列表(RecipientList
)。
一个完整的消息可能包含了多种消息对象,但是总有一个要发送的基础内容,RcsMsgInitail
代表这类消息,包括:文本(Text
),文件(File
),卡片(Card
/CardCarousel
)和建议回复(SuggestionResponse
)。
ImndReply
代表递送报告回复。递送报告回复不会被“装饰”。
构造消息
rcs-data
提供了用于构造消息对象的Builder
类。构造消息对象前首先要生成Builder
实例。
const builder = Builder(From)
.conversationId(ConversationId)
.contributionId(ContributionId)
.messageId(MessageId)
通过builder
实例创建具体的消息对象。
构造文本消息
const rcsmsg = builder.text(to, content)
构造文件消息
const rcsmsg = builder.file(to, fileInfo, thumbnailInfo)
构造卡片消息
const rcsmsg = builder.card(to, cardFrame)
解析消息
rcs-data
支持解析两类格式的消息生成消息对象,包括:CPIM,JSON。
CPIM
对应的是SIP
消息中的body
部分。
const rcsmsg = Parser.parseCPIM(sipBody)
JSON
对应的是从非SIP
通道收发的消息。
let rcsmsg = Parser.parseJSON(jsonObject)
消息对象通常是嵌套的,RcsMsg.contentType
对应的是最外层消息对象的类型(通常是message/cpim
),如果需要确定基本消息内容的类型,通过RcsMsg.initailContentType
进行判断,类型的值在constants/Message_Content_Type
中有枚举定义。
输出消息
发送消息对象时要输出符合发送通道要求格式的内容。
SIP 通道发送时,因为需要分别处理消息头和消息体,所以分别返回headerLines
和bodyString
。headerLines
加到 SIP 的消息头中,bodyString
作为消息体。
let { headerLines, bodyString } = rcsmsg.output()
除了消息对象mime
中携带的头信息,headerLines
输出还会输出From
,To
,Conversation-ID
,Contribution-ID
头。请注意大小写。
非 SIP 通道发送时输出 JSON 格式的对象(没有序列化成字符串)。
let po = rcsmsg.outputPlainObject()
common
DateTime.value
返回ISO8601
带时区格式的日期时间字符串,例如:2022-01-29T10:37:30.350+08:00。
cpim
待补充
mime
待补充
单元测试
待补充