Skip to main content

You are viewing Agora Docs forBetaproducts and features. Switch to Docs

Android
iOS
Web
Windows
Unity
Flutter
React Native

Manage chat room attributes

Chat room attributes consist of basic attributes (such as room subject, room description, and room announcement) and custom attributes. When basic attributes cannot satisfy the business requirements, users can add custom attributes that are synchronized with all chat room members. Custom attributes can be used to store information such as chat room type, game roles, game status, and host positions. They are stored as key-value maps, and the updates of custom attributes are synchronized with all chat room members.

This page shows how to use the Agora Chat SDK to manage basic and custom attributes of chat rooms in your app.

Understand the tech

The Agora Chat SDK provides the ChatManager and ChatRoom classes for chat room management, which allow you to implement the following features:

  • Retrieve or modify basic attributes of a chat room
  • Retrieve custom attributes of a chat room
  • Set custom attributes of a chat room
  • Remove custom attributes of a chat room

Prerequisites

Before proceeding, ensure that you meet the following requirements:

  • You have initialized the Chat SDK. For details, see SDK quickstart.
  • You understand the call frequency limit of the Chat APIs supported by different pricing plans as described in Limitations.
  • You understand the number of chat rooms supported by different pricing plans as described in Pricing Plan Details.

Implementation

This section introduces how to call the APIs provided by the Chat SDK to implement the features listed above.

Manage basic chat room attributes

Retrieve basic chat room attributes

All the chat room members can call fetchChatRoomFromServer to retrieve the detailed information of the current chat room, including the subject, announcement, description, member type, and admin list.


_2
// Fetches basic attributes including ID, name, description, maximum members, owners, roles, and whether all members are muted.
_2
ChatRoom chatRoom = ChatClient.getInstance().chatroomManager().fetchChatRoomFromServer(chatRoomId);

Change chat room name or description

Only the chat room owner and admin can set and update the chat room name and description.


_5
// Modifies the chat room name.
_5
ChatRoom chatRoom = ChatClient.getInstance().chatroomManager().changeChatRoomSubject(chatRoomId, newSubject);
_5
_5
// Modifies the chat room description.
_5
ChatRoom chatRoom = ChatClient.getInstance().chatroomManager().changeChatroomDescription(chatRoomId, newDescription);

Retrieve or change the chat room announcement

All the chat room members can retrieve the chat room announcement.

Only the chat room owner and admin can set and update the announcement. Once the announcement is updated, all the chat room members receive the onAnnouncementChanged callback.


_5
// Retrieves the chat room announcement.
_5
String announcement = ChatClient.getInstance().chatroomManager().fetchChatRoomAnnouncement(chatRoomId);
_5
_5
// Sets or updates the chat room announcement.
_5
ChatClient.getInstance().chatroomManager().updateChatRoomAnnouncement(chatRoomId, announcement);

Manage custom chat room attributes

Set a custom attribute

Chat room members can call asyncSetChatroomAttributes to set one single custom or update an existing attribute set by themselves. After you successfully call this method, other members in the chat room receive an onAttributesUpdate callback.


_7
// Sets a custom attribute by specifying chat room ID, attribute key, and attribute value.
_7
ChatClient.getInstance().chatroomManager().asyncSetChatroomAttribute(chatRoomId, attributeKey, attributeValue, false, new CallBack() {
_7
@Override
_7
public void onSuccess() {}
_7
@Override
_7
public void onError(int error, String errorMsg) {}
_7
});

If you want to update a custom attribute that is set by other members, call asyncSetChatroomAttributesForced instead. After you successfully call this method, other members in the chat room receive an onAttributesUpdate callback.


_7
// Sets a custom attribute by specifying chat room ID, attribute key, and attribute value.
_7
ChatClient.getInstance().chatroomManager().asyncSetChatroomAttributesForced(chatRoomId, attributeKey, attributeValue, false, new CallBack() {
_7
@Override
_7
public void onSuccess() {}
_7
@Override
_7
public void onError(int error, String errorMsg) {}
_7
});

Set multiple custom attributes

Chat room members can call the asyncSetChatroomAttributes method to add new custom attributes or update existing attributes set by themselves. After you successfully call this method, other members in the chat room receive an onAttributesUpdate callback.


_7
// Sets a custom attribute by specifying chat room ID, attribute key, and attribute value.
_7
ChatClient.getInstance().chatroomManager().asyncSetChatroomAttributesForced(chatRoomId, attributeKey, attributeValue, false, new CallBack() {
_7
@Override
_7
public void onSuccess() {}
_7
@Override
_7
public void onError(int error, String errorMsg) {}
_7
});

If you want to update custom attributes that set by other members, call asyncSetChatroomAttributesForced instead. After you successfully call this method, other members in the chat room receive an onAttributesUpdate callback.


