Class MessageApi


  • public class MessageApi
    extends java.lang.Object
    消息API。
    • Constructor Summary

      Constructors 
      Constructor Description
      MessageApi​(Context context)  
    • Method Summary

      All Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      reactor.core.publisher.Flux<MissedMessageCount> countMissedMessages​(java.lang.String username)
      查询用户离线消息数。
      reactor.core.publisher.Mono<java.lang.Void> deleteChannel​(java.lang.String username, java.lang.String channelName, java.lang.String channelType, java.lang.Boolean deleteRoam)
      服务端单向删除会话。
      reactor.core.publisher.Mono<java.nio.file.Path> getHistoryAsLocalFile​(java.time.Instant instant, java.nio.file.Path dir, java.lang.String filename)
      下载消息历史文件到本地。
      reactor.core.publisher.Mono<java.lang.String> getHistoryAsUri​(java.time.Instant instant)
      获取消息历史文件的下载地址。
      reactor.core.publisher.Mono<java.lang.String> importChatGroupMessage​(java.lang.String from, java.lang.String to, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean isAckRead, java.lang.Long msgTimestamp, java.lang.Boolean needDownload)
      导入群聊消息 API使用示例:
      reactor.core.publisher.Mono<java.lang.String> importChatMessage​(java.lang.String from, java.lang.String to, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean isAckRead, java.lang.Long msgTimestamp, java.lang.Boolean needDownload)
      导入单聊消息 API使用示例:
      ImportMessage importMessage()
      构造消息并导入。
      reactor.core.publisher.Mono<java.lang.Boolean> isMessageDeliveredToUser​(java.lang.String messageId, java.lang.String toUser)
      查询某条离线消息的状态,如是否已经传达。
      reactor.core.publisher.Mono<java.lang.Void> recallMessage​(java.util.List<RecallMessageSource> messageSources)
      Deprecated.
      reactor.core.publisher.Mono<java.lang.Void> recallMsg​(RecallMessageSource recallMessage)
      消息撤回。
      SendMessage send()
      Deprecated.
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      Deprecated.
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice)
      Deprecated.
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType)
      Deprecated.
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice)
      Deprecated.
      MessageSend sendMsg()
      构造消息并发送。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      发送消息。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice)
      发送消息。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType)
      发送消息(只投递在线消息)。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice)
      发送消息。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice, ChatroomMsgLevel chatroomMsgLevel)
      发送消息,支持设置聊天室消息优先级。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.util.Set<java.lang.String> toGroups, EMMessage message, java.util.Set<java.lang.String> toGroupUsers, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice)
      指定群组用户发送消息,你可以向群组中指定的一个或多个成员发送消息,但单次仅支持指定一个群组。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.util.Set<java.lang.String> toRooms, EMMessage message, java.util.Set<java.lang.String> toRoomUsers, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice, ChatroomMsgLevel chatroomMsgLevel)
      指定聊天室用户发送消息,你可以向聊天室中指定的一个或多个成员发送消息,但单次仅支持指定一个聊天室。
      reactor.core.publisher.Mono<EMSentMessageIds> sendRoomBroadcastMsg​(java.lang.String from, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice, ChatroomMsgLevel chatroomMsgLevel)
      发送聊天室全局广播消息。
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      Deprecated.
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice)
      Deprecated.
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType)
      Deprecated.
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice)
      Deprecated.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • MessageApi

        public MessageApi​(Context context)
    • Method Detail

      • countMissedMessages

        public reactor.core.publisher.Flux<MissedMessageCount> countMissedMessages​(java.lang.String username)
        查询用户离线消息数。

        API使用示例:

         
         EMService service;
         try {
             List<MissedMessageCount> messages = service.message().countMissedMessages("username").collectList().block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        username - 用户名
        Returns:
        每个对话的离线消息数
        See Also:
        获取用户离线消息数
      • isMessageDeliveredToUser

        public reactor.core.publisher.Mono<java.lang.Boolean> isMessageDeliveredToUser​(java.lang.String messageId,
                                                                                       java.lang.String toUser)
        查询某条离线消息的状态,如是否已经传达。

        API使用示例:

         
         EMService service;
         try {
             Boolean isDelivered = service.message().isMessageDeliveredToUser("messageId", "toUser").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        messageId - 要查看对消息ID
        toUser - 消息接收方的用户名
        Returns:
        是否送达或错误
        See Also:
        获取某条离线消息状态
      • send

        @Deprecated
        public SendMessage send()
        Deprecated.
        构造消息并发送。将在后续版本中移除,请使用sendMsg方法。

        例如,向用户发送一条带有扩展字段的文本消息:

        
         EMService service;
         try {
             service.message().send()
                              .fromUser("alice").toUser("rabbit")
                              .text(msg -> msg.text("hello"))
                              .extension(exts -> exts.add(EMKeyValue.of("timeout", 1)))
                              .send()
                              .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         

        如果需要向一个群组或聊天室发消息,将示例中的 toUser 改成 toGroup 或 toRoom,并传入对应的群组或聊天室id

        如果需要向多个用户或群组或聊天室发消息,将示例中的 toUser 改成 toUsers 或 toGroups 或 toRooms,并传入对应的用户或群组或聊天室id

        将上述发送文本消息示例中的 `.text(...) `替换掉,来发送其他类型消息示例:

        发送图片消息:.image(msg -> msg.uri(URI.create("http://example/image.png")).secret("secret").displayName("image.png"))

        发送语音消息:.voice(msg -> msg.uri(URI.create("http://example/voice.amr")).duration(3).secret("secret").displayName("voice.amr"))

        发送视频消息:.video(msg -> msg.uri(URI.create("http://example/video.mp4")).duration(3).secret("secret").displayName("video.mp4").thumb("http://example/videoThumbnail").thumbSecret("thumbSecret"))

        发送文件消息:.file(msg -> msg.uri(URI.create("http://example/file.txt")).secret("secret").displayName("file.txt"))

        发送位置消息:.location(msg -> msg.latitude(1.234567).longitude(1.234567).address("some where"))

        发送自定义类型消息:.custom(msg -> msg.customEvent("liked").customExtension("name", "forest"))

        Returns:
        发送消息的构造器
        See Also:
        发送消息
      • sendMsg

        public MessageSend sendMsg()
        构造消息并发送。

        例如,向用户发送一条带有扩展字段的文本消息:

        
         EMService service;
         try {
             service.message().sendMsg()
                              .fromUser("alice").toUser("rabbit")
                              .text(msg -> msg.text("hello"))
                              .extension(exts -> exts.add(EMKeyValue.of("timeout", 1)))
                              .send()
                              .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         

        如果需要向一个群组或聊天室发消息,将示例中的 toUser 改成 toGroup 或 toRoom,并传入对应的群组或聊天室id

        如果需要向多个用户或群组或聊天室发消息,将示例中的 toUser 改成 toUsers 或 toGroups 或 toRooms,并传入对应的用户或群组或聊天室id

        将上述发送文本消息示例中的 `.text(...) `替换掉,来发送其他类型消息示例:

        发送图片消息:.image(msg -> msg.uri(URI.create("http://example/image.png")).secret("secret").displayName("image.png"))

        发送语音消息:.voice(msg -> msg.uri(URI.create("http://example/voice.amr")).duration(3).secret("secret").displayName("voice.amr"))

        发送视频消息:.video(msg -> msg.uri(URI.create("http://example/video.mp4")).duration(3).secret("secret").displayName("video.mp4").thumb("http://example/videoThumbnail").thumbSecret("thumbSecret"))

        发送文件消息:.file(msg -> msg.uri(URI.create("http://example/file.txt")).secret("secret").displayName("file.txt"))

        发送位置消息:.location(msg -> msg.latitude(1.234567).longitude(1.234567).address("some where"))

        发送自定义类型消息:.custom(msg -> msg.customEvent("liked").customExtension("name", "forest"))

        Returns:
        发送消息的构造器
        See Also:
        发送消息
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions)
        Deprecated.
        发送消息。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions)
        发送消息。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions)
        Deprecated.
        发送消息,不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendWithoutMsgId("fromUserName", "users", toUsers, textMessage, exts).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendWithoutMsgId("fromUserName", "chatgroups", toGroups, imageMessage, exts1).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions,
                                                                  java.lang.String routeType)
        Deprecated.
        发送消息(只投递在线消息)。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.String routeType)
        发送消息(只投递在线消息)。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.util.Set<java.lang.String> toGroups,
                                                                     EMMessage message,
                                                                     java.util.Set<java.lang.String> toGroupUsers,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.Boolean syncDevice)
        指定群组用户发送消息,你可以向群组中指定的一个或多个成员发送消息,但单次仅支持指定一个群组。 对于定向消息,只有作为接收方的指定成员才能看到消息,其他群成员则看不到该消息。

        API使用示例:

         
         EMService service;
        
         例如,向指定群组用户发送一条带有扩展字段的文本消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         Set<String> toGroupUsers = new HashSet<>();
         toGroupUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", toGroups, textMessage, toGroupUsers, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toGroups - 消息接收方所属的群组 ID。目前每次只能传 1 个群组 ID。
        message - 要发送的消息
        toGroupUsers - 接收消息的群成员的用户 ID 数组。每次最多可传 20 个用户 ID。
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        Returns:
        发消息响应或错误
        See Also:
        发送定向消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.util.Set<java.lang.String> toRooms,
                                                                     EMMessage message,
                                                                     java.util.Set<java.lang.String> toRoomUsers,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.Boolean syncDevice,
                                                                     ChatroomMsgLevel chatroomMsgLevel)
        指定聊天室用户发送消息,你可以向聊天室中指定的一个或多个成员发送消息,但单次仅支持指定一个聊天室。 对于定向消息,只有作为接收方的指定成员才能看到消息,其他聊天室成员则看不到该消息。

        API使用示例:

         
         EMService service;
        
         例如,向指定聊天室用户发送一条带有扩展字段的文本消息
         Set<String> toRooms = new HashSet<>();
         toRooms.add("toRoomId");
        
         Set<String> toRoomUsers = new HashSet<>();
         toRoomUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", toRooms, textMessage, toRoomUsers, exts, true, ChatroomMsgLevel.NORMAL).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toRooms - 消息接收方所属的聊天室 ID。目前每次只能传 1 个聊天室 ID。
        message - 要发送的消息
        toRoomUsers - 接收消息的聊天室成员的用户 ID 数组。每次最多可传 20 个用户 ID。
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        chatroomMsgLevel - 聊天室消息优先级: LOW-低优先级,NORMAL-普通优先级,HIGH-高优先级
        Returns:
        发消息响应或错误
        See Also:
        发送定向消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions,
                                                                                  java.lang.String routeType)
        Deprecated.
        发送消息(只投递在线消息),不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageResults messageResults = service.message().send("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageResults messageResults = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions,
                                                                  java.lang.Boolean syncDevice)
        Deprecated.
        发送消息。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.Boolean syncDevice)
        发送消息。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions,
                                                                                  java.lang.Boolean syncDevice)
        Deprecated.
        发送消息,不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "chatgroups", toGroups, imageMessage, exts1, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions,
                                                                  java.lang.String routeType,
                                                                  java.lang.Boolean syncDevice)
        Deprecated.
        发送消息。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.String routeType,
                                                                     java.lang.Boolean syncDevice)
        发送消息。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.String routeType,
                                                                     java.lang.Boolean syncDevice,
                                                                     ChatroomMsgLevel chatroomMsgLevel)
        发送消息,支持设置聊天室消息优先级。

        API使用示例:

         
         EMService service;
        
         例如,向聊天室发送一条带有扩展字段的图片消息
         Set<String> toChatRooms = new HashSet<>();
         toChatRooms.add("toChatroomId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
         exts.add(EMKeyValue.of("key1", 10));
         exts.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatrooms", toChatRooms, imageMessage, exts, "ROUTE_ONLINE", true, ChatroomMsgLevel.NORMAL).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        chatroomMsgLevel - 聊天室消息优先级: LOW-低优先级,NORMAL-普通优先级,HIGH-高优先级
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • sendRoomBroadcastMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendRoomBroadcastMsg​(java.lang.String from,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions,
                                                                                  java.lang.Boolean syncDevice,
                                                                                  ChatroomMsgLevel chatroomMsgLevel)
        发送聊天室全局广播消息。 可通过该接口向 app 下的所有活跃聊天室(聊天室至少存在一个成员,而且曾经至少发送过一条消息)发送广播消息,支持所有消息类型。 发送频率:每分钟最多可发 10 次,而且每天最多可发 100 次广播消息。

        API使用示例:

         
         EMService service;
        
         例如,发送一条带有扩展字段的文本消息
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendRoomBroadcastMsg("fromUserName", textMessage, exts, true, ChatroomMsgLevel.NORMAL).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        chatroomMsgLevel - 聊天室消息优先级: LOW-低优先级,NORMAL-普通优先级,HIGH-高优先级
        Returns:
        发消息响应或错误
        See Also:
        发送聊天室全局广播消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions,
                                                                                  java.lang.String routeType,
                                                                                  java.lang.Boolean syncDevice)
        Deprecated.
        发送消息,不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        Returns:
        发消息响应或错误
        See Also:
        发送消息
      • getHistoryAsUri

        public reactor.core.publisher.Mono<java.lang.String> getHistoryAsUri​(java.time.Instant instant)
        获取消息历史文件的下载地址。

        历史文件是每小时一个文件,比如指定12:10,则返回12点的历史文件。

        API使用示例:

         
         EMService service;
         try {
             Instant now = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
             String historyUrl = service.message().getHistoryAsUri(now).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        instant - 时间点
        Returns:
        下载地址或错误
        See Also:
        获取历史消息文件
      • getHistoryAsLocalFile

        public reactor.core.publisher.Mono<java.nio.file.Path> getHistoryAsLocalFile​(java.time.Instant instant,
                                                                                     java.nio.file.Path dir,
                                                                                     java.lang.String filename)
        下载消息历史文件到本地。

        消息历史文件是gz压缩的。

        API使用示例:

         
         EMService service;
         Instant now = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
         Path dir = Paths.get("/local/path/...");
         try {
             Path path = service.message().getHistoryAsLocalFile(now, dir, "filename.gz").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        instant - 时间点
        dir - 下载目录
        filename - 文件名,如果为空,则默认为YYYYMMDD.gz
        Returns:
        下载文件的路径或错误
        See Also:
        获取历史消息文件
      • recallMessage

        @Deprecated
        public reactor.core.publisher.Mono<java.lang.Void> recallMessage​(java.util.List<RecallMessageSource> messageSources)
        Deprecated.
        消息撤回。将在后续版本中移除,请使用recallMsg方法。

        API使用示例:

         
         EMService service;
         try {
             List<RecallMessageSource> messageSources = new ArrayList<>();
             messageSources.add(new RecallMessageSource("messageId", "chat", "u1", "u2", true));
             service.message().recallMessage(messageSources).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        messageSources - messageSources
        Returns:
        消息撤回响应或错误
        See Also:
        发送消息
      • recallMsg

        public reactor.core.publisher.Mono<java.lang.Void> recallMsg​(RecallMessageSource recallMessage)
        消息撤回。

        API使用示例:

         
         EMService service;
         try {
             RecallMessageSource recallMessage = new RecallMessageSource("messageId", "chat", "u1", "u2", true);
             service.message().recallMessage(recallMessage).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        recallMessage - recallMessage
        Returns:
        消息撤回响应或错误
        See Also:
        发送消息
      • deleteChannel

        public reactor.core.publisher.Mono<java.lang.Void> deleteChannel​(java.lang.String username,
                                                                         java.lang.String channelName,
                                                                         java.lang.String channelType,
                                                                         java.lang.Boolean deleteRoam)
        服务端单向删除会话。

        API使用示例:

         
         EMService service;
         try {
             service.message().deleteChannel("u1", "u2", "chat", false).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        username - username 删除会话方,例如 A 要将与 B 的单聊会话删除,username 为 A,channelName 为 B
        channelName - channelName 要删除的会话 ID
        channelType - channelType 会话类型。chat:单聊会话;groupchat:群聊会话
        deleteRoam - deleteRoam 是否删除服务端消息,不允许为空。true:是;false:否
        Returns:
        消息撤回响应或错误
        See Also:
        服务端单向删除会话
      • importMessage

        public ImportMessage importMessage()
        构造消息并导入。

        例如,导入一条带有扩展字段的单聊文本消息:

        
         EMService service;
         try {
             service.message().importMessage()
                              .from("alice")
                              .toUser("rabbit")
                              .text(msg -> msg.text("hello"))
                              .extension(exts -> exts.add(EMKeyValue.of("timeout", 1)))
                              .isAckRead(true)
                              .msgTimestamp(Instant.now().toEpochMilli())
                              .needDownload(true)
                              .importChatMessage()
                              .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         

        如果需要向一个群组导入消息,将示例中的 toUser 改成 toGroup,并传入对应的群组或聊天室id

        将上述发送文本消息示例中的 `.text(...) `替换掉,来发送其他类型消息示例:

        导入图片消息:.image(msg -> msg.uri(URI.create("http://example/image.png")).secret("secret").displayName("image.png"))

        导入语音消息:.voice(msg -> msg.uri(URI.create("http://example/voice.amr")).duration(3).secret("secret").displayName("voice.amr"))

        导入视频消息:.video(msg -> msg.uri(URI.create("http://example/video.mp4")).duration(3).secret("secret").displayName("video.mp4").thumb("http://example/videoThumbnail").thumbSecret("thumbSecret"))

        导入文件消息:.file(msg -> msg.uri(URI.create("http://example/file.txt")).secret("secret").displayName("file.txt"))

        导入位置消息:.location(msg -> msg.latitude(1.234567).longitude(1.234567).address("some where"))

        导入自定义类型消息:.custom(msg -> msg.customEvent("liked").customExtension("name", "forest"))

        Returns:
        导入消息的构造器
      • importChatMessage

        public reactor.core.publisher.Mono<java.lang.String> importChatMessage​(java.lang.String from,
                                                                               java.lang.String to,
                                                                               EMMessage message,
                                                                               java.util.Set<EMKeyValue> extensions,
                                                                               java.lang.Boolean isAckRead,
                                                                               java.lang.Long msgTimestamp,
                                                                               java.lang.Boolean needDownload)
        导入单聊消息 API使用示例:
         
        
         例如,导入带扩展字段的文本消息
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             Instant time = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
             Long msgTimestamp = time.toEpochMilli();
             String messageId = service.message()
                                       .importChatMessage("fromUserName", "toUserName",
                                          textMessage, exts, true, msgTimestamp, false)
                                       .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        Parameters:
        from - 发送者用户名
        to - 目标用户名
        message - 要导入的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要导入的扩展内容,可以为空
        isAckRead - 是否设置消息为已读
        msgTimestamp - 导入的消息的时间戳
        needDownload - 是否需要下载附件资源
        Returns:
        导入成功后消息的id
      • importChatGroupMessage

        public reactor.core.publisher.Mono<java.lang.String> importChatGroupMessage​(java.lang.String from,
                                                                                    java.lang.String to,
                                                                                    EMMessage message,
                                                                                    java.util.Set<EMKeyValue> extensions,
                                                                                    java.lang.Boolean isAckRead,
                                                                                    java.lang.Long msgTimestamp,
                                                                                    java.lang.Boolean needDownload)
        导入群聊消息 API使用示例:
         
        
         例如,导入带扩展字段的文本消息
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             Instant time = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
             Long msgTimestamp = time.toEpochMilli();
             String groupId = "18273849454"
             String messageId = service.message()
                                       .importChatGroupMessage("fromUserName", groupId,
                                          textMessage, exts, true, msgTimestamp, false)
                                       .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        Parameters:
        from - 发送者用户名
        to - 目标群id
        message - 要导入的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要导入的扩展内容,可以为空
        isAckRead - 是否设置消息为已读
        msgTimestamp - 导入的消息的时间戳
        needDownload - 是否需要下载附件资源
        Returns:
        导入成功后消息的id