> ## Documentation Index
> Fetch the complete documentation index at: https://dev.docs.1to1ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Enviar mensagem

> Envia uma mensagem: texto, mídia, resposta rápida ou template

<Info>
  **Endpoint** · `POST /conversation/actions`
</Info>

Envia uma mensagem. Cada ação envia **um único tipo de conteúdo**: texto, mídia, uma resposta rápida ou um template. Um texto, mídia ou resposta rápida pode também levar um template de *fallback* para quando a janela de 24h estiver fechada (veja abaixo).

<Tabs>
  <Tab title="Texto">
    ```jsonc theme={null}
    {
      "type": "send_message",
      "body": "Olá 👋"
    }
    ```

    Texto simples, até 4096 caracteres.
  </Tab>

  <Tab title="Mídia">
    ```jsonc theme={null}
    {
      "type": "send_message",
      "file_uuid": "7b8a1c2d-3e4f-5678-90ab-cdef12345678",
      "body": "Seu comprovante 📄"
    }
    ```

    O `file_uuid` vem do fluxo de [Enviar mídia](/pt/action-groups/upload-media). O
    `body` é uma legenda opcional; o áudio não admite legenda.
  </Tab>

  <Tab title="Resposta rápida">
    ```jsonc theme={null}
    {
      "type": "send_message",
      "quick_reply": { "name": "Bienvenida" }
    }
    ```

    Identifica a resposta rápida por `name` (sem distinguir maiúsculas).
  </Tab>

  <Tab title="Template">
    ```jsonc theme={null}
    {
      "type": "send_message",
      "template": {
        "name": "confirmacion_cita",
        "language": "es_MX",
        "body_variables": [{ "index": 1, "value": "Ana" }]
      }
    }
    ```

    `language` é **obrigatório** (formato Meta `lower_UPPER`, ex. `es_MX`). Para
    templates com header de mídia, ver [Enviar mídia](/pt/action-groups/upload-media).
  </Tab>
</Tabs>

<Note>
  **Fallback de template.** Um `send_message` de texto, mídia ou resposta rápida
  pode incluir também um `template` opcional: se na execução a [janela de
  24h](/pt/conversations) estiver **fechada**, o template é enviado no lugar do
  primário (fora da janela só é possível enviar templates); se estiver aberta,
  envia o primário. Sem `template`, um primário com a janela fechada falha com
  `WINDOW_CLOSED`.
</Note>

**Combinações válidas:**

| Combinação          | Campos                                                  | O que é enviado                                                      |
| ------------------- | ------------------------------------------------------- | -------------------------------------------------------------------- |
| Texto               | `body`                                                  | O texto (requer janela aberta)                                       |
| Mídia               | `file_uuid` + `body` opcional                           | A mídia com legenda (requer janela aberta)                           |
| Resposta rápida     | `quick_reply`                                           | A resposta rápida (requer janela aberta)                             |
| Template            | `template`                                              | O template (também com a janela fechada)                             |
| Primário + template | `body` \| `file_uuid` \| `quick_reply` **+** `template` | O primário se a janela estiver aberta; o template se estiver fechada |

<CodeGroup>
  ```jsonc Texto + template theme={null}
  {
    "type": "send_message",
    "body": "Olá 👋",
    "template": {
      "name": "recordatorio",
      "language": "es_MX"
    }
  }
  ```

  ```jsonc Mídia + template theme={null}
  {
    "type": "send_message",
    "file_uuid": "7b8a1c2d-3e4f-5678-90ab-cdef12345678",
    "body": "Seu comprovante 📄",
    "template": {
      "name": "recordatorio",
      "language": "es_MX"
    }
  }
  ```

  ```jsonc Resposta rápida + template theme={null}
  {
    "type": "send_message",
    "quick_reply": { "name": "Bienvenida" },
    "template": {
      "name": "recordatorio",
      "language": "es_MX"
    }
  }
  ```
</CodeGroup>

A mídia de cada lado é independente: a do primário em `file_uuid`, a do header do
template em `template.header.file_uuid`; a de uma resposta rápida fica
configurada na própria resposta rápida.

