# Core features

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

Chat is is designed to support in-session text communication. Zoom truncates messages exceeding a binary size of 10,000 bytes. As a best practice, we recommend a limit of 1000 characters per message.

While in a session, users can send chat messages to each other. Two main components implement in-session messaging.

-   An instance of `IZoomVideoSDKChatHelper` provides the methods for sending messages.
-   The `onChatNewMessageNotify` callback on your `IZoomVideoSDKDelegate` delivers incoming messages and confirms your own messages were sent.

To read message metadata, delete messages, and apply host chat privileges, see [Manage chat messages](/docs/video-sdk/linux/chat/chat-message-details/). To transfer files, see [Send files in chat](/docs/video-sdk/linux/chat/send-files-in-chat/).

## Get the chat helper

Get the chat helper with `getChatHelper`.

```cpp
IZoomVideoSDKChatHelper* pChatHelper = m_pVideoSDK->getChatHelper();
```

## Send a public message

To send a message to everyone in the session, call `sendChatToAll`. Check that chat is enabled first with `isChatDisabled`.

```cpp
IZoomVideoSDKChatHelper* pChatHelper = m_pVideoSDK->getChatHelper();

if (pChatHelper->isChatDisabled() == false) {
    // Send a message to all users in the session.
    pChatHelper->sendChatToAll(strMessage);
}
```

## Send a private message

To send a message to a single user, call `sendChatToUser` with the recipient's `IZoomVideoSDKUser`. Private chat can be disabled separately from chat as a whole, so check both `isChatDisabled` and `isPrivateChatDisabled`.

```cpp
IZoomVideoSDKChatHelper* pChatHelper = m_pVideoSDK->getChatHelper();

if (pChatHelper->isChatDisabled() == false && pChatHelper->isPrivateChatDisabled() == false) {
    // Send a message to a single user.
    pChatHelper->sendChatToUser(pUser, strMessage);
}
```

## Receive incoming messages

To be notified when a message arrives, implement `onChatNewMessageNotify` on your `IZoomVideoSDKDelegate`. The `messageItem` parameter carries the message content and the `IZoomVideoSDKUser` for both the sender and the recipient.

```cpp
void CExampleListener::onChatNewMessageNotify(IZoomVideoSDKChatHelper* pChatHelper, IZoomVideoSDKChatMessage* messageItem)
{
    if (!messageItem)
        return;

    const zchar_t* content = messageItem->getContent();
    IZoomVideoSDKUser* pSendingUser = messageItem->getSendUser();
    IZoomVideoSDKUser* pReceivingUser = messageItem->getReceiveUser();
}
```

For more information on using the `IZoomVideoSDKUser` object, see [Sessions](/docs/video-sdk/linux/sessions/).
