查询频道聊天记录
更新时间:2024-12-11 15:24:57
接口描述
1、通过频道号,查询一段时间内的聊天记录
2、接口支持https协议
接口URL
http://api.polyv.net/live/v3/channel/chat/get-history-page
请求方式
GET
接口约束
1、接口同时支持HTTP 、HTTPS ,建议使用HTTPS 确保接口安全,接口调用有频率限制,详细请查看
2、时间格式为yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss。如未提交具体时间,只提交了日期,开始时间默认为日期当天的 00:00:00,结束时间为日期当天的23:59:59
请求参数描述
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| appId | true | String | 账号appId【详见获取密钥】 |
| timestamp | true | Long | 当前13位毫秒级时间戳,3分钟内有效 |
| sign | true | String | 签名,为32位大写的MD5值,生成签名的appSecret密钥作为通信数据安全的关键信息,严禁保存在客户端直接使用,所有API都必须通过客户自己服务器中转调用POLYV服务器获取响应数据【详见签名生成规则】 |
| startDay | true | String | 聊天记录的开始时间 格式为yyyy-MM-dd,例如:2021-03-01 或者格式为yyyy-MM-dd HH:mm:ss,例如:2021-03-01 16:30:12 |
| endDay | true | String | 聊天记录的结束时间,要求同上 |
| channelId | true | String | 频道号 |
| page | false | Integer | 获取第几页聊天记录,默认为1 |
| pageSize | false | Integer | 每页记录数,默认为1000,最大为1000,大于1000将不会返回contents数据 |
| userType | false | String | 用户类型,可以选择多个类型,用英文逗号隔开 slice:云课堂学员 teacher:讲师 guest:嘉宾 manager:管理员 assistant:助教 viewer:特邀观众 monitor:场监 attendee:研讨会参与者 student:普通直播观众 |
| status | false | String | 聊天记录审核状态,默认pass:已审核 pass:已审核 censor:审核中和删除 |
| source | false | String | 类型,不填默认公聊 extend:管理员私聊 |
| roomId | false | String | 如果有房间号,需要传入房间号,默认不传 |
| hasTotal | false | String | 是否返回当前查询总数,Y:是,N:否,默认为N 注:此参数可能会影响接口响应性能,若非强烈需求,建议不要传此参数,可以根据返回结果中的 contents 数组长度来判断是否还有下一页 |
示例
http://api.polyv.net/live/v3/channel/chat/get-history-page?startDay=2020-03-10&appId=frlr1z1zn3&endDay=2021-03-10&sign=FD60256504E55BC4986B1BF9D207A997&pageSize=20&page=1&userType=&source=&channelId=1965681&roomId=×tamp=1635478961187&status=
响应参数描述
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 响应状态码,200为成功返回,非200为失败【详见全局错误说明】 |
| status | String | 响应状态文本信息 |
| message | String | 响应描述信息,当code为400或者500的时候,辅助描述错误原因 |
| data | Array | 聊天信息数组 【详见data字段说明】 |
data字段说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| pageSize | Integer | 每页数据大小 |
| pageNumber | Integer | 当前的页数 |
| totalItems | Integer | 总的条数, 仅当hasTotal为Y时有值,否则一直为0。 |
| totalPages | Integer | 总页数,约束同上 |
| contents | Object | 查询的结果列表【详见Contents参数描述】 |
contents字段说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | String | 聊天消息id |
| accountId | String | 账号id |
| clientIP | String | 用户ip(为了数据安全性,该数据将不再返回) |
| content | String | 聊天内容,当消息为图片类型时,content为json字符串,下面说明 |
| event | String | 事件,具体参考聊天室SDK |
| image | String | 图片消息的图片地址 |
| msgType | String | 消息类型 redpaper:红包消息 chatImg:图片消息 custom:自定义消息(通过socket发送的自定义消息) reward:打赏消息 customerMessage:自定义消息(通过http接口发送的自定义消息) 为空:普通聊天消息 |
| quote | String | 引用 |
| sessionId | String | 场次号 |
| roomId | String | 房间号 |
| channelId | String | 频道号 |
| time | Long | 发送消息时的时间戳 |
| userType | String | 用户类型 slice:云课堂学员 teacher:讲师 guest:嘉宾 manager:管理员 assistant:助教 viewer:特邀观众 monitor:场监 attendee:研讨会参与者 student:普通直播观众 |
| status | String | 审核状态 pass:已审核 censor:审核中 delete:删除 |
| sourceType | String | 消息来源 public:群聊 extend:管理员私聊 |
| user | Object | 聊天信息数组 【详见user字段说明】 |
content为json格式时说明
根据msgType区分消息类型
当msgType为redpaper时,表示红包:
| 参数名 | 类型 | 说明 |
|---|---|---|
| content | String | 红包名称 |
| msgSource | String | 消息类型 |
| number | Number | 红包数量 |
| redCacheId | String | 缓存的红包id |
| redpackId | String | 红包id |
| totalAmount | String | 红包总金额 |
| type | String | 红包类型,normal为普通红包,rain为红包雨,password口令红包,official_normal开播端-普通红包 |
当msgType为reward时,表示打赏:
| 参数名 | 类型 | 说明 |
|---|---|---|
| userId | String | 用户ID |
| goodNum | Number | 打赏礼物数量 |
| unick | String | 用户昵称 |
| gimg | String | 礼物图片地址 |
| rewardContent | String | 打赏内容 |
| uimg | String | 用户头像 |
| rewardUser | Object | 打赏者 【详见rewardUser字段说明】 |
当msgType为chatImg时,表示图片:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | String | 图片id |
| msgSource | String | 消息类型 |
| status | String | 图片上传状态,upLoadingSuccess表示上传成功 |
| uploadImgUrl | String | 图片上传成功后的地址,多个地址用逗号隔开 |
| size | Object | 图片尺寸,width表示图片宽度,height表示图片高度 |
当msgType为custom时,表示自定义消息:
| 参数名 | 类型 | 说明 |
|---|---|---|
| msgSource | String | 消息类型 |
| EVENT | String | 自定义消息事件类型 |
| version | String | 自定义消息版本 |
| emitMode | Number | 自定义消息广播方式 |
| tip | Number | 自定义消息提示 |
| data | Object | 自定义消息体 |
user字段说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| actor | String | 角色 |
| banned | Boolean | 是否禁言 |
| channelId | String | 频道号 |
| clientIp | String | 用户ip |
| nickname | String | 观众昵称 |
| pic | String | 观众头像 |
| roomId | String | 房间号 |
| sessionId | String | 场次号 |
| uid | String | socketId |
| userId | String | 用户唯一标示 |
| userSource | String | 观众来源 |
| userType | String | 用户类型 slice:云课堂学员 teacher:讲师 guest:嘉宾 manager:管理员 assistant:助教 viewer:特邀观众 monitor:场监 attendee:研讨会参与者 student:普通直播观众 |
| param4 | String | 用户自定义字段 |
| param5 | String | 用户自定义字段 |
rewardUser字段说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| deviceType | String | 设备类型 |
| nick | String | 观众昵称 |
| uid | String | socketId |
| clientIp | String | 用户ip |
| banned | Boolean | 是否禁言 |
| pic | String | 用户头像 |
| userType | String | 用户类型 slice:云课堂学员 teacher:讲师 guest:嘉宾 manager:管理员 assistant:助教 viewer:特邀观众 monitor:场监 attendee:研讨会参与者 student:普通直播观众 |
| customize | Number | 是否为定制礼物 0:否 1:是 |
| userId | String | 用户id |
| channelId | String | 频道号 |
| roomId | String | 房间号 |
| scene | String | 场景 alone:活动直播 ppt:三分屏 topclass:大班课 |
Java请求示例
快速接入基础代码请下载相关依赖源码, 点击下载源代码 ,下载后加入到自己的源码工程中即可。测试用例中的HttpUtil.java 和 LiveSignUtil.java 都包含在下载文件中。
强烈建议您使用直播Java SDK完成API的功能对接,直播Java SDK 对API调用逻辑、异常处理、数据签名、HTTP请求线程池进行了统一封装和优化。
private static final Logger log = LoggerFactory.getLogger(ChatMessageTest.class);
/**
* 查询频道聊天记录
* @throws IOException
*/
@Test
public void testGetMessageList() throws IOException, NoSuchAlgorithmException {
//公共参数,填写自己的实际参数
String appId = super.appId;
String appSecret = super.appSecret;
String timestamp = String.valueOf(System.currentTimeMillis());
//业务参数
String url = "http://api.polyv.net/live/v3/channel/chat/get-history-page";
String startDay = "2020-03-10";
String endDay = "2021-03-10";
String channelId = "1965681";
Integer page = 1;
Integer pageSize = 20;
String userType = "";
String status = "";
String source = "";
String roomId = "";
//http 调用逻辑
Map<String,String> requestMap = new HashMap<>();
requestMap.put("appId", appId);
requestMap.put("timestamp",timestamp);
requestMap.put("startDay",startDay);
requestMap.put("endDay",endDay);
requestMap.put("channelId",channelId);
requestMap.put("page",page.toString());
requestMap.put("pageSize",pageSize.toString());
requestMap.put("userType",userType);
requestMap.put("status",status);
requestMap.put("source",source);
requestMap.put("roomId",roomId);
requestMap.put("sign", LiveSignUtil.getSign(requestMap, appSecret));
String response = HttpUtil.get(url, requestMap);
log.info("测试查询频道聊天记录接口返回值:{}",response);
}
响应示例
系统全局错误说明详见全局错误说明
成功示例
{
"code": 200,
"status": "success",
"message": "",
"data": {
"pageNumber": 1,
"pageSize": 20,
"totalPages": 0,
"totalItems": 0,
"contents": [
{
"id": "874e2850-12bc-11eb-963f-578bb7bc5db5",
"accountId": "",
"clientIP": "",
"content": "hello 大家好",
"event": null,
"image": "",
"msgType": null,
"quote": null,
"sessionId": "fs9v9y4nxf",
"roomId": "1965681",
"channelId": 1965681,
"time": 1603188649810,
"userType": "",
"status": "",
"sourceType": "public",
"user": {
"actor": null,
"banned": false,
"channelId": 1965681,
"clientIp": "",
"nickname": "thomas",
"pic": "http://s1.videocc.net/default-img/avatar/teacher.png",
"roomId": "1965681",
"sessionId": null,
"uid": "",
"userId": "1965681_reboot_0",
"userSource": null,
"userType": ""
}
}
]
}
}
异常示例
{
"code": 400,
"status": "error",
"message": "invalid signature.",
"data": ""
}