_9
// Sets a custom attribute by specifying chat room ID and the key-value maps of the attributes.
_9
ChatClient.getInstance().chatroomManager().asyncSetChatroomAttributesForced(chatRoomId, map, false, new ResultCallBack < Map < String, Integer >> () {
_9
@Override
_9
public void onResult(int code, Map < String, Integer > failureMap) {
_9
// code == Error.EM_NO_ERROR indicates all the custom attributes are set successfully. In this case, failureMap is an empty map.
_9
// code != Error.EM_NO_ERROR indicates that the request fails. For error reasons please refer to the Error class.
_9
// In this case, failureMap contains the custom attributes that are not set successfully, and value represents the error code.
_9
}
_9
});

Retrieve specified or all custom attributes

All chat room members can call asyncFetchChatroomAttributesFromServer or asyncFetchChatRoomAllAttributesFromServer to retrieve specified or all custom attributes of the chat room.


_15
// Retrieves certain custom attributes by specifying chat room ID and attribute keys.
_15
ChatClient.getInstance().chatroomManager().asyncFetchChatroomAttributesFromServer(chatRoomId, keyList, new ValueCallBack < Map < String, String >> () {
_15
@Override
_15
public void onSuccess(Map < String, String > value) {}
_15
@Override
_15
public void onError(int error, String errorMsg) {}
_15
});
_15
_15
// Retrieves all custom attributes by specifying chat room ID.
_15
ChatClient.getInstance().chatroomManager().asyncFetchChatRoomAllAttributesFromServer(chatRoomId, new ValueCallBack < Map < String, String >> () {
_15
@Override
_15
public void onSuccess(Map < String, String > value) {}
_15
@Override
_15
public void onError(int error, String errorMsg) {}
_15
});

Remove a custom attribute

Chat room members can call asyncRemoveChatRoomAttributeFromServer to remove one single custom attribute that is set by themselves. After you successfully call this method, other members in the chat room receive an onAttributesRemoved callback.


_7
// Removes a custom attribute by specifying chat room ID and attribute key.
_7
ChatClient.getInstance().chatroomManager().asyncRemoveChatRoomAttributeFromServer(chatRoomId, attributeKey, new CallBack() {
_7
@Override
_7
public void onSuccess() {}
_7
@Override
_7
public void onError(int error, String errorMsg) {}
_7
});

If you want to update a custom attribute set by another member, call asyncRemoveChatRoomAttributeFromServerForced instead. After you successfully call this method, other members in the chat room receive an onAttributesRemoved callback.


_7
// Removes a custom attribute by specifying chat room ID and attribute key.
_7
ChatClient.getInstance().chatroomManager().asyncRemoveChatRoomAttributeFromServerForced(chatRoomId, attributeKey, new CallBack() {
_7
@Override
_7
public void onSuccess() {}
_7
@Override
_7
public void onError(int error, String errorMsg) {}
_7
});

Remove multiple custom attributes

To remove multiple custom attributes, chat room members can call the asyncRemoveChatRoomAttributesFromServer method with same name to remove multiple custom attributes that are set by themselves. After you successfully call this method, other members in the chat room receive an onAttributesRemoved callback.


_9
// Removes multiple custom attributes by specifying chat room ID and the attribute key list.
_9
ChatClient.getInstance().chatroomManager().asyncRemoveChatRoomAttributesFromServer(chatRoomId, keyList, new ResultCallBack < Map < String, Integer >> () {
_9
@Override
_9
public void onResult(int code, Map < String, Integer > failureMap) {
_9
// code == Error.EM_NO_ERROR indicates all the custom attributes are removed successfully. In this case, failureMap is an empty map.
_9
// code != Error.EM_NO_ERROR indicates that the request fails. For error reasons please refer to the Error class.
_9
// In this case, failureMap contains the custom attributes that are not removed successfully, and value represents the error code.
_9
}
_9
});

If you want to update custom attributes that set by other members, call asyncRemoveChatRoomAttributesFromServerForced instead. After you successfully call this method, other members in the chat room receive an onAttributesRemoved callback.


_9
// Removes multiple custom attributes by specifying chat room ID and the attribute key list.
_9
ChatClient.getInstance().chatroomManager().asyncRemoveChatRoomAttributesFromServerForced(chatRoomId, keyList, new ResultCallBack < Map < String, Integer >> () {
_9
@Override
_9
public void onResult(int code, Map < String, Integer > failureMap) {
_9
// code == Error.EM_NO_ERROR indicates all the custom attributes are removed successfully. In this case, failureMap is an empty map.
_9
// code != Error.EM_NO_ERROR indicates that the request fails. For error reasons please refer to the Error class.
_9
// In this case, failureMap contains the custom attributes that are not removed successfully, and value represents the error code.
_9
}
_9
});

vundefined