消息扩展(本文已不再维护)

更新时间: 2023/07/21 06:55:28

本文已不再维护,请前往会话消息回复(Thread)圈组快捷评论查看相关文档。


9.1.0 版本开始提供圈组消息相关扩展功能,包括 会话消息回复消息快捷评论等。所有功能包含在 QChatMessageService 接口中。

圈组的会话消息回复消息快捷评论属于增值功能,需先在云信控制台开通后才能使用。

会话消息回复

回复消息

方法

可以通过以下方法对频道中某条消息进行回复:

/**
 * 回复消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回发送成功的消息
 */
InvocationFuture<QChatSendMessageResult> replyMessage(@NonNull QChatReplyMessageParam param);
  • QChatReplyMessageParam 中必须传入待发送消息参数和被回复的消息体,支持重发。

示例代码

    QChatSendMessageParam param = new QChatSendMessageParam(1607312,1492446, MsgTypeEnum.text);
    param.setBody("回复消息测试");

    QChatMessage replyMessage = getMessage();

    NIMClient.getService(QChatMessageService.class).replyMessage(new QChatReplyMessageParam(param,replyMessage)).setCallback(
            new RequestCallback<QChatSendMessageResult>() {
            @Override
            public void onSuccess(QChatSendMessageResult result) {
                //回复消息成功,返回发送成功的消息具体信息
                QChatMessage message = result.getSentMessage();
            }

            @Override
            public void onFailed(int code) {
                //回复消息失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //回复消息异常
            }
        });

根据消息id查询历史消息

方法

可以通过传入 QChatMessageRefer 列表查询对应的消息详情列表:

/**
 * 根据消息id查询历史消息
 * @param param
 * @return InvocationFuture 可设置回调函ke数,监听操作结果。回调返回查询到的历史消息
 */
InvocationFuture<QChatGetMessageHistoryResult> getMessageHistoryByIds(@NonNull QChatGetMessageHistoryByIdsParam param);
  • QChatGetMessageHistoryByIdsParam中需要传入需要查询的ServerId、ChannelId和QChatMessageRefer列表。
  • QChatGetMessageHistoryResult中返回查询到的消息列表

示例代码

