OMTP协议说明文档

news/2025/1/18 8:34:06/

OMTP协议说明文档

OMTP(Open Message Transport Protocol)是一套自定义IM消息传输协议。它工作在TCP/IP协议族上基于客户端-服务器即时通讯系统设计的消息通讯协议,数据编码方式为基于Tars/PB的二进制类型。

设计思想

  1. 将业务数据进行抽象归纳,分为频繁变动和稳定不变两部分;
  2. IM通道分离频繁变动的业务;
  3. IM 通道从复杂多变的业务中解放出来;
  4. OMTP协议只负责底层IM通道和稳定不变的业务部分;
  5. 当业务频繁变化时,OMTP协议最大限度保持不变;
  6. 增加业务的可扩展性,定制化特性;

协议包含的业务

IM协议的定义主要包含如下业务:

  • 用户登录及身份认证
  • 退出登录
  • 用户被踢
  • 心跳
  • 业务通知消息发送/响应
  • 单聊消息发送/响应
  • 群聊消息发送/响应
  • 最新消息会话,未读数获取请求/响应
  • 历史消息获取/响应
  • 数据同步请求/响应
  • 开始旁听会话请求/响应
  • 结束旁听会很请求/响应
  • 群聊创建请求/响应
  • 群聊解散请求/响应
  • 群聊加人请求/响应
  • 群聊减人请求/响应
  • 群聊名称,头像等修改请求/响应

OMTP协议字段

协议格式

OMTP(Open Message Transport Protocol)控制报文由两部分组成,按照图示描述的顺序:
OMTP控制报文的结构:

字段长度说明
Length4字节报文长度(包含本字段4字节)
Header可变报文头,tars格式二进制数据
Payload可变消息体,tars格式二进制数据
struct OTIMPack
{0 require OTIMHeader    header;1 require vector<byte> 	payload;
};

报头 Header

每个OMTP控制报文都包含一个报头。

格式
字段类型长度说明
typeshort2字节报文的类型
versionshort2字节协议版本号
flagslong4-8字节详见下文flags说明
packIdstring可变长度报文Id,建议为UUID
struct OTIMHeader
{0 require short         type;1 require short         version;2 require long          flags;3 require string        packId;
};
flags说明
含义长度说明
ACK1 bit是否为请求响应,0:请求,1:响应;
DUP1 bit是否重发,0:不重复,1:重复
COUNTER1 bit是否计数,0:不计,1:计数
OVERRIDE1 bit是否覆写,0:正常,1:覆写
REVOKE1 bit是否撤回,0:正常,1:撤回
HIGHPRJ1 bit高优先级,0:正常,1:高优先级
COMPRESS3 bits压缩算法,00:无压缩,01:zlib
CRYPTO3 bits加密算法,00:无加密,01:AES
RESERVED13-51 bits保留

//ACK|DUP|COUNTER|OVERRIDE|REVOKE|HIGHPRJ|COMPRESS|CRYPTO|RESERVED
struct PT_FLAGS_BITS{unsigned int ack:1;unsigned int dup:1;unsigned int counter:1;unsigned int overwrite:1;unsigned int revoke:1;unsigned int highPRJ:1;unsigned int compress:3;unsigned int crypto:3;unsigned int reserved:20;
};

报文类型

