出自冬天不穿秋裤,天冷也要风度的程序猿之手,必属精品!
一、网络通讯协议
如上图,采用 datalength+databytes 的自定义长度的协议,其中:
datalength:紧跟其后的databytes的数据长度(不包含自身长度),占4字节
databytes:protobuf 3.0协议数据序列化后的数据内容,长度不限
二、网络应答模型
1、业务消息
服务端客户端间的消息大致分为以下四类:
1)通知类消息
通常由客户端发往服务器端,或者由服务器端发往客服客户端,接收方一般需要作出接收确认回复或不回复(默认成功异常时回复)。
2)客户端同步请求类消息
通常由手机客户端或客服客户端发出,服务端需要回复对应的响应消息。
3)服务器端指令类消息
通常是由服务器或者客服客户端发出的操作手机客户端的指令类消息,手机客户端收到后一般需要回复接收成功确认消息,并在后续执行完指令后回复发送结果通知消息。
客户端在与服务器建立连接后,需要先发送DeviceAuthReq请求获取accesstoken后才能正常进行后续通信,建立连接时的通信时序图如下:
2、心跳机制
已于服务器建立连接的客户端需要每隔1分钟发送一个心跳包,时序图如下:
三、Protobuf消息定义
所有业务消息都转化为protobuf消息进行序列化后传输,不同命令对应的消息使用protobuf的Any类型嵌套入根消息,接收方在收到根消息后根据命令码反序列化为相应类型消息。
消息结构定义基本约定:
1)使用proto3语法
2)package 命名空间统一采用 Jubo.JuLiao.IM.Wx.Proto
3)消息命名采用 Pascal命名法,例如 FirstName,LastName
4)时间字段统一用Unix-Timestamp形式
5)message类型名全部为对应MsgType+Message后缀,如MsgType=DeviceAuthReq的消息的消息结构名定义为 message DeviceAuthReqMessage{}
根消息(TransportMessage)
根消息代表最终直接序列化为网络字节流的消息,其中应包含基本的发送方信息(用于授权认证)和其包含的具体的业务命令消息及命令码标识。
所有的其他类型的消息都应该赋值到根消息的Content字段,并将MsgType字段设为对应值,之后将TransportMessage数据序列化做网络传输。接收方在收到消息后根据MsgType将Content内容反序列化成对应的强类型消息。
sdk功能模块请参考:http://www.yunlauncher.com/Blog/articles/119.html
1、基础消息类型
1、客户端发送的心跳包
HeartBeatReq = 1001;
2、消息接收确认回复(接收或拒绝接收)
MsgReceivedAck = 1002;
3、错误单独提升为一种消息类型
Error = 1003;
2、设备客户端授权类消息
1、设备(手机客户端、客服客户端)获取通信token请求
DeviceAuthReq = 1010;
2、设备(手机客户端、客服客户端)获取通信token响应
DeviceAuthRsp = 1011;
3、设备授权后退出(仅用于服务端内部)
DeviceExitNotice = 1012;
4、账号强制下线通知
AccountForceOfflineNotice = 1013;
3、手机客户端上传的通知类消息
1、手机客户端微信上线通知
WeChatOnlineNotice = 1020;
2、手机客户端微信下线通知
WeChatOfflineNotice = 1021;
3、微信个人号新增好友通知
FriendAddNotice = 1022;
4、微信个人号移除好友通知
FriendDelNotice = 1023;
5、微信好友发来聊天消息
FriendTalkNotice = 1024;
6、任务执行结果通知
TaskResultNotice = 1025;
7、手机上回复好友的聊天消息
WeChatTalkToFriendNotice = 1026;
8、有好友请求添加好友的通知
FriendAddReqeustNotice = 1027;
9、手机端向服务端通知聊天执行结果
TalkToFriendTaskResultNotice = 1028;
10、图片或视频消息的详细内容结果
RequestTalkDetailTaskResultNotice = 1029;
11、上传手机客户端上微信的二维码
PullWeChatQrCodeTaskResultNotice = 1030;
12、手机上发送了朋友圈通知
CircleNewPublishNotice = 1031;
13、手机上删除朋友圈通知
CircleDelNotice = 1032;
14、手机检测到有人点赞/取消点赞通知
CircleLikeNotice = 1033;
15、手机检测到有人评论/删除朋友圈通知
CircleCommentNotice = 1034;
16、消息标记为已读
PostMessageReadNotice = 1035;
17、联系人信息上传
ContactsInfoNotice = 1036;
18、群聊新增通知
ChatRoomAddNotice = 1037;
19、联系人标签新增,修改通知
ContactLabelAddNotice = 1038;
20、收钱任务执行结果通知
TakeMoneyTaskResultNotice = 1039;
21、朋友圈图片上传
CircleDetailNotice = 1040;
22、群聊删除通知
ChatRoomDelNotice = 1041;
23、群聊信息变更通知
ChatRoomChangedNotice = 1042;
24、群二维码
PullChatRoomQrCodeTaskResultNotice = 1043;
4、服务端、客服客户端发给设备的指令类消息
1、给好友发消息任务
TalkToFriendTask = 1070;
2、发送朋友圈任务
PostSNSNewsTask = 1071;
3、主动添加好友任务
AddFriendsTask = 1072;
4、发送朋友圈任务后数据回传
PostSNSNewsTaskResultNotice = 1073;
5、删除朋友圈
DeleteSNSNewsTask = 1074;
6、客户端或者服务端接受好友请求通知
AcceptFriendAddRequestTask = 1075;
7、群发消息任务
WeChatGroupSendTask = 1076;
8、执行养号动作命令
WeChatMaintenanceTask = 1077;
9、请求图片或视频消息的详细内容
RequestTalkDetailTask = 1078;
10、服务端主动要求手机上传当前登录的微信二维码
PullWeChatQrCodeTask = 1079;
11、触发手机推送好友列表任务
TriggerFriendPushTask = 1080;
12、触发手机推送朋友圈列表任务
TriggerCirclePushTask = 1081;
13、朋友圈评论删除任务
CircleCommentDeleteTask = 1082;
14、朋友圈评论删除任务反馈
CircleCommentDeleteTaskResultNotice = 1083;
15、朋友圈评论回复任务
CircleCommentReplyTask = 1084;
16、朋友圈评论回复反馈
CircleCommentReplyTaskResultNotice = 1085;
17、通知手机将某个聊天窗口置为已读
TriggerMessageReadTask = 1086;
18、消息撤回
RevokeMessageTask = 1087;
19、转发消息
ForwardMessageTask = 1088;
20、通知手机推送聊天记录
TriggerHistoryMsgPushTask = 1089;
21、获取群聊二维码
PullChatRoomQrCodeTask = 1090;
5、服务端通知执行的命令
1、服务端通知pc客户版本升级
UpgradeAppNotice = 1093;
2、通知手机客户端软件升级
UpgradeDeviceAppNotice = 1094;
3、清粉任务
PostFriendDetectTask = 1095;
4、终止清粉任务
PostStopFriendDetectTask = 1096;
5、删除设备通知
PostDeleteDeviceNotice = 1097;
6、朋友圈点赞任务
PostMomentsPraiseTask = 1098;
7、停止朋友圈点赞任务
PostStopMomentsPraiseTask = 1099;
8、养号任务停止
PostStopWeChatMaintenanceTask = 1100;
9、修改备注任务
ModifyFriendMemoTask = 1101;
10、领取红包或转账
TakeLuckyMoneyTask = 1200;
11、获取指定好友朋友圈
PullFriendCircleTask = 1201;
12、获取朋友圈图片
PullCircleDetailTask = 1202;
13、单条朋友圈点赞任务
CircleLikeTask = 1203;
14、触发手机推送群聊列表
TriggerChatroomPushTask = 1210;
15、请求具体群聊的详细信息
RequestChatRoomInfoTask = 1211;
16、获取联系人详细信息(不一定是好友,如群聊成员)
RequestContactsInfoTask = 1212;
17、群聊管理
ChatRoomActionTask = 1213;
18、群内加好友
AddFriendInChatRoomTask = 1214;
19、通讯录加好友
AddFriendFromPhonebookTask = 1215;
20、删除好友
DeleteFriendTask = 1216;
21、发红包
SendLuckyMoneyTask = 1217;
22、获取聊天消息的原始内容(主要是xml内容)
RequestTalkContentTask = 1218;
23、返回聊天消息的原始内容
RequestTalkContentTaskResultNotice = 1219;
24、转发消息内容
ForwardMessageByContentTask = 1220;
6、手机端主动发出的交互类消息
1、手机端推送好友列表
FriendPushNotice = 2026;
2、手机端推送当前安装版本
PostDeviceInfoNotice = 2027;
3、手机端回传检测清粉好友数
PostFriendDetectCountNotice = 2028;
4、手机回传朋友圈数据
CirclePushNotice = 2029;
5、手机回传朋友圈点赞数量
PostMomentsPraiseCountNotice = 2030;
9、手机端推送群聊列表
ChatroomPushNotice = 2031;
7、手机端推送标签列表
ContactLabelInfoNotice = 2032;
8、推送历史消息
HistoryMsgPushNotice = 2033;
9、群成员(陌生人)信息
ChatRoomMembersNotice = 2034;
sdk适用于微信营销软件研发、微信营销手机研发、微信手机群控云控系统研发、微信SCRM客服系统研发、微信营销工具研发、淘宝客机器人、导购返利机器人研发等,目前【聚客通】【有客来】等scrm都是基于这个sdk二次开发的。
以上均提供源码可自主二次开发。