# 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.

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
const message = {
  text: "You completed your trip",
  user: systemUser,
  silent: true,
  attachments: [{ type: "trip", ...tripData }],
};
await channel.sendMessage(message);
```

</codetabs-item>

<codetabs-item value="kotlin" label="Kotlin">

```kotlin
val message = Message(
  text = "You and Jane are now matched!",
  user = systemUser,
  silent = true,
)
channelClient.sendMessage(message).enqueue { /* ... */ }
```

</codetabs-item>

<codetabs-item value="swift" label="Swift">

```swift
let channelController = client.channelController(for: .init(type: .messaging, id: "general"))
channelController.createNewMessage(text: "You completed your trip", isSilent: true)
```

</codetabs-item>

<codetabs-item value="dart" label="Dart">

```dart
final message = Message(
  text: 'You completed your trip',
  user: systemUser,
  silent: true,
  attachments: tripAttachments,
);
await channel.sendMessage(message);
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
// 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
chat.sendMessage(type, id, SendMessageRequest.builder()
    .message(MessageRequest.builder()
        .text("You completed your trip")
        .userID(systemUserId)
        .silent(true)
        .build())
    .build()).execute();
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
from getstream.models import MessageRequest

channel.send_message(
    MessageRequest(text="You completed your trip", silent=True, user_id=user_id)
)
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
$client->sendMessage("messaging", "general", new Models\SendMessageRequest(
    message: new Models\MessageRequest(
        text: "You completed your trip",
        silent: true,
        userID: "jenny",
    ),
));
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
require 'getstream_ruby'
Models = GetStream::Generated::Models

client.chat.send_message('messaging', channel_id, Models::SendMessageRequest.new(
  message: Models::MessageRequest.new(
    text: 'You completed your trip',
    silent: true,
    user_id: user_id
  )
))
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
channel.SendMessage(ctx, &getstream.SendMessageRequest{
  Message: getstream.MessageRequest{
    Text:   getstream.PtrTo("You completed your trip"),
    Silent: getstream.PtrTo(true),
    UserID: getstream.PtrTo(userID),
  },
})
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
var resp = await chat.SendMessageAsync("messaging", channelId,
    new SendMessageRequest
    {
        Message = new MessageRequest
        {
            Text = "You completed your trip",
            UserID = userId,
            Silent = true
        }
    });
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
var silentMessage = await channel.SendNewMessageAsync(new StreamSendMessageRequest
{
  Text = "System message",
  Silent = true
});
```

</codetabs-item>

<codetabs-item value="unreal" label="Unreal">

```cpp
FMessage Message{TEXT("You completed your trip")};
Message.User = SystemUser;
Message.bIsSilent = true;
Channel->SendMessage(Message);
```

</codetabs-item>

</codetabs>

<admonition type="info">

Existing messages cannot be converted to silent messages.

</admonition>

<admonition type="info">

Silent replies still increment the parent message's `reply_count`.

</admonition>

<admonition type="info">

Silent messages still trigger push notifications by default. Set `skip_push: true` to disable push notifications. See [Messages Overview](/chat/docs/<framework>/send_message/) for details.

</admonition>

## 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.

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
const message = {
  text: "You completed your trip",
  user: systemUser,
  type: "system",
};
await channel.sendMessage(message);
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
// Backend SDK
chat.sendMessage(type, id, SendMessageRequest.builder()
    .message(MessageRequest.builder()
        .text(text)
        .type("system")
        .userID(systemUserId)
        .build())
    .build()).execute();
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
from getstream.models import MessageRequest

channel.send_message(
    MessageRequest(text="You completed your trip", type="system", user_id=user_id)
)
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
$client->sendMessage("messaging", "general", new Models\SendMessageRequest(
    message: new Models\MessageRequest(
        text: "You completed your trip",
        type: "system",
        userID: "jenny",
    ),
));
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
require 'getstream_ruby'
Models = GetStream::Generated::Models

client.chat.send_message('messaging', channel_id, Models::SendMessageRequest.new(
  message: Models::MessageRequest.new(
    text: 'You completed your trip',
    type: 'system',
    user_id: user_id
  )
))
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
resp, err := channel.SendMessage(ctx, &getstream.SendMessageRequest{
  Message: getstream.MessageRequest{
    Text:   getstream.PtrTo("You completed your trip"),
    Type:   getstream.PtrTo("system"),
    UserID: getstream.PtrTo(systemUserID),
  },
})
```

</codetabs-item>

</codetabs>


---

This page was last updated at 2026-03-13T13:17:09.169Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/ruby/silent_messages/](https://getstream.io/chat/docs/ruby/silent_messages/).