enum PACK_TYPE
{PT_NONE       = 0,      //00-09 保留PT_PING       = 10,     //心跳PT_LOGIN      = 11,     //登录认证PT_LOGOUT      = 12,    //登出PT_KICKOUT     = 13,    //踢出PT_MSG_SINGLE_CHAT  = 14,//单聊消息PT_MSG_GROUP_CHAT   = 15,//群聊消息PT_MSG_BIZ_NOTIFY   = 16,//业务通知消息PT_MSG_CTRL      = 17,  //消息控制指令(比如撤销,删除等)PT_MSG_READ      = 18,  //消息已读PT_HOTSESSION_SYNC     = 19, //热会话同步PT_HIGH_PRIOR_MSG_SYNC     = 20,  //高优先级消息同步PT_HISTORY_MSG_PULL        = 21, //拉历史消息PT_SESSION_MONITOR_START   = 22,//监控会话开始PT_SESSION_MONITOR_STOP    = 23,//监控会话结束PT_SESSION_MONITOR_SYNC = 24,   //监控会话同步(同步登陆用户的会话)PT_SYNC_DATA_CMD      = 25, //同步数据指令,根据该指令可以客户端可以进行各种增量数据同步(比如会话,好友记录,群聊等)PT_GROUPCHAT_SYNC      = 40,    //同步我的群(我创建,加入,监听的群里)PT_GROUPCHAT_CREATE    = 41,    //创建群聊PT_GROUPCHAT_JION      = 42,    //加入群聊PT_GROUPCHAT_QUIT      = 43,    //退出群聊PT_GROUPCHAT_DISMISS   = 44,    //解散群聊PT_GROUPCHAT_UPDATE_CREATOR  = 45, //换群主PT_GROUPCHAT_INFO_UPDATE     = 46, //更新群资料PT_GROUPCHAT_MEMBERS_GET     = 47,  //获取群成员PT_FRIEND_ADD      = 51,    //添加好友PT_FRIEND_DEL      = 52,    //删除好友PT_FRIEND_SYNC     = 53,    //同步好友PT_USERINFO_GET            = 54, //获取用户信息PT_USERINFO_UPDATE         = 55, //用户信息更新PT_USERATTRIBUTE_SET      = 56, //设置用户属性,比如昵称PT_USERATTRIBUTE_GET      = 57, //获取用户属性,比如昵称PT_SESSIONATTRIBUTE_SET   = 58, //设置会话属性,比如置顶,免打扰};

报文体Payload

根据不同type(报文类型),Payload内容不同;
根据不同的format,采用不同传输数据格式;
报文包含的内容信息及简单流程详见下文。

报文类型详细说明

PT_PING 心跳
  • 报文类型值:10
  • flags ACK位: 0
  • Payload:无
PT_LOGIN 登录请求
  • 报文类型:11
  • flags ACK位: 0
  • Payload:LoginReq
字段名称类型说明
clientIdstring用户名
usernamestring用户名
passwordstring密码
devicetypeDEVICE_TYPE设备类型:1:ios,2:android,3:windows PC,4:Mac OS
deviceNamestring设备名称
deviceIdstring设备id
versionstringapp版本号,如:“3.2.1”
enum DEVICE_TYPE
{DEVICE_NONE     = 0, DEVICE_IOS      = 1, DEVICE_ANDROID  = 2,DEVICE_MACOS    = 3, DEVICE_WINDOWS  = 4, DEVICE_LINUX    = 5,
};/* 登录请求 */
struct LoginReq
{0 require  string clientId  ;   //用户UserId1 require  string userName  ;   //登录名(手机号)2 optional string password   ;   //密码,token(如:a502c991-9ab9-4823-bde9-520d9169545b)3 optional DEVICE_TYPE    deviceType;   //设备类型:1:ios,2:android,3:windows PC,4:Mac OS 5:Linux4 optional string deviceName;   //设备名称5 optional string deviceId;      //设备唯一标识6 optional string version;          //客户端的版本号
};
PT_LOGIN 登录响应
  • 报文类型值:11
  • flags ACK位: 1
  • Payload:LoginResp
字段名称类型说明
codeint登录返回码
descstring错误原因
struct LoginResp
{0 require int code; //认证结果码值1 optional string clientId;                  2 optional string  extraData; 
};
PT_LOGOUT 登出
  • 报文类型:12
  • flags ACK位: 0
  • Payload:无
PT_LOGOUT 登出响应
  • 报文类型:12
  • flags ACK位: 1
  • Payload:无
PT_KICKOUT 踢出
  • 报文类型:13
  • flags ACK位: 0
  • Payload:KickOutReq
struct KickOutReq
{0 require  int    deviceType;   //准备要踢掉的 deviceType1 require  string    deviceId;   //准备要踢掉的 设备类型deviceId,
};
PT_KICKOUT 踢出响应
  • 报文类型:13
  • flags ACK位: 1
  • Payload:无
PT_MSG_SINGLE_CHAT 单聊消息
  • 报文类型:14
  • flags ACK位: 0
  • Payload:MsgReq
字段名称类型说明
seqidlong序列号,排序用,服务端产生
timestamplong时间戳
sessionidstring会话id,发送方根据约定规则填写,具体规则后文详述
fromstring发送者:用户id
tostring接收者:用户id
statusint消息状态,0:正常,1:撤回,2:删除
contentTypeint消息内容类型:1:文本, 2:语音,3:图片,5:位置,6:视频, 7:文件 8:富媒体
contentFormat(header里面定义格式)根据contentType,有不同字段,下文详细说明
struct MsgReq
{0 require string        sessionId;       //会话Id1 optional long         seqId       ;   //由服务器端填写,客户端用来排序.2 optional long         timestamp    ;   //消息时间,由服务器端来填写.用来在客户端显示3 require  string       from         ;   //消息发送者的名片Id或appid4 require  string       to           ;   //消息接收者的名片Id或者群组Id5 optional string       pushInfo     ;   //推送信息IOS-Push用,此字段无值表示不需要push6 optional int          contentType  ;  //content 类型,文本,语音,图片等等7 optional string       content      ;   //内容可为:pb/json/text8 optional int          status       ;   //消息状态 0:正常,1:删除,2:撤销
};
PT_MSG_SINGLE_CHAT 单聊消息响应
  • 报文类型:14
  • flags ACK位: 1
  • Payload:MsgAck
字段名称类型说明
codeint返回值
sessionIdstring会话Id
seqidlong序列号,排序用,服务端产生
timestamplong时间戳
struct MsgAck
{0 require int    code; 1 require string sessionId;2 require long   seqId;3 require long   timestamp; //消息类型};
PT_MSG_GROUP_CHAT 群聊消息
  • 报文类型:15
  • flags ACK位: 0
  • Payload:MsgReq(同单聊)
字段名称类型说明
seqidlong序列号,排序用,服务端产生
timestamplong时间戳
sessionidstring会话id,发送方根据约定规则填写,具体规则后文详述
fromstring发送者
tostring接收者:群地址
statusint消息状态,0:正常,1:撤回,2:删除
contentTypeint消息内容类型:1:文本, 2:语音,3:图片,5:位置,6:视频, 7:文件 8:富媒体
contentFormat(header里面定义格式)根据contentType,有不同字段,下文详细说明
PT_MSG_GROUP_CHAT 群聊消息响应
  • 报文类型:15
  • flags ACK位: 1
  • Payload:MsgAck(同单聊)
字段名称类型说明
seqidlong序列号,排序用,服务端产生
timestamplong时间戳
codeint返回值
PT_MSG_BIZ_NOTIFY 业务通知消息请求
  • 报文类型:16
  • flags ACK位: 0
  • Payload:MsgReq(同单聊)

注:此条指令仅仅通知客户端出发相应同步,不做数据传输。

PT_MSG_BIZ_NOTIFY 业务通知消息响应
  • 报文类型:16
  • flags ACK位: 1
  • Payload:MsgAck(同单聊)
PT_SYNC_DATA_CMD
字段名称类型说明
cmdlong同步业务指令
PT_MSG_CTRL 消息控制(比如撤销,删除等)
  • 报文类型:17
  • flags ACK位: 0
  • Payload:MsgControl
字段名称类型说明
commandint1.撤销,2.删除
sessionIdstring会话Id
packIdstring目标消息packId
struct MsgControl
{0 require int    command ;    //1.撤销,2.删除1 require string sessionId ;    //会话Id2 require string packId ;    //目标消息packId3 require long   seqId ;    //目标消息seqId
};
PT_MSG_CTRL 消息控制响应
  • 报文类型:17
  • flags ACK位: 1
  • Payload:CommonResp
字段名称类型说明
codeint错误码
descstring错误信息
struct CommonResp
{0 require int    code ;    //错误码1 require string desc ;    //错误信息
};
PT_MSG_READ 消息已读
  • 报文类型:18
  • flags ACK位: 0
  • Payload:MsgReaded
字段名称类型说明
sessionIdstring会话Id
seqIdlong起始seqId
struct MsgReaded
{0 require string sessionId ; //会话Id1 require long  seqId ;     //已读消息seqId
};
PT_MSG_READ 消息已读响应
  • 报文类型:18
  • flags ACK位: 1
  • Payload:CommonResp
PT_HOTSESSION_SYNC 热会话同步请求
  • 报文类型:19
  • flags ACK位: 0
  • Payload:HotSessionReq
字段名称类型说明
timestamplong时间戳
struct HotSessionReq
{0 require long    timestamp ;    //单位微秒,本地拉取会话时间戳或者断点时间戳
};
PT_HOTSESSION_SYNC热会话同步响应
  • 报文类型:19
  • flags ACK位: 1
  • Payload:HotSessionResp
字段名称类型说明
codeint返回码
timestamplong时间戳
sessionsVector热会话列表
  • HotSessionItem
字段名称类型说明
sessionIdstring会话id
readSeqIdlong已读seqId
unreadCountInt未读数
lastMsgsVector最新n条消息
struct HotSessionItem
{0 require string   sessionId;                 // 会话Id1 require  long    readSeqId;                //会话已读游标2 require  int     unreadCount = 0;            //某会话未读数,默认值03 optional  vector<OTIMPack>  lastMsgs;   //该会话最新一条可显示的msg,normal_top_msg至少存在一条4 optional string attribute;                 //会话属性集
};struct HotSessionResp
{0 require int          code = 0;      //返回码 类型1 require long         timestamp ;   2 require vector<HotSessionItem> sessions;  //所有会话的状态信息
};
PT_HIGH_PRIOR_MSG_SYNC 高优先级消息同步请求
  • 报文类型:20
  • flags ACK位: 0
  • Payload: MsgHighPrioritySyncReq
字段名称类型说明
seqIdlong当前最新seqId
countint获取数量
struct MsgHighPrioritySyncReq
{0 require long seqId;1 require int count = 200;//获取数量
};
PT_PRIOR_MSG_SYNC 高优先级消息同步响应
  • 报文类型:20
  • flags ACK位: 1
  • Payload:MsgGetHighPriorityResp
字段名称类型说明
codeint错误码
descstring错误描述
lastSeqIdlong最新seqId
msgsvector消息
struct MsgHighPrioritySyncResp
{0 require int  code;            //服务请求的结果码1 optional string desc;            //服务请求的结果描述2 require long lastSeqId;3 optional vector<OTIMPack> msgs;         //消息列表
};
PT_HISTORY_MSG_PULL 历史消息请求
  • 报文类型:21
  • flags ACK位: 0
  • Payload
字段名称类型说明
sessionIdstring会话id
seqIdlong起始seqid
countint消息数量
struct HistoryMsgPullReq
{0 optional string sessionId;1 require long seqId; //起始seqId2 require int count = 200;//获取数量
};
PT_HISTORY_MSG_PULL 历史消息响应
  • 报文类型:21
  • flags ACK位: 1
  • Payload:HistoryMsgPullResp
字段名称类型说明
errorCodeCommonErrorCode错误信息
sessionIdstring会话id
msgsvector消息内容
struct HistoryMsgPullResp
{0 require CommonErrorCode errorCode;1 require string sessionId; //起始sessionId2 require vector<OTIMPack> msgs;
};
PT_SESSION_MONITOR_START 监控会话开始请求
  • 报文类型:22
  • flags ACK位: 0
  • Payload:SessionMonitor
字段名称类型说明
sessionIdstring会话id
struct SessionMonitor
{0 require string sessionId;
};
PT_SESSION_MONITOR_START 监控会话开始响应
  • 报文类型:22
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_SESSION_MONITOR_STOP 监控会话开始请求
  • 报文类型:23
  • flags ACK位: 0
  • Payload:SessionMonitor
字段名称类型说明
sessionIdstring会话id
struct SessionMonitor
{0 require string sessionId;
};
PT_SESSION_MONITOR_STOP 监控会话开始响应
  • 报文类型:23
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_SESSION_MONITOR_SYNC 监听会话同步请求
  • 报文类型:24
  • flags ACK位: 0
  • Payload:无
PT_SESSION_MONITOR_SYNC 监听会话同步响应
  • 报文类型:24
  • flags ACK位: 1
  • Payload:HotSessionResp
PT_SYNC_DATA_CMD 同步数据指令
  • 报文类型:25
  • flags ACK位: 1
  • Payload:SyncDataReq
字段名称类型说明
commandint业务类型 1,好友列表,2,会话,3,群聊
contentstring业务数据
struct SyncDataReq
{0 require int command;1 require string content;
};
PT_SYNC_DATA_CMD 同步数据指令响应
  • 报文类型:25
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_GROUPCHAT_SYNC 群聊同步请求
  • 报文类型:40
  • flags ACK位: 0
  • Payload:SyncGroupChatReq
字段名称类型说明
timestamplong同步时间戳
struct GroupChatSyncReq
{0 require long timestamp;
};
PT_GROUPCHAT_SYNC 群聊同步响应
  • 报文类型:40
  • flags ACK位: 1
  • Payload:GroupChatSyncResp
字段名称类型说明
errorCodeCommonErrorCode错误信息
timestamplong同步时间戳
groupchatsvectorGroupChatInfo 群聊列表
struct GroupChatInfo
{0 require string groupId;               // 班级群groupid由classid和classcode组合生成1 require string name;                 // 群聊名字2 optional string avatar;               // 群聊头像3 require string creatorId;            // 群聊创建者,即群主userId4 optional string desc;                 // 群聊描述5 optional int memberLimit;             // 最大成员数6 optional long createTime;             // 创建时间7 optional long updateTime;            // 更新时间
};struct GroupChatSyncResp
{0 require CommonErrorCode errorCode;1 require long timestamp;2 require vector<GroupChatInfo> groupchats;3 require vector<string> delGroupChatIds;
};
PT_GROUPCHAT_CREATE 群聊创建请求
  • 报文类型:41
  • flags ACK位: 0
  • Payload:GroupChatCreateReq
struct GroupChatCreateReq
{0 require GroupChatInfo groupInfo;1 require vector<string> memberIds;
};
PT_GROUPCHAT_CREATE 群聊创建响应
  • 报文类型:41
  • flags ACK位: 1
  • Payload:GroupChatCreateResp
字段名称类型说明
errorCodeCommonErrorCode
groupIdstring
struct GroupChatCreateResp
{0 require CommonErrorCode errorCode;1 require string groupId;
};
PT_GROUPCHAT_JION 加入群聊请求
  • 报文类型:42
  • flags ACK位: 0
  • Payload:GroupChatJoinReq
字段名称类型说明
groupIdstring
memberIdsvectoruserId列表
struct GroupChatJoinReq
{0 require string groupId;1 require vector<string> memberIds;
};
PT_GROUPCHAT_JION 加入群聊响应
  • 报文类型:42
  • flags ACK位: 1
  • Payload:GroupChatJoinResp
字段名称类型说明
errorCodeCommonErrorCode
groupIdstring
struct GroupChatJoinResp
{0 require CommonErrorCode errorCode;1 require string groupId;
};
PT_GROUPCHAT_QUIT 退出群聊请求
  • 报文类型:43
  • flags ACK位: 0
  • Payload:GroupChatQuitReq
字段名称类型说明
groupIdstring
operatorIdstring操作者userId
memberIdsvector退出的userId列表
struct GroupChatQuitReq
{0 require string groupId;1 require string operatorId;2 require vector<string> memberIds;
};
PT_GROUPCHAT_QUIT 退出群聊响应
  • 报文类型:43
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_GROUPCHAT_DISMISS 解散群聊请求
  • 报文类型:44
  • flags ACK位: 0
  • Payload:GroupChatDismissReq
字段名称类型说明
groupIdstring
operatorIdstring操纵者userId
memberIdsvector退出的userId列表
struct GroupChatDismissReq
{0 require string groupId;1 require string operatorId;
};
PT_GROUPCHAT_DISMISS 解散群聊响应
  • 报文类型:44
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_GROUPCHAT_CREATOR_UPDATE 换群主请求
  • 报文类型:45
  • flags ACK位: 0
  • Payload:GroupChatCreatorUpdateReq
字段名称类型说明
groupIdstring
operatorIdstring操纵者userId
memberIdsvector退出的userId列表
struct GroupChatCreatorUpdateReq
{0 require string groupId;1 require string operatorId;2 require string newCreatorId;
};
PT_GROUPCHAT_CREATOR_UPDATE 换群主响应
  • 报文类型:45
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_GROUPCHAT_INFO_UPDATE 更新群资料请求
  • 报文类型:46
  • flags ACK位: 0
  • Payload:GroupChatInfoUpdateReq
字段名称类型说明
operatorIdstring操作者userId
groupInfoGroupChatInfo群信息
struct GroupChatInfoUpdateReq
{0 require string operatorId;1 require GroupChatInfo groupInfo;
};
PT_GROUPCHAT_INFO_UPDATE 更新群资料响应
  • 报文类型:46
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_GROUPCHAT_MEMBER_GET 获取群成员请求
  • 报文类型:47
  • flags ACK位: 0
  • Payload:GroupChatMemberGetReq
字段名称类型说明
groupIdstring群Id
struct GroupChatMemberGetReq
{0 require string groupId;
};
PT_GROUPCHAT_MEMBER_GET 获取群成员响应
  • 报文类型:47
  • flags ACK位: 1
  • Payload:GroupChatMemberGetResp
字段名称类型说明
errorCodeCommonErrorCode
groupIdstring群Id
memberIdsvector群成员userId列表
struct GroupChatMemberGetResp
{0 require CommonErrorCode errorCode;1 require string groupId;2 require vector<string> memberIds;
};
PT_FRIEND_ADD 添加好友请求
  • 报文类型:51
  • flags ACK位: 0
  • Payload:FriendAddReq
字段名称类型说明
friendsvector好友FriendInfo列表
struct FriendInfo
{0 require string userId;1 require string friendId;2 require string remark;//备注名
};struct FriendAddReq
{0 require vector<FriendInfo> friends;
};
PT_FRIEND_ADD 添加好友响应
  • 报文类型:51
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_FRIEND_DEL 删除好友请求
  • 报文类型:52
  • flags ACK位: 0
  • Payload:FriendDelReq
字段名称类型说明
friendsvector好友FriendInfo列表
struct FriendDelReq
{0 require vector<FriendInfo> friends;
};
PT_FRIEND_DEL 删除好友响应
  • 报文类型:52
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_FRIEND_SYNC 同步好友请求
  • 报文类型:53
  • flags ACK位: 0
  • Payload:FriendDelReq
字段名称类型说明
timestamplong增量时间戳
struct FriendSyncReq
{0 require long timestamp;
};
PT_FRIEND_SYNC 同步好友响应
  • 报文类型:53
  • flags ACK位: 1
  • Payload:FriendSyncResp
struct FriendSyncResp
{0 require CommonErrorCode errorCode;1 require vector<FriendInfo> friends;
};
PT_USERINFO_GET 获取用户资料请求
  • 报文类型:54
  • flags ACK位: 0
  • Payload:UserInfoGetReq
字段名称类型说明
userIdsvector用户id列表
struct UserInfoGetReq
{0 require vector<string> userIds;
};
PT_USERINFO_GET 获取用户资料响应
  • 报文类型:54
  • flags ACK位: 1
  • Payload:UserInfoGetResp
字段名称类型说明
errorCodeCommonErrorCode
userInfosvectorUserInfo 列表
struct UserInfoGetResp
{0 require CommonErrorCode errorCode;1 require vector<UserInfo> userInfos;
};struct UserInfo
{0 require string userId;1 require string name;2 require string avator;3 require string mobile;4 require long birthday;//timestamp
};
PT_USERINFO_UPDATE 更新用户资料请求
  • 报文类型:55
  • flags ACK位: 0
  • Payload:UserInfoUpdateReq
字段名称类型说明
userInfoUserInfo用户资料
struct UserInfoUpdateReq
{0 require UserInfo userInfo;
};
PT_USERINFO_UPDATE 更新用户资料响应
  • 报文类型:55
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_USERATTRIBUTE_SET 设置用户属性,比如昵称
  • 报文类型:56
  • flags ACK位: 0
  • Payload:UserAttrSetReq
字段名称类型说明
attributeUserAttribute属性UserAttribute
struct UserAttribute
{0 require string userId;1 require string friendId;2 require string attrName;3 require string attrValue;
};struct UserAttrSetReq
{0 require UserAttribute attribute;
};
PT_USERATTRIBUTE_SET 设置用户属性响应
  • 报文类型:56
  • flags ACK位: 1
  • Payload:CommonErrorCode
PT_USERATTRIBUTE_GET 获取用户属性请求
  • 报文类型:57
  • flags ACK位: 0
  • Payload:无
PT_USERATTRIBUTE_GET 获取用户属性响应
  • 报文类型:57
  • flags ACK位: 1
  • Payload:UserAttrGetResp
struct UserAttrGetResp
{0 require CommonErrorCode errorCode;1 require vector<UserAttribute> attributes;
};
PT_SESSIONATTRIBUTE_SET 设置会话属性,比如置顶,免打扰
  • 报文类型:58
  • flags ACK位: 0
  • Payload:SessionAttrSetReq
字段名称类型说明
userIdstring
sessionIdstring
attrNamestring属性名
attrValuestring属性值
struct SessionAttrSetReq
{0 require string userId;1 require string sessionId;2 require string attrName;3 require string attrValue;
};
PT_SESSIONATTRIBUTE_SET 更新会话属性响应
  • 报文类型:58
  • flags ACK位: 1
  • Payload:CommonErrorCode

http://www.ppmy.cn/news/685803.html

相关文章

GS5812B 封装SOT23-6 一款用于无线充电2A , 21V 600KHZ同步降压IC

推荐型号&#xff1a; SDB628 SD6271 GS7001-84 GS7002 SD66124AL SFT430C SB8223 SD8223LC SD8223LB SD8002D 8205DW01 LM4890S SD2020 SD2350 SD2803S SD3302(代替SD3301) SD3303 SD3320 SD3341A SD3362 SD4054 SD5054 SD5058A SD5088 SD5241A SD…

三星note8 php列表,三星note8充电器拆解报告

由于众所周知的 note7 BOOM 门&#xff0c;在过去一年多时间里三星高端机型只靠 S8 系列撑门面&#xff0c;apple 已经笑的合不拢嘴了。缺席一年后&#xff0c;三星 note8 终于王者归来&#xff0c;但本文的主角并不是 note8&#xff0c;而是 note8 充电器。 三星 note8 国际版…

Redis的基础命令

redis默认有16个数据库,第一个数据库是0,不设置会默认存储在0号数据库 存储值: set 变量名 变量值 获取值: get 变量名 查看所有的键: keys * 模糊查询: *多个,任意 ?一个 [] 指定 127.0.0.1:6379> set k1 helloworld O…

ArcPy学习心得系列(2)加权Voronoi图Arcpy实现(栅格)

1.定义 荷兰气候学家AHThiessen提出了一种根据离散分布的气象站的降雨量来计算平均降雨量的方法,即将所有相邻气象站连成三角形,作这些三角形各边的垂直平分线,于是每个气象站周围的若干垂直平分线便围成一个多边形。用这个多边形内所包含的一个唯一气象站的降雨强度来表示…

尚硅谷spring和spring boot笔记_手机标准内存达12G,比笔记本电脑还高!可为何系统总能占一半?...

阅读本文前&#xff0c;请您先点击上面的蓝字&#xff0c;再点击“关注”&#xff0c;这样您就可以免费收到最新内容了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。1111111111111111111111111111111111111111111111111111111111111111111111111111111111…

2022京东618交易额是多少 京东618历年销售额GMV对比

​​2022年618年中大促正在如火如荼的进行中中&#xff0c;除了关注买买买&#xff0c;大家关于大促的总买卖额也是十分关注的&#xff0c;那么2020年京东618买卖额是多少呢? 手机淘宝搜索&#xff1a;今天买买买&#xff0c;每天领红包&#xff0c;最高22888元&#xff01;持…

android充电器 充苹果,安卓充电器能给iPhone 12快充吗?实测小惊喜

安卓有它的好&#xff0c;iPhone有它的妙&#xff0c;成年人选择全都要&#xff0c;所以双持党的势力并不小。iPhone 12系列已经开卖&#xff0c;部分安卓党们也蠢蠢欲动。 但新iPhone不配充电器为人诟病&#xff0c;使人却步。其实一些安卓厂商手机的充电器也支持给iPhone充电…

折叠手机,是伪命题,还是真有未来?

本文概要&#xff1a;2018年10月&#xff0c;第一台折叠手机面世&#xff0c;来自柔宇科技。2021年9月&#xff0c;三星在国内发布两款新一代折叠手机。三年时间里&#xff0c;包括三星、小米、华为、微软、联想等众多科技企业入局&#xff0c;发布了超过20款折叠手机。但关于折…