> ## 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 A Message — CometChat documentation.

Using CometChat, you can send three types of messages:

1. A [text message](/sdk/javascript/2.0/messaging-send-message#text-message) the most common and standard message type.
2. A [media message](/sdk/javascript/2.0/messaging-send-message#media-message), for sending photos, videos and files.
3. A [custom message](/sdk/javascript/2.0/messaging-send-message#custom-message), for sending completely custom data using JSON structures.

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

*In other words, as a sender, how do I send a text message?*

To send a text message to a single user or group, you need to use the `sendMessage()` method and pass a `TextMessage` object to it.

<Tabs>
  <Tab title="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);
    }
    );
    ```
  </Tab>

  <Tab title="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` class constructor takes the following parameters:

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

When a text message is sent successfully, the response will include a `TextMessage` object which includes all information related to the sent message.

### Add Metadata

To send custom data along with a text message, you can use the `setMetadata` method and pass a `JSONObject` to it.

<Tabs>
  <Tab title="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);

    let metadata = {
    latitude: "50.6192171633316",
    longitude: "-72.68182268750002"
    };

    textMessage.setMetadata(metadata);

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

  <Tab title="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);

    var metadata = {
    latitude: "50.6192171633316",
    longitude: "-72.68182268750002"
    };

    textMessage.setMetadata(metadata);

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

## Media Message

*In other words, as a sender, how do I send a media message like photos, videos & files?*

To send a media message to any user or group, you need to use the `sendMediaMessage()` method and pass a `MediaMessage` object to it.

Getting file Object:

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

<Tabs>
  <Tab title="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, `INPUT FILE OBJECT`, 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="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, `INPUT FILE OBJECT`, 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>

The `MediaMessage` class constructor takes the following parameters:

| Parameter        | Description                                                                                                                                                                                                                         |          |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| **receiverId**   | The `UID` or `GUID` of the recipient.                                                                                                                                                                                               | Required |
| **file**         | The file object to be sent                                                                                                                                                                                                          | Required |
| **messageType**  | The type of the message that needs to be sent which in this case can be: <br />1.`CometChat.MESSAGE_TYPE.IMAGE` <br />2.`CometChat.MESSAGE_TYPE.VIDEO` <br />3.`CometChat.MESSAGE_TYPE.AUDIO` <br />4.`CometChat.MESSAGE_TYPE.FILE` | Required |
| **receiverType** | The type of the receiver to whom the message is to be sent. <br />`1. CometChat.RECEIVER_TYPE.USER` <br />`2. CometChat.RECEIVER_TYPE.GROUP`                                                                                        | Required |

When a media message is sent successfully, the response will include a `MediaMessage` object which includes all information related to the sent message.

### Add Metadata

To send custom data along with a media message, you can use the `setMetadata` method and pass a `JSONObject` to it.

<Tabs>
  <Tab title="Metadata">
    ```javascript theme={null}
    let metadata = {
    latitude: "50.6192171633316",
    longitude: "-72.68182268750002"
    };

    mediaMessage.setMetadata(metadata);
    ```
  </Tab>
</Tabs>

### Add Caption(Text along with Media Message)

To send a caption with a media message, you can use `setCaption` method and pass text to it.

<Tabs>
  <Tab title="Caption">
    ```javascript theme={null}
    let caption = "Random Caption";

    mediaMessage.setCaption(caption);
    ```
  </Tab>
</Tabs>

## Custom Message

*In other words, as a sender, how do I send a custom message like location co-ordinates?*

CometChat allows you to send custom messages which are neither text nor media messages.

In order to send a custom message, you need to use the `sendCustomMessage()` method.

The `sendCustomMessage()` methods takes an object of the `CustomMessage` which can be obtained using the below constructor.

<Tabs>
  <Tab title="Custom Message">
    ```javascript theme={null}
    let customMessage = new CometChat.CustomMessage(receiverID, receiverType, customType, customData);
    ```
  </Tab>
</Tabs>

The above constructor, helps you create a custom message with the message type set to whatever is passed to the constructor and the category set to `custom`.

The parameters involved are:

1. `receiverId` - Unique id of the user or group to which the message is to be sent.
2. `receiverType` - Type of the receiver i.e user or group
3. `customType` - custom message type that you need to set
4. `customData` - The data to be passed as the message in the form of a JSONObject.

You can also use the subType field of the `CustomMessage` class to set a specific type for the custom message. This can be achieved using the `setSubtype()` method.

Once the object of `CustomMessage` class is ready you can send the custom message using the `sendCustomMessage()` method.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
       
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
       
    ```
  </Tab>
</Tabs>

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

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

The above sample explains how custom messages can be used to share the location with a user. The same can be achieved for groups.

On success, you will receive an object of the `CustomMessage` class.
