Updating a Channel

LAST EDIT Feb 22 2021

There are two ways to update a channel using the Stream API - a partial or full update. A partial update will retain any custom key-value data, whereas a complete update is going to remove any that are unspecified in the API request.

Partial UpdateCopied!

A partial update can be used to set and unset specific fields when it is necessary to retain additional custom data fields on the object. AKA a patch style update.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Here's a channel with some custom field data that might be useful 
const channel = client.channel(type, id , { 
  source: "user", 
  source_detail:{ user_id: 123 }, 
  channel_detail:{ topic: "Plants and Animals", rating: "pg" } 
}) 
 
// let's change the source of this channel 
await channel.updatePartial({ set:{ source: "system" } }); 
 
// since it's system generated we no lonfer need source_detail 
await channel.updatePartial({ unset: ["source_detail"] }); 
 
// and finally update one of the nested fields in the channel_detail 
await channel.updatePartial({ set: { "channel_detail.topic": "Nature" } }); 
 
// and maybe we decide we no longer need a rating 
await channel.updatePartial({ unset: ["channel_detail.rating"] });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Here's a channel with some custom field data that might be useful 
var channel = client.channel(type, id: id, extraData: { 
  "source": "user", 
  "source_detail" :{ "user_id": 123 }, 
  "channel_detail" :{ "topic": "Plants and Animals", "rating": "pg" } 
}); 
 
// let's change the source of this channel 
await channel.updatePartial({ "set" :{ "source": "system" } }); 
 
// since it's system generated we no longer need source_detail 
await channel.updatePartial({ "unset": ["source_detail"] }); 
 
// and finally update one of the nested fields in the channel_detail 
await channel.updatePartial({ "set": { "channel_detail.topic": "Nature" } }); 
 
// and maybe we decide we no longer need a rating 
await channel.updatePartial({ "unset": ["channel_detail.rating"] });

Full Update (overwrite)Copied!

The updateChannel function updates all of the channel data. Any data that is present on the channel and not included in a full update will be deleted.

1
2
3
4
5
6
7
const update = await channel.update( 
    { 
        name: 'myspecialchannel', 
        color: 'green', 
    }, 
    { text: 'Thierry changed the channel color to green', user_id: "Thierry" }, 
);
1
2
3
4
await channel.update({ 
  "name": "myspecialchannel", 
  "color": "green", 
}, Message(text: "Thierry changed the channel color to green"));
1
2
3
4
5
6
7
8
9
10
$update = $channel->update( 
	[ 
		'name'    => 'myspecialchannel',  
		'color'	  => 'green' 
	], 
	[  
		'text' => 'Thierry changed the channel color to green', 
		'user_id' => 'thierry' 
	] 
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
val channelClient = client.channel("messaging", "general") 
 
channelClient.update( 
    message = Message( 
        text = "Thierry changed the channel color to green" 
    ), 
    extraData = mapOf( 
        "name" to "myspecialchannel", 
        "color" to "green", 
    ), 
).enqueue { result -> 
    if (result.isSuccess) { 
        val channel = result.data() 
    } else { 
        // Handle result.error() 
    } 
}
1
2
3
4
5
6
7
8
9
10
import Stream Chat 
 
let controller = chatClient.channelController(for: .init(type: .messaging, id: "general")) 
 
controller.updateChannel(name: "My special channel", imageURL: nil, team: nil, extraData: .defaultValue) { error in 
    if let error = error { 
        // handle errors 
        print(error) 
    } 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ChannelClient channelClient = client.channel("messaging", "general"); 
 
Map<String, Object> channelData = new HashMap<>(); 
channelData.put("name", "myspecialchannel"); 
channelData.put("color", "green"); 
Message updateMessage = new Message(); 
updateMessage.setText("Thierry changed the channel color to green"); 
 
channelClient.update(updateMessage, channelData).enqueue(result -> { 
    if (result.isSuccess()) { 
        Channel channel = result.data(); 
    } else { 
        // Handle result.error() 
    } 
});

Request ParamsCopied!

Name

Type

Description

Optional

channel data

object

Object with the new channel information. One special field is "frozen". Setting this field to true will freeze the channel. Read more about freezing channels in "Freezing Channels"

text

object

Message object allowing you to show a system message in the Channel that something changed.

Yes

Updating a channel using these methods cannot be used to add or remove members. For this, you must use specific methods for adding/removing members, more information can be found here.