# MessageContent

Type: object

Message body to send or display. Use `text` for plain replies, `media` for uploaded
or hosted files, `template` for WhatsApp-approved templates, and `richMessage` for
interactive channel content.

## Properties

## Discriminator

Use `type` with one of `text`, `media`, `template`, `richMessage`.

## Variants

### TextMessageContent

Discriminator value: `text`

Plain text message content.

Required fields: `type`, `text`

- `type` (const, required)
- `text` (TextContent, required)

```json
{
  "type": "text",
  "text": {
    "body": "Hi Anna, your order is ready for pickup."
  }
}
```

### MessageContent

Discriminator value: `media`

Media message content. Upload with `/media/uploads` first, then pass the returned `mediaId`.

Required fields: `type`, `media`

- `type` (const, required)
- `media` (Content, required)

```json
{
  "type": "media",
  "media": {
    "mediaId": "mda_01HV8Z6K9D2R4S7T8P5N3Q1M0",
    "caption": "Your invoice is attached.",
    "filename": "invoice-4827.pdf",
    "mimeType": "application/pdf",
    "mediaType": "document"
  }
}
```

### TemplateMessageContent

Discriminator value: `template`

WhatsApp template message content. The gateway maps this to the channel-specific send internally.

Required fields: `type`, `template`

- `type` (const, required)
- `template` (WhatsAppTemplateContent, required)

```json
{
  "type": "template",
  "template": {
    "name": "order_ready",
    "language": "en",
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Anna"
          },
          {
            "type": "text",
            "text": "4827"
          }
        ]
      }
    ]
  }
}
```

### RichMessageContent

Discriminator value: `richMessage`

Structured rich message content for channels that support cards or actions.

Required fields: `type`, `richMessage`

- `type` (const, required)
- `richMessage` (RichMessage, required)

```json
{
  "type": "richMessage",
  "richMessage": {
    "cards": [
      {
        "body": {
          "text": "Choose the next step."
        },
        "actions": [
          {
            "type": "reply",
            "label": "Talk to support",
            "value": "support"
          }
        ]
      }
    ]
  }
}
```

