github.com/872409/go-netease-im@v1.0.2-0.20201109080841-fdb3e13691c5/history.go (about) 1 package netease 2 3 import ( 4 "encoding/json" 5 "errors" 6 "strconv" 7 8 jsoniter "github.com/json-iterator/go" 9 ) 10 11 const ( 12 queryMessagePoint = neteaseBaseURL + "/history/querySessionMsg.action" 13 ) 14 15 // HistoryMessage . 16 type HistoryMessage struct { 17 From string `json:"from"` 18 ID int64 `json:"msgid"` 19 Time int64 `json:"sendtime"` 20 Type int `json:"type"` 21 Body interface{} `json:"body"` 22 } 23 24 // QueryMessage 查询存储在网易云通信服务器中的单人聊天历史消息,只能查询在保存时间范围内的消息 25 /* 26 *1.跟据时间段查询点对点消息,每次最多返回100条; 27 *2.不提供分页支持,第三方需要跟据时间段来查询。 28 * @param fromID 发送者accid 29 * @param toID 接收者accid 30 * @param beginTime 开始时间,ms 31 * @param endTime 截止时间,ms 32 * @param limit 本次查询的消息条数上限(最多100条),小于等于0,或者大于100,会提示参数错误 33 * @param reverse 1按时间正序排列,2按时间降序排列。其它返回参数414错误.默认是按降序排列 34 * @param tp 查询指定的多个消息类型,类型之间用","分割,不设置该参数则查询全部类型消息格式 示例: 0,1,2,3 类型支持: 1:图片,2:语音,3:视频,4:地理位置,5:通知,6:文件,10:提示,11:Robot,100:自定义 35 */ 36 func (c *ImClient) QueryMessage(fromID, toID, beginTime, endTime string, limit, reverse int, tp string) ([]HistoryMessage, error) { 37 param := map[string]string{"from": fromID} 38 39 param["to"] = toID 40 param["begintime"] = beginTime 41 param["endtime"] = endTime 42 param["limit"] = strconv.Itoa(limit) 43 44 if reverse != 0 { 45 param["reverse"] = strconv.Itoa(reverse) 46 } 47 48 if len(tp) > 0 { 49 param["type"] = tp 50 } 51 52 client := c.client.R() 53 c.setCommonHead(client) 54 client.SetFormData(param) 55 56 resp, err := client.Post(queryMessagePoint) 57 58 var jsonRes map[string]*json.RawMessage 59 err = jsoniter.Unmarshal(resp.Body(), &jsonRes) 60 if err != nil { 61 return nil, err 62 } 63 64 var code int 65 err = json.Unmarshal(*jsonRes["code"], &code) 66 if err != nil { 67 return nil, err 68 } 69 70 if code != 200 { 71 return nil, errors.New(string(resp.Body())) 72 } 73 74 var msgs []HistoryMessage 75 err = jsoniter.Unmarshal(*jsonRes["msgs"], &msgs) 76 if err != nil { 77 return nil, err 78 } 79 80 return msgs, nil 81 }