Chat SDKs JavaScript v3
Chat SDKs JavaScript
Chat SDKs
JavaScript
Version 3
Sendbird Chat SDK v3 for JavaScript is no longer supported as a new version is released. Check out our latest Chat SDK v4

User & channel metadata

Copy link

With metadata and metacounter which consist of key-value items, you can store additional information to users and channels. This page explains how to manage user metadata, channel metadata, and channel metacounter.

The key's length must be no longer than 128 characters. For user metadata and channel metadata, the value must be a String and its length must be no longer than 190 characters. For channel metacounter, the value must be an Integer. For user metadata, it can only have up to five key-value items.

Note: By default, the Allow retrieving user list and Allow updating user metadata options are turned on which means that any user can retrieve a list of users and their metadata as well as alter other users' nicknames and their metadata within your application. This may grant access to unwanted data or operations, leading to potential security concerns. To manage your access control settings, you can turn on or off each option in Settings > Application > Security > Access control list on Sendbird Dashboard.


User metadata

Copy link

You can store additional information to users such as phone number, email or a long description of a user with user metadata, which can be fetched or rendered into the UI. A user metadata is a Dictionary and it can be stored into a User object.

Create

Copy link

To store a user metadata into a User object, create a Dictionary of key-value items, and then pass it as an argument to a parameter when calling the createMetaData() method. You can put multiple key-value items in the dictionary.

var data = {
    'key1': 'value1',
    'key2': 'value2'
};

var user = sb.currentUser;
user.createMetaData(data, function(metadata, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Update

Copy link

The procedure of updating a user metadata is similar to creating a user metadata. Values of existing keys will be updated and values of new keys will be added if the upsert parameter is set to true.

var data = {
    'key1': 'valueToUpdate1',
    'key2': 'valueToUpdate2'
};

var user = sb.currentUser;
user.updateMetaData(data, function(metadata, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Retrieve

Copy link

You can retrieve user metadata by reading the metadata property of a User object.

var user = sb.currentUser;
var value1 = user.metaData['key1'];

Delete

Copy link

You can delete a user metadata as below.

var user = sb.currentUser;
user.deleteMetaData('key1', function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Channel metadata

Copy link

You can store additional information to channels such as background color or a long description of a channel with channel metadata, which can be fetched or rendered into the UI. A channel metadata is a Dictionary and it can be stored into a Channel object.

Create channel metadata

Copy link

To store a channel metadata into a Channel object, create a Dictionary of key-value items that the key and value are String, and then pass it as an argument to a parameter when calling the createMetaData() method. You can put multiple key-value items in the dictionary.

var data = {
    'key1': 'value1',
    'key2': 'value2'
};

channel.createMetaData(data, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Update channel metadata

Copy link

The procedure to update a channel metadata is the same as creating a channel metadata. Values of existing keys will be updated and values of new keys will be added.

var data = {
    'key1': 'valueToUpdate1',   // Update an existing item with a new value.
    'key2': 'valueToUpdate2',   // Update an existing item with a new value.
    'key3': 'valueToAdd3'       // Add a new key-value item.
};

var upsertIfNotExist = true;    // If false, the item with `key3` isn't added to the metadata.

channel.updateMetaData(data, upsertIfNotExist, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Retrieve channel metadata

Copy link

You can retrieve channel metadata by creating a Collection of keys to retrieve and passing it as an argument to a parameter in the getMetaData() method. A Dictionary will return through the callback function with corresponding key-value items.

var keys = [
    'key1',
    'key2'
];

channel.getMetaData(keys, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Retrieve cached channel metadata

Copy link

When Sendbird Chat SDK detects any of the create, read, update, and delete operations on the channel metadata, the SDK caches the metadata. The cached metadata is also updated whenever a channel list is fetched.

You can retrieve the cached metadata through the getCachedMetaData() method without having to query the server.

// A returned metadata object consists of key-value pairs in string.
var cachedMetaData = channel.getCachedMetaData();
var metaData = {};
Object.keys(cachedMetaData).forEach(key => {
  metaData[key] = cachedMetaData[key];
});

Delete channel metadata

Copy link

You can delete a channel metadata as below.

channel.deleteMetaData('key1', function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Channel metacounter

Copy link

You can store additional information to channels such as the tracking number of likes with channel metacounter, which can be fetched or rendered into the UI. A channel metacounter is a Dictionary and it can be stored into a Channel object.

Note : A channel metacounter is primarily used to track and update discrete indicators in a channel. Use channel metacounter instead of channel metadata when you need an integer with atomic increasing and decreasing operations.

Create

Copy link

To store a metacounter into a channel, create a Dictionary of key-value items that the key is String and the value is Integer, and then pass it as an argument to a parameter when calling the createMetaCounters() method. You can store multiple key-value items in the dictionary.

var counters = {
    'key1': 1,
    'key2': 2'
};

channel.createMetaCounters(counters, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Update

Copy link

The procedure to update a channel metacounter is the same as creating a channel metacounter. Values of existing keys will be updated and values of new keys will be added.

var data = {
    'key1': 3,  // Update 1 to 3.
    'key2': 4,  // Update 2 to 4.
    'key3': 0   // Add a new key-value item.
};

var upsertIfNotExist = true;    // If false, the item with `key3` isn't added to the metadata.

channel.updateMetaCounters(data, upsertIfNotExist, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Increase

Copy link

You can increase values in a channel metacounter by passing a Dictionary of keys to increase as an argument to a parameter in the increaseMetaCounters() method. The values of corresponding keys in the metacounter will be incremented by the number you’ve specified.

var counters = {
    'key1': 2,  // Increase by 2.
    'key2': 3'  // Increase by 3.
};

channel.increaseMetaCounters(counters, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Decrease

Copy link

You can decrease values in a channel metacounter by passing a Dictionary of keys to decrease as an argument to a parameter in the decreaseMetaCounters() method. The values of corresponding keys in the metacounter will be decremented by the number you’ve specified.

var counters = {
    'key1': 3,  // Decrease by 3.
    'key2': 4'  // Decrease by 4.
};

channel.decreaseMetaCounters(counters, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Retrieve

Copy link

You can retrieve channel metacounter by creating a Collection of keys to retrieve and passing it as an argument to a parameter in the getMetaCounters() method. A Dictionary will return through the callback function with corresponding key-value items.

var keys = [
    'key1',
    'key2'
];

channel.getMetaCounters(keys, function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});

Delete

Copy link

You can delete a channel metacounter as below.

channel.deleteMetaCounter('key1', function(response, error) {
    if (error) {
        // Handle error.
    }

    ...
});