Manage the user-channel membership relationship
Requires App Context
To set up and manage channel membership, you must enable App Context for your app's keyset in the Admin Portal.
When a user joins a channel or gets invited to it, a membership relationship between that user and the channel is created (Membership
entity). The membership ends when this user leaves the channel.
Read on to learn how to check and update user-channel membership.
Get membership
There are two GetMemberships()
methods that return a wrapper containing a list of all channel memberships of a given user.
Both of these methods give the same output. The only difference is that you call a given method either on the User
or the Channel
object.
To get a list of all existing channels, use the GetChannels()
method.
Method signature
This method takes the following parameters:
-
GetMemberships()
(on theUser
object)user.GetMemberships(
string filter = "",
string sort = "",
int limit = 0,
Page page = null
) -
GetUserMemberships()
(on theChat
object)chat.GetUserMemberships(
string userId,
string filter = "",
string sort = "",
int limit = 0,
Page page = null
) -
GetMemberships()
(on theChannel
object)channel.GetMemberships(
string filter = "",
string sort = "",
int limit = 0,
Page page = null
) -
GetChannelMemberships()
(on theChat
object)chat.GetChannelMemberships(
string channelId,
string filter = "",
string sort = "",
int limit = 0,
Page page = null
)
Input
Parameter | Type | Required for GetMemberships() on User | Required for GetUserMemberships() on Chat | Required for GetMemberships() on Channel | Required for GetChannelMemberships() on Chat | Default | Description |
---|---|---|---|---|---|---|---|
userId | string | Yes | No | No | No | n/a | ID of the user for which you want to retrieve memberships. |
channelId | string | No | No | Yes | No | n/a | ID of the channel for which you want to retrieve memberships. |
filter | string | No | No | No | No | empty string | Expression used to filter the results. Returns only these memberships whose properties satisfy the given expression. The filter language is defined here. |
sort | string | No | No | No | No | empty string | Key-value pair of a property to sort by, and a sort direction. Available options are id , name , and updated . Use asc or desc to specify the sorting direction, or specify null to take the default sorting direction (ascending). For example: {name: "asc"} . By default, the items are sorted by the last updated date. |
limit | int | No | No | No | No | 0 | Number of objects to return in response. |
page | Page | No | No | No | No | null | Object used for pagination to define which previous or next result page you want to fetch. |
Output
Type | Description |
---|---|
MembersResponseWrapper | An object containing the filtered, sorted, and paginated list of memberships. |
Basic usage
Find out which channels the support_agent_15
user is a member of.
-
GetMemberships()
(on theUser
object)
show all 18 linesif (chat.TryGetUser("support_agent_15", out var user))
{
Console.WriteLine($"Found user with name {user.Name}");
// Get the memberships of the user
var memberships = user.GetMemberships();
Console.WriteLine($"Memberships of user {user.Name}:");
foreach (var membership in memberships.Memberships)
{
Console.WriteLine($"Channel ID: {membership.ChannelId}");
}
}
else -
GetUserMemberships()
(on theChat
object)var userId = "support_agent_15";
// Get the memberships of the user
var memberships = chat.GetUserMemberships(userId);
Console.WriteLine($"Memberships of user with ID {userId}:");
foreach (var membership in memberships.Memberships)
{
Console.WriteLine($"Channel ID: {membership.ChannelId}");
} -
GetMemberships()
(on theChannel
object)
show all 26 linesvar userId = "support_agent_15";
var channelName = "support";
// retrieve the channel details
if (chat.TryGetChannel(channelName, out var channel))
{
Console.WriteLine($"Found channel with name {channel.Name}");
// get the memberships of the channel
var memberships = channel.GetMemberships();
Console.WriteLine($"Memberships for channel {channel.Name}:");
// loop through the memberships to find the user's membership
foreach (var membership in memberships) -
GetChannelMemberships()
(on theChat
object)
show all 20 linesvar userId = "support_agent_15";
var channelId = "support";
// Get the memberships of the channel using the Chat object
var memberships = chat.GetChannelMemberships(channelId);
Console.WriteLine($"Memberships for channel with ID {channelId}:");
// Loop through the memberships to find the user's membership
foreach (var membership in memberships.Memberships)
{
if (membership.UserId == userId)
{
Console.WriteLine($"User {userId} is a member of channel with ID {channelId}.");
}
Get updates
These methods let you receive updates when specific user-channel Membership
objects are added, edited, or removed on other clients:
StartListeningForUpdates()
— listen forMembership
object update information.OnMembershipUpdated
— add a single event handler to a singleMembership
object update.AddListenerToMembershipsUpdate()
— add a single event handler to eachMembership
object update from the provided list.
Method signature
These methods take the following parameters:
-
StartListeningForUpdates()
channel.StartListeningForUpdates()
-
OnMembershipUpdated
// event on the Membership entity
Action<Membership> OnMembershipUpdated;
// needs a corresponding event handler
void EventHandler(Membership membership) -
AddListenerToMembershipsUpdate()
chat.AddListenerToMembershipsUpdate(
List<string> membershipIds,
Action<Membership> listener
)
Input
Parameter | Type | Required in StartListeningForUpdates | Required in OnMembershipUpdated | Required in AddListenerToMembershipsUpdate() | Default | Description |
---|---|---|---|---|---|---|
membership | Membership | No | Yes | No | n/a | The membership object to handle the update event for. |
membershipIds | List<string> | No | No | Yes | n/a | List of memberships for which you want to get updates. |
listener | n/a | No | Yes | Yes | n/a | The definition of the custom behavior to be executed when detecting membership changes. |
Output
These operations don't return any data.
Basic usage
Get updates on the first user membership.
-
StartListeningForUpdates()
andOnMembershipUpdated
show all 40 lines// reference the "support_agent_15" user
if (chat.TryGetUser("support_agent_15", out var user))
{
Console.WriteLine($"Found user with name {user.Name}");
// get the list of all user memberships
var membershipsResponse = user.GetMemberships();
// extract the actual memberships from the response
var memberships = membershipsResponse.Memberships;
if (memberships.Any())
{
// get the first membership
var firstMembership = memberships.First();
Get updates on the first page of user memberships.
-
AddListenerToMembershipsUpdate()
show all 37 lines// reference the "support_agent_15" user
if (chat.TryGetUser("support_agent_15", out var user))
{
Console.WriteLine($"Found user with name {user.Name}");
// get the first page of user memberships
var membershipsResponse = user.GetMemberships();
// extract the actual memberships from the response
var memberships = membershipsResponse?.Memberships;
if (memberships != null && memberships.Any())
{
// get the IDs of the memberships from the first page
List<string> membershipIds = memberships.Select(m => m.Id).ToList();
Update
Update()
updates the channel membership information for a given user.
Method signature
This method takes the following parameters:
membership.Update(string customJsonObject)
Input
Parameter | Type | Required | Default | Description |
---|---|---|---|---|
customJsonObject | string | Yes | n/a | Any custom properties or metadata associated with the channel-user membership. |
Output
This method doesn't return any data.
Basic usage
Assign the premium-support
role to support_agent_15
on the high-priority-incidents
channel.
// reference the "support_agent_15" user
if (!chat.TryGetUser("support_agent_15", out var user))
{
Console.WriteLine("Couldn't find user!");
return;
};
// get the list of all user memberships and filter out the right channel
var membershipsWrapper = user.GetMemberships(
filter: "channel.Id == 'high-priority-incidents'"
);
if(membershipsWrapper.Memberships.Any())
{
// add custom metadata to the user membership
show all 18 lines