> ## 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 A Message

> Send text, media, custom, and interactive chat messages with the CometChat JavaScript SDK.

Using CometChat, you can send three types of messages:

1. [Text Message](/sdk/javascript/send-message#text-message) is the most common and standard message type.
2. [Media Message](/sdk/javascript/send-message#media-message) for sending photos, videos and files.
3. [Custom Message](/sdk/javascript/send-message#custom-message), for sending completely custom data using JSON structures.
4. [Interactive Messages](/sdk/javascript/interactive-messages), for sending end-user interactive messages of type form, card and custom Interactive

You can also send metadata along with a text, media or custom message. Think, for example, if you'd want to share the user's location with every message, you can use the metadata field

## 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()` method returns a [`TextMessage`](/sdk/reference/messages#textmessage) | [`MediaMessage`](/sdk/reference/messages#mediamessage) | [`CustomMessage`](/sdk/reference/messages#custommessage) | [`BaseMessage`](/sdk/reference/messages#basemessage) object depending on the input message type.

## 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 from an input element and pass it to [`MediaMessage`](/sdk/reference/messages#mediamessage):

```html theme={null}
<input type="file" name="img_file" id="img_file" />
```

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      messageType: string = CometChat.MESSAGE_TYPE.IMAGE,
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      file: File = (document.getElementById("img_file") as HTMLInputElement).files![0];

    let 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 file = document.getElementById("img_file").files[0];

    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,
      file: File = (document.getElementById("img_file") as HTMLInputElement).files![0];

    let 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 file = document.getElementById("img_file").files[0];

    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:

<Tabs>
  <Tab title="TypeScript">
    `typescript mediaMessage.setCaption("Check out this photo!"); `
  </Tab>

  <Tab title="JavaScript">
    `javascript mediaMessage.setCaption("Check out this photo!"); `
  </Tab>
</Tabs>

### Add Metadata and Tags

Same as text messages:

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

The `sendMediaMessage()` method returns a [`MediaMessage`](/sdk/reference/messages#mediamessage) object.

## Multiple Attachments in a Media Message

Starting version 3.0.9 & above the SDK supports sending multiple attachments in a single media message. As in the case of a single attachment in a media message, there are two ways you can send Media Messages using the CometChat SDK:

1. **By providing an array of files:** You can now share an array of files while creating an object of the MediaMessage class. When the media message is sent using the `sendMediaMessage()` method, the files are uploaded to the CometChat servers & the URL of the files is sent in the success response of the `sendMediaMessage()` method.

Getting files:

<Tabs>
  <Tab title="html">
    ```html theme={null}
    <html>
      <body>
        <input type="file" name="img_file" id="img_file" />
        <script>
          const UID = "UID";
          const files = document.getElementById("img_file").files;
          const fileType = MESSAGE_TYPE.IMAGE;
          const userType = CometChat.RECEIVER_TYPE.USER;
          const mediaMessage = new MediaMessage(UID, files, fileType, userType);
        </script>
      </body>
    </html>
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="TypeScript (User)">
    ```typescript theme={null}
    let receiverID: string = "UID",
      messageType: string = CometChat.MESSAGE_TYPE.FILE,
      receiverType: string = CometChat.RECEIVER_TYPE.USER,
      files: FileList = (document.getElementById("img_file") as HTMLInputElement).files!;

    let 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,
      files: FileList = (document.getElementById("img_file") as HTMLInputElement).files!;

    let 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 files = document.getElementById("img_file").files;

    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");
```

The `sendCustomMessage()` method returns a [`CustomMessage`](/sdk/reference/messages#custommessage) object.

***

## Next Steps

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

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

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