> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-rn-guide-message-privately.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Send Messages

> Send CometChat text, media, and custom messages to users and groups in React Native apps with message types and metadata.

<Accordion title="AI Integration Quick Reference">
  | Field          | Value                                                                                                                                                                  |
  | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | Key Classes    | [`TextMessage`](/sdk/reference/messages#textmessage), [`MediaMessage`](/sdk/reference/messages#mediamessage), [`CustomMessage`](/sdk/reference/messages#custommessage) |
  | Key Methods    | `sendMessage()`, `sendMediaMessage()`, `sendCustomMessage()`                                                                                                           |
  | Receiver Types | `CometChat.RECEIVER_TYPE.USER`, `CometChat.RECEIVER_TYPE.GROUP`                                                                                                        |
  | Message Types  | `TEXT`, `IMAGE`, `VIDEO`, `AUDIO`, `FILE`, `CUSTOM`                                                                                                                    |
  | Prerequisites  | SDK initialized, user logged in                                                                                                                                        |
</Accordion>

CometChat supports three types of messages:

| Type                      | Method                | Use Case                          |
| ------------------------- | --------------------- | --------------------------------- |
| [Text](#text-message)     | `sendMessage()`       | Plain text messages               |
| [Media](#media-message)   | `sendMediaMessage()`  | Images, videos, audio, files      |
| [Custom](#custom-message) | `sendCustomMessage()` | Location, polls, or any JSON data |

## Text Message

Send a text message using `CometChat.sendMessage()` with a [`TextMessage`](/sdk/reference/messages#textmessage) object.

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      messageText: string = "Hello world!",
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      textMessage: CometChat.TextMessage = new CometChat.TextMessage(
        receiverID,
        messageText,
        receiverType
      );

    CometChat.sendMessage(textMessage).then(
      (message: CometChat.TextMessage) => {
        console.log("Message sent successfully:", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message sending failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (User)">
    ```javascript theme={null}
    let receiverID = "UID";
    let messageText = "Hello world!";
    let receiverType = CometChat.RECEIVER_TYPE.USER;
    let textMessage = new CometChat.TextMessage(
      receiverID,
      messageText,
      receiverType
    );

    CometChat.sendMessage(textMessage).then(
      (message) => {
        console.log("Message sent successfully:", message);
      },
      (error) => {
        console.log("Message sending failed with error:", error);
      }
    );
    ```

    Alternatively, you can use the `async/await` syntax:

    ```javascript theme={null}
    try {
      const receiverID = "UID";
      const messageText = "Hello world!";
      const receiverType = CometChat.RECEIVER_TYPE.USER;
      const textMessage = new CometChat.TextMessage(
        receiverID,
        messageText,
        receiverType
      );

      const message = await CometChat.sendMessage(textMessage);
      console.log("Message sent successfully:", message);
    } catch (error) {
      console.log("Message sending failed with error:", error);
    }
    ```
  </Tab>

  <Tab title="TypeScript (Group)">
    ```typescript theme={null}
    let receiverID: string = "GUID",
      messageText: string = "Hello world!",
      receiverType: string = CometChat.RECEIVER_TYPE.GROUP,
      textMessage: CometChat.TextMessage = new CometChat.TextMessage(
        receiverID,
        messageText,
        receiverType
      );

    CometChat.sendMessage(textMessage).then(
      (message: CometChat.TextMessage) => {
        console.log("Message sent successfully:", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message sending failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (Group)">
    ```javascript theme={null}
    let receiverID = "GUID";
    let messageText = "Hello world!";
    let receiverType = CometChat.RECEIVER_TYPE.GROUP;
    let textMessage = new CometChat.TextMessage(
      receiverID,
      messageText,
      receiverType
    );

    CometChat.sendMessage(textMessage).then(
      (message) => {
        console.log("Message sent successfully:", message);
      },
      (error) => {
        console.log("Message sending failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

The [`TextMessage`](/sdk/reference/messages#textmessage) class constructor takes the following parameters:

| Parameter      | Description                                                       | Required |
| -------------- | ----------------------------------------------------------------- | -------- |
| `receiverID`   | UID of the user or GUID of the group receiving the message        | Yes      |
| `messageText`  | The text message content                                          | Yes      |
| `receiverType` | `CometChat.RECEIVER_TYPE.USER` or `CometChat.RECEIVER_TYPE.GROUP` | Yes      |

On success, `sendMessage()` returns a [`TextMessage`](/sdk/reference/messages#textmessage) | [`MediaMessage`](/sdk/reference/messages#mediamessage) | [`CustomMessage`](/sdk/reference/messages#custommessage) | [`BaseMessage`](/sdk/reference/messages#basemessage) object containing all information related to the sent message.

## Media Message

Send images, videos, audio, or files using `CometChat.sendMediaMessage()`.

There are two ways to send media messages:

1. **Upload a file** — Pass a file object and CometChat uploads it automatically
2. **Send a URL** — Provide a URL to media hosted on your server or cloud storage

### Upload a File

Get the file using a React Native image picker and pass it to [`MediaMessage`](/sdk/reference/messages#mediamessage):

```javascript theme={null}
ImagePicker.showImagePicker(options, (response) => {
  if (response.didCancel || response.error) return;

  const file = {
    name: Platform.OS === "android" ? response.fileName : response.fileName || "Camera_001.jpeg",
    type: response.type,
    uri: Platform.OS === "android" ? response.uri : response.uri.replace("file://", ""),
  };
  // Use this file object in MediaMessage
});
```

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      messageType: string = CometChat.MESSAGE_TYPE.IMAGE,
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        file,
        messageType,
        receiverType
      );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (User)">
    ```javascript theme={null}
    let receiverID = "UID";
    let messageType = CometChat.MESSAGE_TYPE.IMAGE;
    let receiverType = CometChat.RECEIVER_TYPE.USER;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      file,
      messageType,
      receiverType
    );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript (Group)">
    ```typescript theme={null}
    let receiverID: string = "GUID",
      messageType: string = CometChat.MESSAGE_TYPE.IMAGE,
      receiverType: string = CometChat.RECEIVER_TYPE.GROUP,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        file,
        messageType,
        receiverType
      );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (Group)">
    ```javascript theme={null}
    let receiverID = "GUID";
    let messageType = CometChat.MESSAGE_TYPE.IMAGE;
    let receiverType = CometChat.RECEIVER_TYPE.GROUP;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      file,
      messageType,
      receiverType
    );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>
</Tabs>

### Send a URL

Send media hosted on your server or cloud storage using the [`Attachment`](/sdk/reference/auxiliary#attachment) class:

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      messageType: string = CometChat.MESSAGE_TYPE.IMAGE,
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        "",
        messageType,
        receiverType
      );

    let file: Object = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment: CometChat.Attachment = new CometChat.Attachment(file);
    mediaMessage.setAttachment(attachment);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (User)">
    ```javascript theme={null}
    let receiverID = "UID";
    let messageType = CometChat.MESSAGE_TYPE.IMAGE;
    let receiverType = CometChat.RECEIVER_TYPE.USER;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      "",
      messageType,
      receiverType
    );

    let file = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment = new CometChat.Attachment(file);
    mediaMessage.setAttachment(attachment);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript (Group)">
    ```typescript theme={null}
    let receiverID: string = "GUID",
      messageType: string = CometChat.MESSAGE_TYPE.IMAGE,
      receiverType: string = CometChat.RECEIVER_TYPE.GROUP,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        "",
        messageType,
        receiverType
      );

    let file: Object = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment: CometChat.Attachment = new CometChat.Attachment(file);
    mediaMessage.setAttachment(attachment);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (Group)">
    ```javascript theme={null}
    let receiverID = "GUID";
    let messageType = CometChat.MESSAGE_TYPE.IMAGE;
    let receiverType = CometChat.RECEIVER_TYPE.GROUP;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      "",
      messageType,
      receiverType
    );

    let file = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment = new CometChat.Attachment(file);
    mediaMessage.setAttachment(attachment);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>
</Tabs>

The [`MediaMessage`](/sdk/reference/messages#mediamessage) class constructor takes the following parameters:

| Parameter      | Description                                                 | Required |
| -------------- | ----------------------------------------------------------- | -------- |
| `receiverID`   | UID of the user or GUID of the group                        | Yes      |
| `file`         | File object to upload, or empty string if using URL         | Yes      |
| `messageType`  | `CometChat.MESSAGE_TYPE.IMAGE`, `VIDEO`, `AUDIO`, or `FILE` | Yes      |
| `receiverType` | `CometChat.RECEIVER_TYPE.USER` or `GROUP`                   | Yes      |

On success, `sendMediaMessage()` returns a [`MediaMessage`](/sdk/reference/messages#mediamessage) object.

### Add Caption

Add text along with the media:

```javascript theme={null}
mediaMessage.setCaption("Check out this photo!");
```

### Add Metadata and Tags

```javascript theme={null}
mediaMessage.setMetadata({ location: "Paris" });
mediaMessage.setTags(["vacation"]);
mediaMessage.setQuotedMessageId(10);
```

## Multiple Attachments in a Media Message

Starting version 3.0.9 & above, the SDK supports sending multiple attachments in a single media message. There are two ways:

1. **By providing an array of files** — Pass an array of file objects and CometChat uploads them automatically.
2. **By providing URLs** — Use the [`Attachment`](/sdk/reference/auxiliary#attachment) class with multiple URLs.

### Upload Multiple Files

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      messageType: string = CometChat.MESSAGE_TYPE.FILE,
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        files,
        messageType,
        receiverType
      );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (User)">
    ```javascript theme={null}
    let receiverID = "UID";
    let messageType = CometChat.MESSAGE_TYPE.FILE;
    let receiverType = CometChat.RECEIVER_TYPE.USER;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      files,
      messageType,
      receiverType
    );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript (Group)">
    ```typescript theme={null}
    let receiverID: string = "GUID",
      messageType: string = CometChat.MESSAGE_TYPE.FILE,
      receiverType: string = CometChat.RECEIVER_TYPE.GROUP,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        files,
        messageType,
        receiverType
      );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (Group)">
    ```javascript theme={null}
    let receiverID = "GUID";
    let messageType = CometChat.MESSAGE_TYPE.FILE;
    let receiverType = CometChat.RECEIVER_TYPE.GROUP;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      files,
      messageType,
      receiverType
    );

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>
</Tabs>

### Send Multiple URLs

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      messageType: string = CometChat.MESSAGE_TYPE.IMAGE,
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        "",
        messageType,
        receiverType
      );

    let attachment1: Object = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment2: Object = {
      name: "jaguar",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/jaguar/jaguar_PNG20759.png",
    };

    let attachments: Array<CometChat.Attachment> = [];
    attachments.push(new CometChat.Attachment(attachment1));
    attachments.push(new CometChat.Attachment(attachment2));

    mediaMessage.setAttachments(attachments);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (User)">
    ```javascript theme={null}
    let receiverID = "UID";
    let messageType = CometChat.MESSAGE_TYPE.IMAGE;
    let receiverType = CometChat.RECEIVER_TYPE.USER;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      "",
      messageType,
      receiverType
    );

    let attachment1 = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment2 = {
      name: "jaguar",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/jaguar/jaguar_PNG20759.png",
    };

    let attachments = [];
    attachments.push(new CometChat.Attachment(attachment1));
    attachments.push(new CometChat.Attachment(attachment2));

    mediaMessage.setAttachments(attachments);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript (Group)">
    ```typescript theme={null}
    let receiverID: string = "GUID",
      messageType: string = CometChat.MESSAGE_TYPE.IMAGE,
      receiverType: string = CometChat.RECEIVER_TYPE.GROUP,
      mediaMessage: CometChat.MediaMessage = new CometChat.MediaMessage(
        receiverID,
        "",
        messageType,
        receiverType
      );

    let attachment1: Object = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment2: Object = {
      name: "jaguar",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/jaguar/jaguar_PNG20759.png",
    };

    let attachments: Array<CometChat.Attachment> = [];
    attachments.push(new CometChat.Attachment(attachment1));
    attachments.push(new CometChat.Attachment(attachment2));

    mediaMessage.setAttachments(attachments);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message: CometChat.MediaMessage) => {
        console.log("Media message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (Group)">
    ```javascript theme={null}
    let receiverID = "GUID";
    let messageType = CometChat.MESSAGE_TYPE.IMAGE;
    let receiverType = CometChat.RECEIVER_TYPE.GROUP;
    let mediaMessage = new CometChat.MediaMessage(
      receiverID,
      "",
      messageType,
      receiverType
    );

    let attachment1 = {
      name: "mario",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/mario/mario_PNG125.png",
    };

    let attachment2 = {
      name: "jaguar",
      extension: "png",
      mimeType: "image/png",
      url: "https://pngimg.com/uploads/jaguar/jaguar_PNG20759.png",
    };

    let attachments = [];
    attachments.push(new CometChat.Attachment(attachment1));
    attachments.push(new CometChat.Attachment(attachment2));

    mediaMessage.setAttachments(attachments);

    CometChat.sendMediaMessage(mediaMessage).then(
      (message) => {
        console.log("Media message sent successfully", message);
      },
      (error) => {
        console.log("Media message sending failed with error", error);
      }
    );
    ```
  </Tab>
</Tabs>

## Custom Message

Send structured data that doesn't fit text or media categories — like location coordinates, polls, or game moves.

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      customData: Object = {
        latitude: "50.6192171633316",
        longitude: "-72.68182268750002",
      },
      customType: string = "location",
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      customMessage: CometChat.CustomMessage = new CometChat.CustomMessage(
        receiverID,
        receiverType,
        customType,
        customData
      );

    CometChat.sendCustomMessage(customMessage).then(
      (message: CometChat.CustomMessage) => {
        console.log("Custom message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Custom message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (User)">
    ```javascript theme={null}
    let receiverID = "UID";
    let customData = {
      latitude: "50.6192171633316",
      longitude: "-72.68182268750002",
    };
    let customType = "location";
    let receiverType = CometChat.RECEIVER_TYPE.USER;

    let customMessage = new CometChat.CustomMessage(
      receiverID,
      receiverType,
      customType,
      customData
    );

    CometChat.sendCustomMessage(customMessage).then(
      (message) => {
        console.log("Custom message sent successfully", message);
      },
      (error) => {
        console.log("Custom message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript (Group)">
    ```typescript theme={null}
    let receiverID: string = "GUID",
      customData: Object = {
        latitude: "50.6192171633316",
        longitude: "-72.68182268750002",
      },
      customType: string = "location",
      receiverType: string = CometChat.RECEIVER_TYPE.GROUP,
      customMessage: CometChat.CustomMessage = new CometChat.CustomMessage(
        receiverID,
        receiverType,
        customType,
        customData
      );

    CometChat.sendCustomMessage(customMessage).then(
      (message: CometChat.CustomMessage) => {
        console.log("Custom message sent successfully", message);
      },
      (error: CometChat.CometChatException) => {
        console.log("Custom message sending failed with error", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript (Group)">
    ```javascript theme={null}
    let receiverID = "GUID";
    let customData = {
      latitude: "50.6192171633316",
      longitude: "-72.68182268750002",
    };
    let customType = "location";
    let receiverType = CometChat.RECEIVER_TYPE.GROUP;

    let customMessage = new CometChat.CustomMessage(
      receiverID,
      receiverType,
      customType,
      customData
    );

    CometChat.sendCustomMessage(customMessage).then(
      (message) => {
        console.log("Custom message sent successfully", message);
      },
      (error) => {
        console.log("Custom message sending failed with error", error);
      }
    );
    ```
  </Tab>
</Tabs>

The [`CustomMessage`](/sdk/reference/messages#custommessage) class constructor takes the following parameters:

| Parameter      | Description                                            | Required |
| -------------- | ------------------------------------------------------ | -------- |
| `receiverID`   | UID of the user or GUID of the group                   | Yes      |
| `receiverType` | `CometChat.RECEIVER_TYPE.USER` or `GROUP`              | Yes      |
| `customType`   | Your custom type string (e.g., `"location"`, `"poll"`) | Yes      |
| `customData`   | JSON object with your custom data                      | Yes      |

On success, `sendCustomMessage()` returns a [`CustomMessage`](/sdk/reference/messages#custommessage) object.

### Add Tags

```javascript theme={null}
customMessage.setTags(["starredMessage"]);
```

### Quote a Message

```javascript theme={null}
customMessage.setQuotedMessageId(10);
```

### Control Conversation Update

By default, custom messages update the conversation's last message. To prevent this:

```javascript theme={null}
customMessage.shouldUpdateConversation(false);
```

### Custom Notification Text

Set custom text for push, email, and SMS notifications:

```javascript theme={null}
customMessage.setConversationText("Shared a location");
```

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Receive Messages" icon="inbox" href="/sdk/react-native/receive-messages">
    Listen for incoming messages in real-time
  </Card>

  <Card title="Edit Message" icon="pen" href="/sdk/react-native/edit-message">
    Edit previously sent messages
  </Card>

  <Card title="Delete Message" icon="trash" href="/sdk/react-native/delete-message">
    Delete sent messages
  </Card>
</CardGroup>