Em uma lista, este objeto vai no array `actions` de um `POST /conversation/actions` — veja [Montar uma lista de ações](/pt/action-groups/overview#montar-uma-lista-de-ações).

## Exemplo executável

Um `send_message` em uma conversa identificada por telefone e canal. Cada ação
envia **um único tipo de conteúdo**; um primário (texto, mídia ou resposta
rápida) pode também levar um **template de fallback** para quando a janela de 24h
estiver fechada.

### Request

<CodeGroup>
  ```bash Texto theme={null}
  curl -X POST "https://app.1to1.ai/api/v1/public/{slug}/conversation/actions" \
    -H "Authorization: Bearer sk_1to1_sua_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "conversation": {
        "phone": "+5215512345678",
        "channel": "ch_7A9K2M4Q"
      },
      "actions": [
        {
          "type": "send_message",
          "body": "Olá 👋, como posso te ajudar?"
        }
      ]
    }'
  ```

  ```bash Mídia theme={null}
  curl -X POST "https://app.1to1.ai/api/v1/public/{slug}/conversation/actions" \
    -H "Authorization: Bearer sk_1to1_sua_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "conversation": {
        "phone": "+5215512345678",
        "channel": "ch_7A9K2M4Q"
      },
      "actions": [
        {
          "type": "send_message",
          "file_uuid": "7b8a1c2d-3e4f-5678-90ab-cdef12345678",
          "body": "Seu comprovante 📄"
        }
      ]
    }'
  ```

  ```bash Resposta rápida theme={null}
  curl -X POST "https://app.1to1.ai/api/v1/public/{slug}/conversation/actions" \
    -H "Authorization: Bearer sk_1to1_sua_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "conversation": {
        "phone": "+5215512345678",
        "channel": "ch_7A9K2M4Q"
      },
      "actions": [
        {
          "type": "send_message",
          "quick_reply": { "name": "Bienvenida" }
        }
      ]
    }'
  ```

  ```bash Template theme={null}
  curl -X POST "https://app.1to1.ai/api/v1/public/{slug}/conversation/actions" \
    -H "Authorization: Bearer sk_1to1_sua_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "conversation": {
        "phone": "+5215512345678",
        "channel": "ch_7A9K2M4Q"
      },
      "actions": [
        {
          "type": "send_message",
          "template": {
            "name": "confirmacion_cita",
            "language": "es_MX",
            "body_variables": [{ "index": 1, "value": "Ana" }]
          }
        }
      ]
    }'
  ```

  ```bash Texto + template de fallback theme={null}
  curl -X POST "https://app.1to1.ai/api/v1/public/{slug}/conversation/actions" \
    -H "Authorization: Bearer sk_1to1_sua_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "conversation": {
        "phone": "+5215512345678",
        "channel": "ch_7A9K2M4Q"
      },
      "actions": [
        {
          "type": "send_message",
          "body": "Olá 👋",
          "template": {
            "name": "recordatorio",
            "language": "es_MX"
          }
        }
      ]
    }'
  ```

  ```bash Resposta rápida + template de fallback theme={null}
  curl -X POST "https://app.1to1.ai/api/v1/public/{slug}/conversation/actions" \
    -H "Authorization: Bearer sk_1to1_sua_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "conversation": {
        "phone": "+5215512345678",
        "channel": "ch_7A9K2M4Q"
      },
      "actions": [
        {
          "type": "send_message",
          "quick_reply": { "name": "Bienvenida" },
          "template": {
            "name": "recordatorio",
            "language": "es_MX"
          }
        }
      ]
    }'
  ```
</CodeGroup>

### Resposta

`202 Accepted` — o grupo foi aceito e roda em **background**. O resultado por
ação não viaja na resposta (consulte-o depois — veja [Como é executado](/pt/action-groups/overview#como-é-executado)).

```json theme={null}
{
  "status": "processing",
  "actions_accepted": 1
}
```

<ResponseField name="status" type="string">
  Sempre `processing`: confirma que o grupo foi aceito e está em execução.
</ResponseField>

<ResponseField name="actions_accepted" type="integer">
  Quantas ações do array foram **admitidas** para execução — não quantas tiveram
  sucesso.
</ResponseField>
