const message = {
text: "You completed your trip",
user: systemUser,
silent: true,
attachments: [{ type: "trip", ...tripData }],
};
await channel.sendMessage(message);Silent & System Messages
Silent and system messages provide ways to add informational content to channels without disrupting users.
Silent Messages
Silent messages do not increment unread counts or mark channels as unread. Use them for transactional or automated content such as:
- “Your ride is waiting”
- “James updated the trip information”
- “You and Jane are now matched”
Set silent: true when sending a message.
val message = Message(
text = "You and Jane are now matched!",
user = systemUser,
silent = true,
)
channelClient.sendMessage(message).enqueue { /* ... */ }let channelController = client.channelController(for: .init(type: .messaging, id: "general"))
channelController.createNewMessage(text: "You completed your trip", isSilent: true)final message = Message(
text: 'You completed your trip',
user: systemUser,
silent: true,
attachments: tripAttachments,
);
await channel.sendMessage(message);// Android SDK
Message message = new Message();
message.setText("You and Jane are now matched!");
message.setUser(systemUser);
message.setSilent(true);
channelClient.sendMessage(message).enqueue(result -> { /* ... */ });
// Backend SDK
Message.send(type, id)
.message(
MessageRequestObject.builder()
.text("You completed your trip")
.userId(systemUserId)
.silent(true)
.build())
.request();message = {
"text": "You completed your trip",
"silent": True,
}
channel.send_message(message, user_id)$message = $channel->sendMessage([
'text' => 'You completed your trip',
'silent' => true
], 'jenny');message = {
text: "You completed your trip",
silent: true,
}
channel.send_message(message, user_id)msg := &Message{Text: "You completed your trip"}
channel.SendMessage(ctx, msg, user.ID, func(msg *messageRequest) {
msg.Message.Silent = true
})await messageClient.SendMessageAsync(channel.Type, channel.Id, new MessageRequest
{
Text = "You completed your trip",
Silent = true,
}, user.Id);var silentMessage = await channel.SendNewMessageAsync(new StreamSendMessageRequest
{
Text = "System message",
Silent = true
});FMessage Message{TEXT("You completed your trip")};
Message.User = SystemUser;
Message.bIsSilent = true;
Channel->SendMessage(Message);Existing messages cannot be converted to silent messages.
Silent replies still increment the parent message’s reply_count.
Silent messages still trigger push notifications by default. Set skip_push: true to disable push notifications. See Messages Overview for details.
System Messages
System messages have a distinct visual presentation, typically styled differently from user messages. Set type: "system" to create a system message.
Stream’s UI SDKs include default styling for system messages. However, customizing their appearance is common to match your application’s design. See your platform’s UI customization documentation for details on styling system messages.
Client-side users require the Create System Message permission. Server-side system messages do not require this permission.
const message = {
text: "You completed your trip",
user: systemUser,
type: "system",
};
await channel.sendMessage(message);// Backend SDK
Message.send(type, id)
.message(
MessageRequestObject.builder()
.text(text)
.type(MessageType.SYSTEM)
.userId(systemUserId)
.build())
.request();message = {
"text": "You completed your trip",
"type": "system",
}
channel.send_message(message, user_id)$message = $channel->sendMessage([
'text' => 'You completed your trip',
'type' => 'system'
], 'jenny');message = {
text: "You completed your trip",
type: "system",
}
channel.send_message(message, user_id)msg := &Message{
Text: "You completed your trip",
Type: "system",
}
resp, err := ch.SendMessage(ctx, msg, systemUserID)