syntax = "proto3"; package pb; option go_package = "gim/pkg/pb/"; enum PackageType { PT_UNKNOWN = 0; // 未知 PT_SIGN_IN = 1; // 设备登录请求 PT_SYNC = 2; // 消息同步触发 PT_HEARTBEAT = 3; // 心跳 PT_MESSAGE = 4; // 消息投递 PT_SUBSCRIBE_ROOM = 5; // 订阅房间 } /************************************消息体定义开始************************************/ // 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 message Message { Sender sender = 1; // 发送者 ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group int64 receiver_id = 3; // 用户id或者群组id repeated int64 to_user_ids = 4; // 需要@的用户id列表 MessageType message_type = 5; // 消息类型 bytes message_content = 6; // 消息内容 int64 seq = 7; // 用户消息发送序列号 int64 send_time = 8; // 消息发送时间戳,精确到毫秒 MessageStatus status = 9; // 消息状态 } message Sender { SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 int64 sender_id = 2; // 发送者id int64 device_id = 3; // 发送者设备id string avatar_url = 4; // 昵称 string nickname = 5; // 头像 string extra = 6; // 扩展字段 } // 消息类型 enum MessageType { MT_UNKNOWN = 0; // 未知 MT_TEXT = 1; // 文本 MT_FACE = 2; // 表情 MT_VOICE = 3; // 语音消息 MT_IMAGE = 4; // 图片 MT_FILE = 5; // 文件 MT_LOCATION = 6; // 地理位置 MT_COMMAND = 7; // 指令推送 MT_CUSTOM = 8; // 自定义 } // 文本消息 message Text { string text = 1; // 文本消息内容 } // 表情消息 message Face { int64 face_id = 1; string face_url = 2; } // 语音消息 message Voice { string id = 1; // 语音包id int32 size = 2; // 语音包大小 int32 duration = 3; // 语音时长 string url = 4; // 语音文件URL } // 图片消息 message Image { string id = 1; // 图片id int32 width = 2; // 图片宽度 int32 height = 3; // 图片长度 string url = 4; // 图片URL string thumbnail_url = 5; // 图片缩略图url } // 文件消息 message File { int64 id = 12; // 文件id string name = 13; // 文件名 int64 size = 14; // 文件大小 string url = 15; // 文件url } // 地理位置消息 message Location { string desc = 1; // 描述 double latitude = 2; // 经度 double longitude = 3; // 纬度 } // Command 指令推送,1000以下,IM内部用,1000以上,留给业务用 message Command { int32 code = 1; // 指令码 bytes data = 2; // 数据内容 } // 自定义消息 message Custom { string data = 1; // 自定义数据 } /************************************消息体定义结束************************************/ // 上行数据 message Input { PackageType type = 1; // 包的类型 int64 request_id = 2; // 请求id bytes data = 3; // 数据 } // 下行数据 message Output { PackageType type = 1; // 包的类型 int64 request_id = 2; // 请求id int32 code = 3; // 错误码 string message = 4; // 错误信息 bytes data = 5; // 数据 } // 设备登录,package_type:1 message SignInInput { int64 device_id = 1; // 设备id int64 user_id = 2; // 用户id string token = 3; // 秘钥 } // 消息同步请求,package_type:2 message SyncInput { int64 seq = 1; // 客户端已经同步的序列号 } // 消息同步响应,package_type:2 message SyncOutput { repeated Message messages = 1; // 消息列表 bool has_more = 2; // 是否有更多数据 } // 订阅房间请求 message SubscribeRoomInput { int64 room_id = 1; // 房间ID,如果为0,取消房间订阅 int64 seq = 2; // 消息消息序列号, } enum ReceiverType { RT_UNKNOWN = 0; // 未知 RT_USER = 1; // 用户 RT_GROUP = 2; // 群组 RT_ROOM = 3; // 房间 } // 消息投递,package_type:4 message MessageSend { Message message = 1; // 消息 } enum SenderType { ST_UNKNOWN = 0; // 未知的 ST_SYSTEM = 1; // IM系统 ST_USER = 2; // 用户 ST_BUSINESS = 3; // 业务方 } enum MessageStatus { MS_UNKNOWN = 0; // 未知的 MS_NORMAL = 1; // 正常的 MS_RECALL = 2; // 撤回 } // 投递消息回执,package_type:4 message MessageACK { int64 device_ack = 2; // 设备收到消息的确认号 int64 receive_time = 3; // 消息接收时间戳,精确到毫秒 }