Community Management
Feature Description
A community is a large group of people brought together by common topics, and multiple topics can be created under the same community based on different interests. A community is used to manage members. All its topics are shared among members, who can send and receive messages independently.
Community Group Management
Creating a community group
API
chat.createGroup(options);
Sample
// Create a topic-enabled communitylet promise = chat.createGroup({type: TencentCloudChat.TYPES.GRP_COMMUNITY,name: 'WebSDK',isSupportTopic: true,});promise.then(function(imResponse) { // Created successfullyconsole.log(imResponse.data.group); // Profile of the created group}).catch(function(imError){console.warn('createGroup error:', imError); // Error information});
Getting the list of topic-enabled communities
Caution
This API is supported only by topic-enabled communities. You need to Purchase Premium Version, log in to the Chat Console and enable the community switch. The switch path is: Applications > Your App > Chat > Configuration > Group Configuration > Community. Once the switch is enabled, you can use it.
API
chat.getJoinedCommunityList();
Return values
Promise
Sample
// Get the list of topic-enabled communitieslet promise = chat.getJoinedCommunityList();promise.then(function(imResponse) { // Got successfullyconsole.log(imResponse.data.groupList); // List of topic-enabled communities}).catch(function(imError) { // Getting failedconsole.warn('getJoinedCommunityList error:', imError); // Failure message});
Creating a topic
Caution
1. This API is supported only by topic-enabled communities. You need to purchase the [Premium Version] in the Console > Feature Configuration> Group Configuration> Group Feature Configuration> Community page. After enabling the community, you must enable the topic switch to use it.
2. Before using this API, you must call createGroup to create a topic-enabled community.
API
chat.createTopicInCommunity(options);
Parameters
The
options
parameter is of the Object
type. It contains the following attribute values:Name | Type | Description |
groupID | String | Community ID of the topic |
topicName | String | Topic name |
topicID | String | A custom topic ID must be in the format of "community ID + custom topic ID", such as "@TGS#_xxx@TOPIC#_xxx". |
avatar | String | Topic profile photo |
notification | String | Topic notice |
introduction | String | Topic introduction |
customData | String | Custom topic information |
Return values
Promise
Sample
// Create a topiclet promise = chat.createTopicInCommunity({groupID: 'group1',topicName: 'test',avatar: 'xxx'notification: 'xxx',introduction: 'xxx',customData: 'xxxx',});promise.then(function(imResponse) { // Created successfullyconsole.log(imResponse.data.topicID); // Topic ID}).catch(function(imError) { // Creation failedconsole.warn('createTopicInCommunity error:', imError); // Failed to create the topic});
Deleting a topic
Caution
This interface is only applicable to communities that support topics.
API
chat.deleteTopicFromCommunity(options);
Parameters
The
options
parameter is of the Object
type. It contains the following attribute values:Name | Type | Description |
groupID | String | Community ID of the topic |
topicIDList | Array | undefined | List of topic IDs. If it is not passed in, all the topics are deleted. |
Return values
Promise
Sample
// Delete a specified topic under a communitylet promise = chat.deleteTopicFromCommunity({groupID: 'group1',topicIDList: ['topicID']});promise.then(function(imResponse) { // Deleted successfullyconst { successTopicList, failureTopicList } = imResponse.data;// List of topics deleted successfullysuccessTopicList.forEach((item) => {const { topicID } = item;});// List of topics failed to be deletedfailureTopicList.forEach((item) => {const { topicID, code, message } = item;})}).catch(function(imError) { // Deletion failedconsole.warn('deleteTopicFromCommunity error:', imError); // Failed to delete the topic});
// Delete all the topics under a communitylet promise = chat.deleteTopicFromCommunity({groupID: 'group1',});promise.then(function(imResponse) { // Deleted successfullyconst { successTopicList, failureTopicList } = imResponse.data;// List of topics deleted successfullysuccessTopicList.forEach((item) => {const { topicID } = item;});// List of topics failed to be deletedfailureTopicList.forEach((item) => {const { topicID, code, message } = item;})}).catch(function(imError) { // Deletion failedconsole.warn('deleteTopicFromCommunity error:', imError); // Failed to delete the topic});
Modifying the topic profile
Caution
1. This interface is only applicable to communities that support topics.
2. Other members within the topic can receive the TencentCloudChat.EVENT.TOPIC_UPDATED event.
API
chat.updateTopicProfile(options);
Parameters
The
options
parameter is of the Object
type. It contains the following attribute values:Name | Type | Description |
groupID | String | Community ID of the topic |
topicID | String | Topic ID, which is required |
topicName | String | undefined | Topic name |
avatar | String | undefined | Topic profile photo |
notification | String | undefined | Topic notice |
introduction | String | undefined | Topic introduction |
customData | String | undefined | Custom topic information |
muteAllMembers | Boolean | undefined | Muting all. Valid values: true : mute all;false : unmute all. |
Return values
Promise
Sample
// Update the topic profilelet promise = chat.updateTopicProfile({groupID: 'group1',topicID: 'topic1',topicName: 'test',avatar: 'xxx'notification: 'xxx',introduction: 'xxx',customData: 'xxxx',muteAllMembers: true});promise.then(function(imResponse) { // Topic profile set successfullyconsole.log(imResponse.data.topic); // Modified topic profile}).catch(function(imError) { // Failed to set the topic profile// Information on the failure in setting the topic profileconsole.warn('updateTopicProfile error:', imError);});
Getting the topic list
Caution
This interface is only applicable to communities that support topics.
API
chat.getTopicList(options);
Parameters
The
options
parameter is of the Object
type. It contains the following attribute values:Name | Type | Description |
groupID | String | Community ID of the topic |
topicIDList | Array | undefined | List of topic IDs. If it is not passed in, all the topics are obtained. |
Return values
Promise
Sample
// Get a specified topiclet promise = chat.getTopicList({groupID: 'group1',topicIDList: ['topicID'],});promise.then(function(imResponse) { // Got successfullyconst { successTopicList, failureTopicList } = imResponse.data;// List of topics got successfullysuccessTopicList.forEach((item) => {const { topicID } = item;});// List of topics failed to be gotfailureTopicList.forEach((item) => {const { topicID, code, message } = item;})}).catch(function(imError) { // Getting failedconsole.warn('getTopicList error:', imError); // Information on the failure in getting the topic list});
// Get all the topicslet promise = chat.getTopicList({groupID: 'group1',});promise.then(function(imResponse) { // Got successfullyconst { successTopicList, failureTopicList } = imResponse.data;// List of topics got successfullysuccessTopicList.forEach((item) => {const { topicID } = item;});// List of topics failed to be gotfailureTopicList.forEach((item) => {const { topicID, code, message } = item;})}).catch(function(imError) { // Getting failedconsole.warn('getTopicList error:', imError); // Information on the failure in getting the topic list});
Topic group
The community-group-topic hierarchy is implemented as follows:
The
groupCustomField
field in the community profile defines a field to store the topic group list of the community. The customData field in the topic profile stores the group to which each topic belongs.When a community is loaded, the
groupCustomField
field for the topic group list in the community (group) profile is used to display the group list.When the topic list of a community is loaded, the
customData
field in the topic profile is used to get the group name for assignment.Note
1. You can customize the
key
value of the groupCustomField
field for the topic group list of the community (group).
The following sample code names it topic_category
.Configuring the group list for the community
You only need to modify the
groupCustomField
field in the group profile. The key
value is the name of the field for the topic group list you defined.Sample
// Topic group listconst categoryList = ['Group 1', 'Group 2'];// Update the topic group list of the communitylet promise = chat.updateGroupProfile({groupID: 'group1',// You need to configure the custom group field `topic_category` in the console first.groupCustomField: [{ key: 'topic_category', value: JSON.stringify(categoryList) }]});promise.then(function(imResponse) {console.log(imResponse.data.group) // Detailed group profile after modification}).catch(function(imError){console.warn('updateGroupProfile error:', imError); // Error information});
Getting the list of groups in the community
Sample
let promise = chat.getGroupProfile({groupID: 'group1',groupCustomFieldFilter: ['topic_category']});promise.then(function(imResponse) {console.log(imResponse.data.group);const categoryList = []; // Topic group listconst { groupCustomField } = imResponse.data.group;groupCustomField.forEach((item) => {if (item.key === 'topic_category') {// Parse the group listcategoryList = JSON.parse(item.value);}});}).catch(function(imError){console.warn('getGroupProfile error:', imError); // Error information});
Adding a topic to a group
You can save the topic group with the
customData
field of the topic.Sample
// Define a group for the topicconst customData = { category: 'Group 1' };// Update the topic grouplet promise = chat.updateTopicProfile({groupID: 'group1', // Community IDtopicID: 'topic1', // Topic IDcustomData: JSON.stringify(customData),});promise.then(function(imResponse) { // Topic group updated successfullyconsole.log(imResponse.data.topic); // Modified topic profile}).catch(function(imError) { // Failed to update the topic groupconsole.warn('updateTopicProfile error:', imError);});
Getting the topic group
Listening for topic callbacks
Sample
let onTopicCreated = function(event) {const groupID = event.data.groupID // ID of the community to which the topic belongsconst topicID = event.data.topicID // Topic IDconsole.log(event.data);};chat.on(TencentCloudChat.EVENT.TOPIC_CREATED, onTopicCreated);
let onTopicDeleted = function(event) {const groupID = event.data.groupID // ID of the community to which the topic belongsconst topicIDList = event.data.topicIDList // List of deleted topic IDsconsole.log(event.data);};chat.on(TencentCloudChat.EVENT.TOPIC_DELETED, onTopicDeleted);
let onTopicUpdated = function(event) {const groupID = event.data.groupID // ID of the community to which the topic belongsconst topic = event.data.topic // Topic profileconsole.log(event.data);};chat.on(TencentCloudChat.EVENT.TOPIC_UPDATED, onTopicUpdated);