List<QChatMessageRefer> messageReferList = getMessageRefersList();
QChatGetMessageHistoryByIdsParam param = new QChatGetMessageHistoryByIdsParam(1607312,1492446,messageReferList);
NIMClient.getService(QChatMessageService.class).getMessageHistoryByIds(param).setCallback(
        new RequestCallback<QChatGetMessageHistoryResult>() {
            @Override
            public void onSuccess(QChatGetMessageHistoryResult param) {
                //查询成功,返回查询到的消息列表
                List<QChatMessage> messages = param.getMessages();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

根据消息查询被引用的消息详情

方法

可以通过以下方法查询 Thread 消息中某个消息的回复消息或根消息:

/**
 * 根据消息查询被引用的消息详情
 * @param param
 * @return
 */
InvocationFuture<QChatGetReferMessagesResult> getReferMessages(@NonNull QChatGetReferMessagesParam param);  
  • QChatGetReferMessagesParam传入要查询的消息不能是根消息,否则会返回414错误。
  • QChatGetReferMessagesParam中需要传入的消息引用类型QChatMessageReferType三种选择
    • REPLAY:只查询被回复的消息
    • THREAD:只查询根消息
    • ALL:同时查询被回复的消息和根消息
  • QChatGetReferMessagesResult中返回查询被回复的消息和根消息
    • 如果QChatMessageReferType为REPLAY或ALL才返回被回复消息,否则getReplyMessage()返回为null
    • 如果QChatMessageReferType为THREAD或ALL才返回根消息,否则getThreadMessage()返回为null

示例代码

QChatMessage message = getQueryMessage();
QChatMessageReferType referType = QChatMessageReferType.REPLAY;

NIMClient.getService(QChatMessageService.class).getReferMessages(new QChatGetReferMessagesParam(message,referType)).setCallback(
        new RequestCallback<QChatGetReferMessagesResult>() {
            @Override
            public void onSuccess(QChatGetReferMessagesResult result) {
                //查询成功
                //如果QChatMessageReferType为REPLAY或ALL才有,否则为null
                QChatMessage replyMessage = result.getReplyMessage();
                //如果QChatMessageReferType为THREAD或ALL才有,否则为null
                QChatMessage threadMessage = result.getThreadMessage();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

查询thread聊天的历史

方法

可以通过以下方法查询Thread聊天的历史消息

/**
 * 查询thread聊天的历史
 * @param param
 * @return
 */
InvocationFuture<QChatGetThreadMessagesResult> getThreadMessages(@NonNull QChatGetThreadMessagesParam param);

其中QChatGetThreadMessagesParam需要传入待查询的消息QChatMessage和消息查询选项QChatMessageQueryOption; QChatGetThreadMessagesResult会返回根消息QChatMessage、thread聊天信息QChatMessageThreadInfo和查询到的thread历史消息,其中QChatMessageThreadInfo中返回thread聊天的总回复数和thread聊天中的最后一条消息时间戳

  • QChatGetThreadMessagesParam需要传入待查询的消息QChatMessage可以是Thread聊天中的任意一条消息

QChatMessageQueryOption的参数说明如下:

类型 参数 说明
Long fromTime 起始时间
Long toTime 结束时间
Long excludeMessageId excludeMsgId,排除消息id
Integer limit limit,条数限制,默认
Boolean reverse reverse,是否反向

查询范围由 fromTime、toTime 和 limit 共同决定,以先到为准。

同时可以设置排除查询的消息id,用于排除查询时起始时间锚点的消息。

  • 如果 fromTime 上有多条消息,可以通过excludeMessageId来指定实际的起始时间为 excludeMsgId 对应的消息的下一条消息时间。
  • 如果fromTime到 toTime 之间消息大于 limit 条,返回 limit 条记录;如果小于 limit 条,返回实际条数;当已经查询到头时,返回的结果列表的 size 可能会比 limit 小。

toTime 如果设置为0则为当前时间。

默认返回逆序列表,可以通过 setReverse 设置是否反向。

如果17:00:00(fromTime )到18:00:00(toTime)的消息总共有200条,查询时最多返回100条。

  • 如果isReverse() ==false(即默认方式),则返回后100条,时间逆序排列,时间从新到旧。
  • 如果isReverse() ==true(反向方式),则前100条,时间正序排列,时间从旧到新。

当进行首次查询时,如果要查最新的100条,则fromTime=0, toTime=0, limit=0。

示例代码

QChatMessage message = getQueryMessage();
QChatMessageQueryOption messageQueryOption = new QChatMessageQueryOption();
//查询最新的100条Thread聊天消息
NIMClient.getService(QChatMessageService.class).getThreadMessages(new QChatGetThreadMessagesParam(message,messageQueryOption)).setCallback(
        new RequestCallback<QChatGetThreadMessagesResult>() {
            @Override
            public void onSuccess(QChatGetThreadMessagesResult result) {
                //查询成功
                //根消息
                QChatMessage threadMessage = result.getThreadMessage();
                //Thread聊天信息,包含Thread聊天的总回复数和Thread聊天中最后一条消息的时间戳
                QChatMessageThreadInfo threadInfo = result.getThreadInfo();
                //Thread聊天中的回复消息列表(不包含根消息)
                List<QChatMessage> messages = result.getMessages();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

批量查询thread聊天信息

方法

可以通过以下方法批量查询某个频道下的多个thread聊天信息:

/**
 * 批量查询thread聊天信息
 * @param param
 * @return
 */
InvocationFuture<QChatGetMessageThreadInfosResult> getMessageThreadInfos(@NonNull QChatGetMessageThreadInfosParam param);

其中QChatGetMessageThreadInfosParam中需要传入需要查询的ServerId、ChannelId和根消息列表 QChatGetMessageThreadInfosResult返回消息Thread聊天信息Map,key为传入根消息的uuid,value为QChatMessageThreadInfo

示例代码

List<QChatMessage> msgList = getThreadMsgList();
NIMClient.getService(QChatMessageService.class).getMessageThreadInfos(new QChatGetMessageThreadInfosParam(1607312,1492446,msgList)).setCallback(
        new RequestCallback<QChatGetMessageThreadInfosResult>() {
            @Override
            public void onSuccess(QChatGetMessageThreadInfosResult result) {
                //查询成功,返回Thread聊天信息Map,key为传入根消息的uuid,value为QChatMessageThreadInfo
                Map<String, QChatMessageThreadInfo> messageThreadInfoMap = result.getMessageThreadInfoMap();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

快捷评论

9.1.0版本开始可以对消息进行添加、删除快捷评论

添加快捷评论

方法

可以通过以下方法对频道中某条消息进行快捷评论:

/**
 * 添加一条快捷评论
 * @param param
 * @return
 */
InvocationFuture<Void> addQuickComment(@NonNull QChatAddQuickCommentParam param);

其中QChatAddQuickCommentParam需要传入待评论的消息QChatMessage和评论类型(int类型)

添加快捷评论成功后,频道内成员会收到一条系统通知(QChatSystemNotificationType.UPDATE_QUICK_COMMENT)。

示例代码

QChatMessage message = getMessage();
int type = 1;
NIMClient.getService(QChatMessageService.class).addQuickComment(new QChatAddQuickCommentParam(message,type)).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                //添加成功
            }

            @Override
            public void onFailed(int code) {
                //添加失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //添加异常
            }
        });

删除快捷评论

方法

可以通过以下方法删除对某条消息的快捷评论:

/**
 * 删除一条快捷评论
 * @param param
 * @return
 */
InvocationFuture<Void> removeQuickComment(@NonNull QChatRemoveQuickCommentParam param);

其中QChatRemoveQuickCommentParam需要传入待评论的消息QChatMessage和评论类型(int类型)

删除快捷评论成功后,频道内成员会收到一条系统通知(QChatSystemNotificationType.UPDATE_QUICK_COMMENT)。

示例代码

QChatMessage message = getMessage();
int type = 1;
NIMClient.getService(QChatMessageService.class).removeQuickComment(new QChatRemoveQuickCommentParam(message,type)).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                //删除成功
            }

            @Override
            public void onFailed(int code) {
                //删除失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //删除异常
            }
        });

批量查询快捷评论

方法

可以通过以下方法批量查询某个频道下的多个消息的快捷评论:

/**
 * 批量查询快捷评论
 * @param param
 * @return
 */
InvocationFuture<QChatGetQuickCommentsResult> getQuickComments(@NonNull QChatGetQuickCommentsParam param);

其中QChatGetQuickCommentsParam中需要传入需要查询的ServerId、ChannelId和消息列表 QChatGetQuickCommentsResult返回消息快捷评论详情Map,key为消息的MsgIdServer,value为QChatMessageQuickCommentDetail

其中QChatMessageQuickCommentDetail的参数说明如下:

返回值 参数 说明
Long getServerId() 获取服务器Id
Long getChannelId() 获取channelId
Long getMsgIdServer() 获取消息服务端Id
int getTotalCount() 获取总评论数
long getLastUpdateTime() 获取消息评论最后一次操作的时间
List getDetails() 获取评论详情列表

其中QChatQuickCommentDetail的参数说明如下:

返回值 参数 说明
int getType() 获取评论类型
int getCount() 获取评论数量
boolean hasSelf() 自己是否添加了该类型评论
List getSeveralAccids() 获取若干个添加了此类型评论的accid列表,不是按照操作时间排序的,可以认为是随机取了N个

示例代码

QChatMessage message = getMessage();
int type = 1;
NIMClient.getService(QChatMessageService.class).addQuickComment(new QChatAddQuickCommentParam(message,type)).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                //添加成功
            }

            @Override
            public void onFailed(int code) {
                //添加失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //添加异常
            }
        });
此文档是否对你有帮助?
有帮助
去反馈
  • 会话消息回复
  • 回复消息
  • 方法
  • 示例代码
  • 根据消息id查询历史消息
  • 方法
  • 示例代码
  • 根据消息查询被引用的消息详情
  • 方法
  • 示例代码
  • 查询thread聊天的历史
  • 方法
  • 示例代码
  • 批量查询thread聊天信息
  • 方法
  • 示例代码
  • 快捷评论
  • 添加快捷评论
  • 方法
  • 示例代码
  • 删除快捷评论
  • 方法
  • 示例代码
  • 批量查询快捷评论
  • 方法
  • 示例代码