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

# Ejemplos de mensajería de WhatsApp

> Envía mensajes de plantilla, multimedia, interactivos, de comercio, Flow y de llamadas con ejemplos de solicitudes comentados.

## Qué es

Envía mensajes de plantilla, multimedia, interactivos, de comercio, Flow y de llamadas con ejemplos de solicitudes comentados.

## Antes de comenzar

* Guarda una clave de API de YCloud en un secreto del lado del servidor.
* Conecta la cuenta de WhatsApp Business y el número de teléfono utilizados por la solicitud.
* Crea y aprueba cualquier plantilla a la que haga referencia una solicitud de mensajería.
* Reemplaza cada marcador de posición con un valor de tu propia cuenta.

## Cómo funciona

Elige el escenario que coincida con el mensaje o la plantilla que deseas crear. Compara sus campos con la Referencia de la API, reemplaza los marcadores de posición y realiza pruebas con un destinatario controlado antes de usar la solicitud en producción.

## Solicitud

Cada escenario incluye una solicitud de mensaje completa. Los ejemplos utilizan el envío directo para una respuesta rápida, pero los mismos objetos de mensaje también se pueden poner en cola.

## Respuesta

Una respuesta de envío exitosa confirma que YCloud aceptó la solicitud del mensaje; utiliza la recuperación de mensajes o los webhooks de `whatsapp.message.updated` para determinar el estado de entrega final.

<Note>Consulta la [guía de mensajería de WhatsApp](/es/api-reference/guides/whatsapp-platform/send-whatsapp-message) para obtener orientación sobre el ciclo de vida y la Referencia de la API para ver el esquema completo.</Note>

## Elegir un ejemplo

<CardGroup cols={2}>
  <Card title="Mensajes de plantilla" icon="rectangle-list" href="#template-message-examples">
    Envía plantillas aprobadas para casos de uso de autenticación, marketing, utilidad y comercio.
  </Card>

  <Card title="Mensajes de formato libre" icon="message" href="#free-form-message-examples">
    Envía mensajes de texto, multimedia, ubicación, contacto y reacciones dentro de una ventana de servicio al cliente abierta.
  </Card>

  <Card title="Mensajes interactivos" icon="list-check" href="#interactive-list-message">
    Añade interacciones de listas, botones, Flows, productos, llamadas y carruseles.
  </Card>

  <Card title="Mensajes de comercio" icon="cart-shopping" href="#interactive-order-details-message">
    Envía experiencias de productos, detalles del pedido, estado del pedido y proceso de pago.
  </Card>
</CardGroup>

Los ejemplos a continuación se aplican tanto a la API [Send a WhatsApp message directly](/api-reference/whatsapp-messages/send-a-message-directly) como a la API [Enqueue a WhatsApp message](/api-reference/whatsapp-messages/enqueue-a-message).

Comenzar con mensajes de plantilla es una forma sencilla de iniciar una [conversación](https://developers.facebook.com/docs/whatsapp/pricing#opening-conversations). **Una vez que el cliente responda al mensaje de plantilla del negocio, la empresa podrá comenzar a enviar cualquier tipo de mensaje al cliente en un plazo de 24 horas.**

<br />

## Ejemplos de mensajes de plantilla

Los siguientes son ejemplos de mensajes con plantilla de mensaje de WhatsApp. Cada plantilla debe crearse y aprobarse antes de poder utilizarse para enviar mensajes.

<br />

### Mensaje de plantilla de autenticación con botones de contraseña de un solo uso

En este caso, tienes una **[Plantilla de autenticación con botón para copiar código](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#authentication-template-with-copy-code-button)**, una **[Plantilla de autenticación con botón de un solo toque](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#authentication-template-with-one-tap-button)** o una **[Plantilla de autenticación sin toques](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#zero-tap-authentication-template)**, y envías un mensaje de plantilla:

* Contiene una contraseña de un solo uso o un código de verificación que se entregará al cliente.
* Contiene un botón de **copiar código** , un botón de **autorrelleno con un toque** o ningún botón si se utiliza **cero toques**.

![example-messaging-otp.webp](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-otp.webp)

![](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-template-zerotap.webp)<br />
**<p align="center" style={{ color: '#67777F' }}>CERO TOQUES</p>**

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "otp_one_tap",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "797011"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "text",
            "text": "797011"
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío de la solicitud, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarda `id` y correlaciona los eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* El texto del cuerpo del mensaje contendrá el código de verificación que se encuentra en el componente del cuerpo. Por otro lado, el código que realmente se utiliza cuando los usuarios hacen clic en los botones de un toque o de copiar código es el del componente de botón. Deberían ser el mismo en la mayoría de los casos.

### Mensaje de plantilla con variables

En este caso, tienes una **[Plantilla de utilidad con variables en el cuerpo](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#utility-template-with-variables-in-body)**, y envías un mensaje de plantilla:

* Contiene texto con 3 variables en el cuerpo.

![example-template-body.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-template-body.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "order_confirmation",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "ORDER-TITLE"
          },
          {
            "type": "text",
            "text": "9.9 USD"
          },
          {
            "type": "text",
            "text": "February 25"
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío de la solicitud, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarda `id` y correlaciona los eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Asegúrate de que la plantilla correspondiente haya sido aprobada.
* **Configura el `type` adecuado para los mensajes que envíes. En este caso, `type` se establece en `template`, y el `components` y `parameters` de la solicitud de mensajería deben coincidir con la plantilla.**

### Mensaje de plantilla con imagen y botones de respuesta rápida

En este caso, tienes una **[Plantilla de marketing con imagen y botones de respuesta rápida](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#marketing-template-with-image-and-quick-reply-buttons)**, y envías un mensaje de plantilla:

* Contiene una imagen en el encabezado.
* Contiene texto con 1 variable en el cuerpo.
* Contiene texto en el pie de página.
* Contiene 2 botones de respuesta rápida. El número máximo de botones de respuesta rápida es 3.

![example-template-quickreply.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-template-quickreply.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "marketing_friday",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Lucy"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": 0,
        "parameters": [
          {
            "type": "payload",
            "payload": "more_about_marketing_friday"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": 1,
        "parameters": [
          {
            "type": "payload",
            "payload": "unsubscribe_marketing_notifications"
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío de la solicitud, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarda `id` y correlaciona los eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* El parámetro `caption` (utilizado para describir el archivo multimedia `image`, `video` o `document` especificado) no es compatible con mensajes `template` o `interactive`.
* Para obtener más información sobre las limitaciones de archivos multimedia en el encabezado, consulta [Tipos de archivos multimedia compatibles](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types).
* Usa `payload` para rastrear los clics de los usuarios en los botones. El payload del botón no es visible, pero se incluirá cuando un usuario haga clic en un botón; consulta también [Mensaje de botón de plantilla entrante](/es/api-reference/guides/examples/webhook-examples/whatsapp-inbound-message-webhook-examples#inbound-template-button-message).

### Plantilla de mensaje con video y botones de llamada a la acción

En este caso, tienes una **[plantilla de marketing con video y botones de llamada a la acción](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#marketing-template-with-video-and-call-to-action-buttons)**, y envías una plantilla de mensaje:

* Contiene un video en el encabezado.
* Contiene texto con 1 variable en el cuerpo.
* Contiene texto en el pie de página.
* Contiene 2 botones de llamada a la acción: 1 botón `PHONE_NUMBER` y 1 botón `URL`. El botón `URL` puede tener como máximo 1 variable al final de la URL.

![example-template-calltoaction.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-template-calltoaction.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "marketing_friday_more",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "video",
            "video": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.mp4"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "The Friday"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": 0,
        "parameters": [
          {
            "type": "text",
            "text": "qptHJVK2EjU"
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacena `id` y correlaciona eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* El parámetro `caption` (utilizado para describir el archivo multimedia `image`, `video` o `document` especificado) no es compatible con mensajes `template` o `interactive`.

### Plantilla de mensaje de cupón

En este caso, tienes una **[plantilla de cupón](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#coupon-template)**, y envías una plantilla de mensaje:

* Contiene texto con 2 variables en el cuerpo.
* Contiene 1 botón Copiar código.

![example-messaging-coupon.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-coupon.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "marketing_coupon",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Tom"
          },
          {
            "type": "text",
            "text": "25OFF"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "copy_code",
        "index": 0,
        "parameters": [
          {
            "type": "coupon_code",
            "coupon_code": "25OFF"
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacena `id` y correlaciona eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Los códigos de cupón están limitados a 15 caracteres.
* El texto del botón no se puede personalizar.

### Plantilla de mensaje de ubicación

En este caso, tienes una **[plantilla de ubicación](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#location-template)**, y envías una plantilla de mensaje de ubicación:

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "location_header",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "location",
            "location": {
              "latitude": 37.483307,
              "longitude": 122.148981,
              "name": "Pablo Morales",
              "address": "1 Hacker Way, Menlo Park, CA 94025"
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacena `id` y correlaciona eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* `latitude` y `longitude` son obligatorios.

### Plantilla de mensaje de oferta por tiempo limitado

En este caso, tienes una **[plantilla de oferta por tiempo limitado](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#limited-time-offer-template)**, y envías una plantilla de mensaje de oferta por tiempo limitado (LTO):

* Contiene una imagen en el encabezado.
* Muestra fechas de vencimiento y temporizadores de cuenta regresiva para el código de oferta.
* Contiene texto con 2 variables en el cuerpo.
* Contiene 2 botones: 1 botón `COPY_CODE` y 1 botón `URL`.

![example-messaging-carousel.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-limitedtimeoffer.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "limited_time_offer_caribbean_pkg_2023",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
            }
          }
        ]
      },
      {
        "type": "limited_time_offer",
        "parameters": [
          {
            "type": "limited_time_offer",
            "limited_time_offer": {
              "expiration_time_ms": 1698118200000
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Tom"
          },
          {
            "type": "text",
            "text": "C025"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "copy_code",
        "index": "0",
        "parameters": [
          {
            "type": "coupon_code",
            "coupon_code": "C025"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "1",
        "parameters": [
          {
            "type": "text",
            "text": "param025"
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacena `id` y correlaciona eventos posteriores de `whatsapp.message.updated`.

#### Explicación

Haz coincidir los campos de la solicitud con el tipo de mensaje seleccionado y usa el ID de mensaje devuelto para la correlación de estados.

### Plantilla de mensaje de carrusel

En este caso, tienes una **[plantilla de carrusel](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#carousel-template)**, y envías una plantilla de mensaje de carrusel:

* Contiene texto con 2 variables en el cuerpo.
* Contiene 2 tarjetas de carrusel en una vista con desplazamiento horizontal.

![example-messaging-carousel.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-carousel.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "summer_carousel_promo_2023",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "C015"
          },
          {
            "type": "text",
            "text": "15%"
          }
        ]
      },
      {
        "type": "carousel",
        "cards": [
          {
            "card_index": 0,
            "components": [
              {
                "type": "header",
                "parameters": [
                  {
                    "type": "image",
                    "image": {
                      "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
                    }
                  }
                ]
              },
              {
                "type": "body",
                "parameters": [
                  {
                    "type": "text",
                    "text": "C015"
                  },
                  {
                    "type": "text",
                    "text": "15%"
                  }
                ]
              },
              {
                "type": "button",
                "sub_type": "quick_reply",
                "index": 0,
                "parameters": [
                  {
                    "type": "payload",
                    "payload": "summer_lemons_2023"
                  }
                ]
              },
              {
                "type": "button",
                "sub_type": "url",
                "index": 1,
                "parameters": [
                  {
                    "type": "text",
                    "text": "summer_lemons_2023"
                  }
                ]
              }
            ]
          },
          {
            "card_index": 1,
            "components": [
              {
                "type": "header",
                "parameters": [
                  {
                    "type": "image",
                    "image": {
                      "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
                    }
                  }
                ]
              },
              {
                "type": "body",
                "parameters": [
                  {
                    "type": "text",
                    "text": "20OFFEXOTIC"
                  },
                  {
                    "type": "text",
                    "text": "20%"
                  }
                ]
              },
              {
                "type": "button",
                "sub_type": "quick_reply",
                "index": 0,
                "parameters": [
                  {
                    "type": "payload",
                    "payload": "summer_blues_2023"
                  }
                ]
              },
              {
                "type": "button",
                "sub_type": "url",
                "index": 1,
                "parameters": [
                  {
                    "type": "text",
                    "text": "summer_blues_2023"
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacena `id` y correlaciona eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Las burbujas de mensaje son de solo texto y admiten variables. No hay límite máximo de caracteres en las variables, pero cuentan para el límite de 1024 caracteres de la burbuja de mensaje.
* El texto del cuerpo de la tarjeta admite variables. No hay límite máximo de caracteres en las variables, pero cuentan para el límite de 160 caracteres del texto del cuerpo de la tarjeta.

### Plantilla de mensaje de catálogo

En este caso, tienes una [plantilla de catálogo](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#catalog-template), y envías un mensaje para compartir tu catálogo de productos con los clientes.

![example-messaging-catalog.webp](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-catalog.webp)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "intro_catalog_offer",
    "language": {
      "code": "{{LANGUAGE-CODE}}"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "100"
          },
          {
            "type": "text",
            "text": "400"
          },
          {
            "type": "text",
            "text": "3"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "catalog",
        "index": 0,
        "parameters": [
          {
            "type": "action",
            "action": {
              "thumbnail_product_retailer_id": "2lc20305pt"
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacena `id` y correlaciona eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* `thumbnail_product_retailer_id` es opcional. El número de SKU está etiquetado como Identificador de contenido en el [Administrador de ventas](https://business.facebook.com/commerce/). La miniatura de este artículo se utilizará como la imagen de encabezado del mensaje. Si se omite el objeto `parameters`, se utilizará la imagen de producto del primer artículo de tu catálogo.

### Plantilla de mensaje MPM

En este caso, tienes una [plantilla MPM](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#multi-product-message-template), y envías un mensaje para compartir productos con los clientes.

Este ejemplo envía una plantilla aprobada llamada "abandoned\_cart" e inyecta una variable (el nombre del cliente) en el encabezado de la plantilla y un código de descuento en el cuerpo de la plantilla. También define dos secciones ("Popular Bundles" y "Premium Packages") e identifica los productos (un total de 3) que deben inyectarse en esas secciones.

![example-messaging-mpm.webp](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-mpm.webp)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "abandoned_cart",
    "language": {
      "code": "{{LANGUAGE-CODE}}"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "text",
            "text": "Pablo"
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "10OFF"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "mpm",
        "index": 0,
        "parameters": [
          {
            "type": "action",
            "action": {
              "thumbnail_product_retailer_id": "2lc20305pt",
              "sections": [
                {
                  "title": "Popular Bundles",
                  "product_items": [
                    {
                      "product_retailer_id": "2lc20305pt"
                    },
                    {
                      "product_retailer_id": "nseiw1x3ch"
                    }
                  ]
                },
                {
                  "title": "Premium Packages",
                  "product_items": [
                    {
                      "product_retailer_id": "n6k6x0y7oe"
                    }
                  ]
                }
              ]
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarda `id` y correlaciona los eventos `whatsapp.message.updated` posteriores.

#### Explicación

* Los clientes deben usar WhatsApp v2.22.24 o superior.
* Los mensajes de plantilla MPM no se pueden reenviar a otros clientes.
* Cuando un cliente agrega uno o más productos a su carrito y envía un pedido, te enviaremos un Webhook que describe el pedido. Consulta también [Mensaje de pedido entrante](/es/api-reference/guides/examples/webhook-examples/whatsapp-inbound-message-webhook-examples#inbound-order-message).

### Mensaje de plantilla de Flow

[WhatsApp Flows](https://developers.facebook.com/docs/whatsapp/flows) es una forma de crear interacciones estructuradas para la mensajería empresarial. Con Flows, las empresas pueden definir, configurar y personalizar mensajes con interacciones enriquecidas que brindan a los clientes más estructura en la forma en que se comunican.

![example-flow-intro.webp](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-flow-intro.png)

En este caso, envías un mensaje con una [plantilla de Flow](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#flow-template):

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "TEMPLATE_NAME",
    "language": {
      "code": "{{LANGUAGE-CODE}}"
    },
    "components": [
      {
        "type": "button",
        "sub_type": "flow",
        "index": 0,
        "parameters": [
          {
            "type": "action",
            "action": {
              "flow_token": "<FLOW_TOKEN>",
              "flow_action_data": {
                "data1": "value1"
              }
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarda `id` y correlaciona los eventos `whatsapp.message.updated` posteriores.

#### Explicación

* `flow_action_data` es el objeto JSON con la carga útil de datos para la primera pantalla. Consulta también [Enviar plantilla con Flow - WhatsApp Business Platform](https://developers.facebook.com/docs/whatsapp/flows/guides/sendingaflow#send-template-with-flow).
* Para enviar un mensaje interactivo con un Flow, consulta [Mensaje interactivo de Flow](/es/api-reference/guides/examples/api-examples/whatsapp-messaging-examples#interactive-flow-message).
* Para recibir la respuesta del Flow, consulta [Mensaje interactivo entrante de respuesta de Flow](/es/api-reference/guides/examples/webhook-examples/whatsapp-inbound-message-webhook-examples#inbound-interactive-flow-response-message).

### Mensaje de plantilla de detalles del pedido

El mensaje de plantilla de detalles del pedido permite a las empresas enviar mensajes de detalles del pedido como parámetros predefinidos del componente de botón de llamada a la acción `Open order details`. Permite a las empresas enviar cualquier integración de pago (como [UPI Intent](https://developers.facebook.com/docs/whatsapp/cloud-api/payments-api/payments-in/upi-intent), [Payment Gateway](https://developers.facebook.com/docs/whatsapp/cloud-api/payments-api/payments-in/pg) o [Payment Links](https://developers.facebook.com/docs/whatsapp/cloud-api/payments-api/payments-in/payment-links)) como parámetros de botón.

A continuación se muestra un ejemplo de envío de Payment Gateway en los parámetros del mensaje de plantilla de detalles del pedido para solicitar al consumidor que realice un pago.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "order_details_example",
    "language": {
      "policy": "deterministic",
      "code": "{{LANGUAGE-CODE}}"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "text",
            "text": "<HEADER_TEXT>",
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "order_details",
        "index": 0,
        "parameters": [
          {
            "type": "action",
            "action": {
              "order_details": {
                "currency": "INR",
                "order": {
                  "discount": {
                    "offset": 100,
                    "value": 250
                  },
                  "items": [
                    {
                      "amount": {
                        "offset": 100,
                        "value": 400
                      },
                      "name": "<ORDER_ITEM_NAME>",
                      "quantity": 1,
                      "retailer_id": "<ORDER_ITEM_RETAILER_ID>",
                      "country_of_origin": "<ORIGIN_COUNTRY>",
                      "importer_name": "<IMPORTER_NAME>",
                      "importer_address": {
                        "address_line1": "<IMPORTER_ADDRESS>",
                        "city": "<CITY>",
                        "country_code": "<COUNTRY>",
                        "postal_code": "<ZIP_CODE>"
                      }
                    }
                  ],
                  "shipping": {
                    "offset": 100,
                    "value": 0
                  },
                  "status": "pending",
                  "subtotal": {
                    "offset": 100,
                    "value": 400
                  },
                  "tax": {
                    "offset": 100,
                    "value": 500
                  }
                },
                "payment_settings": [
                  {
                    "type": "payment_gateway",
                    "payment_gateway": {
                      "type": "billdesk",
                      "configuration_name": "<payment-config-id>",
                      "billdesk": {
                        "additional_info1": "additional_info1-value",
                        "additional_info2": "additional_info2-value",
                        "additional_info3": "additional_info3-value",
                        "additional_info4": "additional_info4-value",
                        "additional_info5": "additional_info5-value",
                        "additional_info6": "additional_info6-value",
                        "additional_info7": "additional_info7-value",
                      }
                    }
                  }
                ],
                "reference_id": "<reference_id_value>",
                "total_amount": {
                  "offset": 100,
                  "value": 650
                },
                "type": "digital-goods"
              }
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarda `id` y correlaciona los eventos `whatsapp.message.updated` posteriores.

#### Explicación

* Para obtener más información sobre los parámetros de `template`, consulta también [Envío de mensajes de plantilla de detalles del pedido](https://developers.facebook.com/docs/whatsapp/cloud-api/payments-api/payments-in/orderdetailstemplate#sending-order-details-template-message).
* Antes de poder enviar mensajes de plantilla de detalles del pedido, crea una [plantilla de detalles del pedido](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#order-details-template).
* Se te notificará a través de webhooks cuando el cliente lo intente y el estado del pago cambie. Consulta [Transacción de pago actualizada](/es/api-reference/guides/examples/webhook-examples/whatsapp-payment-updated-webhook-examples).
* Si no han pasado más de 24 horas desde la última vez que el cliente respondió al número de teléfono de tu empresa, también puedes enviar un [mensaje interactivo de detalles del pedido](/es/api-reference/guides/examples/api-examples/whatsapp-messaging-examples#interactive-order-details-message) en su lugar.

### Mensaje de plantilla de estado del pedido

La plantilla de estado del pedido es una de las plantillas de mensajes interactivos que amplía el botón de llamada a la acción para admitir la actualización del estado del pedido a través de una plantilla. Permite a las empresas actualizar el estado del pedido fuera de la ventana de sesión del cliente en casos de uso como el cobro a la tarjeta por un pedido anterior y la actualización sobre el envío de un pedido realizado en el pasado.

Al recibir las señales de pago, las empresas deben actualizar el estado del pedido para mantener al usuario al día. Actualmente admitimos los siguientes valores de estado del pedido.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "order_status_template",
    "language": {
      "policy": "deterministic",
      "code": "{{LANGUAGE-CODE}}"
    },
    "components": [
      {
        "type": "order_status",
        "parameters": [
          {
            "type": "order_status",
            "order_status": {
              "reference_id": "<reference_id_value>",
              "order": {
                "status": "processing | partially_shipped | shipped | completed | canceled",
                "description": "<OPTIONAL_DESCRIPTION>"
              }
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarda `id` y correlaciona los eventos `whatsapp.message.updated` posteriores.

#### Explicación

* Para obtener más información sobre los parámetros de `template`, consulta también [Envío de mensajes de plantilla de estado del pedido](https://developers.facebook.com/docs/whatsapp/cloud-api/payments-api/payments-in/orderstatustemplate#sending-order-status-template-message).
* Antes de poder enviar mensajes de plantilla de estado del pedido, crea una [plantilla de estado del pedido](/es/api-reference/guides/examples/api-examples/whatsapp-template-creation-examples#order-status-template).
* Si no han pasado más de 24 horas desde la última vez que el cliente respondió al número de teléfono de tu empresa, también puedes enviar un [mensaje interactivo de estado del pedido](/es/api-reference/guides/examples/api-examples/whatsapp-messaging-examples#interactive-order-status-message) en su lugar.

<br />

***

<br />

## Ejemplos de mensajes de formato libre

Los siguientes ejemplos son mensajes de formato libre. Estos mensajes no requieren una plantilla preaprobada y se pueden enviar directamente. Sin embargo, solo se pueden enviar dentro de la ventana de atención al cliente de 24 horas, que comienza a partir del mensaje más reciente del cliente.

<br />

### Mensaje de texto

En este caso, envías un mensaje de texto:

* Contiene solo texto sin formato.
* Contiene una URL e incluye un cuadro de vista previa en los mensajes de texto al establecer `preview_url` en `true`.
* Especifica un mensaje (`context.message_id`) al que respondes.

![example-messaging-text.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-text.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "text",
  "text": {
    "body": "*Learn* how to format your messages: https://faq.whatsapp.com/539178204879377",
    "preview_url": true
  },
  "context": {
    "message_id": "wamid.BgNODYxN..."
  }
}'
```

#### Respuesta

Una solicitud correcta devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* **Solo puede enviar mensajes de plantilla antes de que el cliente responda a su mensaje.**
* Use `context.message_id` para especificar un mensaje al que responder. Tenga en cuenta que es el ID del mensaje original en la plataforma de WhatsApp, que comienza con `wamid.`, no el ID del mensaje en YCloud. El `wamid` se puede encontrar tanto en el objeto `whatsappMessage` de YCloud (cuando el estado cambia a `sent`) como en el objeto `whatsappInboundMessage`. Esta función también se aplica a otros tipos de mensajes, excepto los mensajes `template` e `sticker`.
* El cuerpo del mensaje de WhatsApp admite formato de texto, como *Cursiva*, **Negrita**, ~~Tachado~~, Monoespaciado, Lista con viñetas, Lista numerada, Cita y Código en línea. Consulte también [**Cómo dar formato a sus mensajes**](https://faq.whatsapp.com/539178204879377).

### Mensaje de imagen

En este caso, envía un mensaje de imagen:

* Contiene una URL de imagen.
* Contiene un pie de foto para describir la imagen.

![example-messaging-image.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-image.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "image",
  "image": {
    "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg",
    "caption": "Describes the specified media."
  }
}'
```

#### Respuesta

Una solicitud correcta devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Tipos de imagen admitidos: `image/jpeg`, `image/png`. Las imágenes deben ser de 8 bits, RGB o RGBA.
* Se requiere un perfil de color incrustado. Consulte también [Cómo incrustar el perfil](https://digital-photography-school.com/choose-right-color-profile-sharing-images-online/#how-to-embed-the-profile), [Incrustar un perfil de color en Adobe Photoshop](https://helpx.adobe.com/photoshop/using/working-with-color-profiles.html#Embedacolorprofile).
* Límite de tamaño de imagen: 5MB.
* Consulte también [Tipos de medios admitidos](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types).

### Mensaje de video

En este caso, envía un mensaje de video:

* Contiene una URL de video.
* Contiene un pie de foto para describir el video.

![example-messaging-video.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-video.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "video",
  "video": {
    "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.mp4",
    "caption": "Describes the specified media."
  }
}'
```

#### Respuesta

Una solicitud correcta devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Tipos de video admitidos: `video/mp4`, `video/3gpp`.
  * Solo se admiten el códec de video H.264 y el códec de audio AAC.
  * Admitimos videos con una sola pista de audio o sin pista de audio.
  * El [formato de archivo MP4](https://en.wikipedia.org/wiki/MP4_file_format) se deriva del [formato de archivo de medios base ISO](https://en.wikipedia.org/wiki/ISO_base_media_file_format), que se deriva directamente del [formato de archivo QuickTime](https://en.wikipedia.org/wiki/QuickTime_File_Format) desarrollado por [Apple](https://www.apple.com). **Pero los archivos de video QuickTime no son compatibles, incluso si cambió el nombre de la extensión del archivo de`.mov` a `.mp4`.**
* Límite de tamaño de video: 16MB.
* Consulte también [Tipos de medios admitidos](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types).

### Mensaje de audio

En este caso, envía un mensaje de audio:

* Contiene una URL de audio.

![example-messaging-audio.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-audio.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "audio",
  "audio": {
    "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.mp3"
  }
}'
```

#### Respuesta

Una solicitud correcta devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Tipos de audio admitidos: `audio/aac`, `audio/mp4`, `audio/mpeg`, `audio/amr`, `audio/ogg` (solo códecs opus; no se admite `audio/ogg` base).
* Límite de tamaño de audio: 16MB.
* Consulte también [Tipos de medios admitidos](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types).
* `caption` se puede utilizar para mensajes multimedia de `image`, `video` y `document`, pero no se admite para mensajes de audio.

### Mensaje de documento

En este caso, envía un mensaje de documento:

* Contiene una URL de documento.
* Contiene un pie de foto para describir el documento.
* Especifica el nombre de archivo del documento.

![example-messaging-document.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-document.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "document",
  "document": {
    "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.pdf",
    "caption": "Describes the specified media.",
    "filename": "Sample.pdf"
  }
}'
```

#### Respuesta

Una solicitud correcta devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Tipos de documentos admitidos: `text/plain`, `application/pdf`, `application/vnd.ms-powerpoint`, `application/msword`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.openxmlformats-officedocument.presentationml.presentation`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`.
* Límite de tamaño de documento: 100MB.
* Consulte también [Tipos de medios admitidos](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types).
* `filename` solo se admite para mensajes de documento, no es compatible con ningún otro mensaje multimedia.

### Mensaje de sticker

En este caso, envía un mensaje de sticker:

* Contiene una URL de sticker.

![example-messaging-sticker.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-sticker.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "sticker",
  "sticker": {
    "link": "https://whatsticker.online/stickers_asset/ws-pack-196906m7W4ngr/c8e072f92595.webp"
  }
}'
```

#### Respuesta

Una solicitud correcta devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Tipos de stickers admitidos: `image/webp`. Dimensión esperada: 512x512.
* Límite de tamaño de sticker: 100KB para stickers estáticos y 500KB para stickers animados.
* Consulte también [Tipos de medios admitidos](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types).

### Mensaje de contactos

En este caso, envía un mensaje de contactos:

* Contiene 1 contacto con direcciones, fecha de nacimiento, correos electrónicos, nombre, teléfonos, etc.

![example-messaging-contacts.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-contacts.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "contacts",
  "contacts": [
    {
      "addresses": [
        {
          "street": "<ADDRESS_STREET>",
          "city": "<ADDRESS_CITY>",
          "state": "<ADDRESS_STATE>",
          "zip": "<ADDRESS_ZIP>",
          "country": "<ADDRESS_COUNTRY>",
          "country_code": "<ADDRESS_COUNTRY_CODE>",
          "type": "HOME"
        }
      ],
      "birthday": "2001-01-01",
      "emails": [
        {
          "email": "joe@example.com",
          "type": "WORK"
        }
      ],
      "name": {
        "formatted_name": "<CONTACT_FORMATTED_NAME>",
        "first_name": "<CONTACT_FIRST_NAME>",
        "last_name": "<CONTACT_LAST_NAME>",
        "middle_name": "<CONTACT_MIDDLE_NAME>",
        "suffix": "<CONTACT_SUFFIX>",
        "prefix": "<CONTACT_PREFIX>"
      },
      "org": {
        "company": "<CONTACT_ORG_COMPANY>",
        "department": "<CONTACT_ORG_DEPARTMENT>",
        "title": "<CONTACT_ORG_TITLE>"
      },
      "phones": [
        {
          "phone": "+447901614024",
          "wa_id": "447901614024",
          "type": "WORK"
        }
      ],
      "urls": [
        {
          "url": "<CONTACT_URL>",
          "type": "WORK"
        }
      ]
    }
  ]
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* `contacts[].name.formatted_name` es obligatorio.

### Mensaje de ubicación

En este caso, envía un mensaje de ubicación:

* Contiene la latitud y la longitud del lugar.
* Contiene el nombre y la dirección del lugar.

![example-messaging-location.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-location.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "location",
  "location": {
    "latitude": 1.40435,
    "longitude": 103.79304,
    "name": "Singapore Zoo",
    "address": "80 Mandai Lake Road Singapore 72"
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* `latitude` y `longitude` son obligatorios.

### Mensaje de reacción

En este caso, envía un mensaje de reacción con emoji:

* Contiene el ID del mensaje mencionado.
* Contiene un emoji.

![](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaing-reaction.png)<br />
Da un pulgar hacia arriba a un mensaje enviado o recibido anteriormente.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "reaction",
  "reaction": {
    "message_id": "wamid.BgNODYxN...",
    "emoji": "👍"
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* El `message_id` es el ID del mensaje original en la plataforma de WhatsApp, que comienza con `wamid.`.
* Establezca `emoji` en `""` si desea eliminar el emoji.
* Los mensajes de reacción no admiten confirmaciones de lectura.

### Mensaje de lista interactiva

En este caso, envía un mensaje de lista interactiva:

* Contiene texto de encabezado, texto de cuerpo y texto de pie de página.
* Establece el `interactive.type` en `list` y contiene un botón con 2 secciones, y cada sección tiene 2 filas.

![example-messaging-interactivelist.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-interactivelist.png)

El destinatario puede seleccionar un elemento de la lista haciendo clic en el botón:<br />
![](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-interactivelist-select.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "<HEADER_TEXT>"
    },
    "body": {
      "text": "<BODY_TEXT>"
    },
    "footer": {
      "text": "<FOOTER_TEXT>"
    },
    "action": {
      "button": "<BUTTON_TEXT>",
      "sections": [
        {
          "title": "<LIST_SECTION_1_TITLE>",
          "rows": [
            {
              "id": "<LIST_SECTION_1_ROW_1_ID>",
              "title": "<SECTION_1_ROW_1_TITLE>",
              "description": "<SECTION_1_ROW_1_DESC>"
            },
            {
              "id": "<LIST_SECTION_1_ROW_2_ID>",
              "title": "<SECTION_1_ROW_2_TITLE>",
              "description": "<SECTION_1_ROW_2_DESC>"
            }
          ]
        },
        {
          "title": "<LIST_SECTION_2_TITLE>",
          "rows": [
            {
              "id": "<LIST_SECTION_2_ROW_1_ID>",
              "title": "<SECTION_2_ROW_1_TITLE>",
              "description": "<SECTION_2_ROW_1_DESC>"
            },
            {
              "id": "<LIST_SECTION_2_ROW_2_ID>",
              "title": "<SECTION_2_ROW_2_TITLE>",
              "description": "<SECTION_2_ROW_2_DESC>"
            }
          ]
        }
      ]
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Para mensajes interactivos `list`, debe configurar un botón y definir de 1 a 10 secciones. Puede tener un total de 10 filas entre todas sus secciones.

### Mensaje de botones interactivos

En este caso, envía un mensaje de botones interactivos:

* Contiene texto de cuerpo.
* Establece el `interactive.type` en `button` y contiene 2 botones de respuesta rápida.

![](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-interactivebutton.png)<br />
El destinatario puede hacer clic en cualquiera de los botones para responderle con un mensaje.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "body": {
      "text": "<BUTTON_TEXT>"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "<UNIQUE_BUTTON_ID_1>",
            "title": "<BUTTON_TITLE_1>"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "<UNIQUE_BUTTON_ID_2>",
            "title": "<BUTTON_TITLE_2>"
          }
        }
      ]
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Para mensajes interactivos `buttons`, debe configurar un máximo de 3 botones de respuesta rápida.

### Mensaje interactivo con URL de CTA

En este caso, envía un mensaje interactivo con un botón de llamada a la acción (CTA) de URL:

* Contiene texto de encabezado, cuerpo y pie de página.
* Contiene un botón de URL.

![example-messaging-interactiveurl.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-interactiveurl.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "cta_url",
    "header": {
      "type": "image",
      "image": {
        "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
      }
    },
    "body": {
      "text": "<BODY_TEXT>"
    },
    "footer": {
      "text": "<FOOTER_TEXT>"
    },
    "action": {
      "name": "cta_url",
      "parameters": {
        "display_text": "See Docs",
        "url": "https://developers.facebook.com/docs/whatsapp"
      }
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* El texto del botón requiere una longitud de como máximo 20 bytes.
* `body` y `action` son obligatorios. `header` y `footer` son opcionales.

### Mensaje interactivo de un solo producto

En este caso, envía un mensaje interactivo de producto:

* Contiene texto de cuerpo y texto de pie de página.
* Establece el `interactive.type` en `product` y contiene una acción con información del producto.

![example-messaging-product.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-product.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "product",
    "body": {
      "text": "<OPTIONAL_BODY_TEXT>"
    },
    "footer": {
      "text": "<OPTIONAL_FOOTER_TEXT>"
    },
    "action": {
      "catalog_id": "367025965434465",
      "product_retailer_id": "<ID_TEST_ITEM_1>"
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Para obtener el ID de producto y de catálogo, vaya a [Meta Commerce Manager](https://business.facebook.com/commerce/).
* Consulte también [Share Products With Customers](https://developers.facebook.com/docs/whatsapp/guides/commerce-guides/share-products-with-customers).

### Mensaje interactivo de múltiples productos

En este caso, envía un mensaje interactivo de lista de productos:

* Contiene texto de cuerpo y texto de pie de página.
* Establece el `interactive.type` en `product_list` y contiene múltiples productos.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "product_list",
    "header": {
      "type": "text",
      "text": "<YOUR_TEXT_HEADER_CONTENT>"
    },
    "body": {
      "text": "<YOUR_TEXT_BODY_CONTENT>"
    },
    "footer": {
      "text": "<YOUR_TEXT_FOOTER_CONTENT>"
    },
    "action": {
      "catalog_id": "146265584024623",
      "sections": [
        {
          "title": "<SECTION1_TITLE>",
          "product_items": [
            {
              "product_retailer_id": "<YOUR_PRODUCT1_SKU_IN_CATALOG>"
            },
            {
              "product_retailer_id": "<YOUR_SECOND_PRODUCT1_SKU_IN_CATALOG>"
            }
          ]
        },
        {
          "title": "<SECTION2_TITLE>",
          "product_items": [
            {
              "product_retailer_id": "<YOUR_PRODUCT2_SKU_IN_CATALOG>"
            },
            {
              "product_retailer_id": "<YOUR_SECOND_PRODUCT2_SKU_IN_CATALOG>"
            }
          ]
        }
      ]
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Para obtener el ID de producto y de catálogo, vaya a [Meta Commerce Manager](https://business.facebook.com/commerce/).

### Mensaje interactivo de catálogo

Los mensajes de catálogo son mensajes de formato libre que le permiten mostrar su catálogo de productos íntegramente dentro de WhatsApp.

Los mensajes de catálogo muestran una imagen de encabezado en miniatura del producto que elija, texto de cuerpo personalizado, un encabezado de texto fijo, un subencabezado de texto fijo y un botón **View catalog** .

![example-messaging-interactivecatalog.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-interactivecatalog.png)

Cuando un cliente toca el botón **View catalog** , su catálogo de productos aparece dentro de WhatsApp.

![example-messaging-catalog-view.webp](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-catalog-view.webp)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "catalog_message",
    "body": {
      "text": "Hello! Thanks for your interest. Ordering is easy. Just visit our catalog and add items to purchase."
    },
    "action": {
      "name": "catalog_message",
      "parameters": {
        "thumbnail_product_retailer_id": "2lc20305pt"
      }
    },
    "footer": {
      "text": "Best grocery deals on WhatsApp!"
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Debe tener [inventario subido a Meta](https://developers.facebook.com/docs/whatsapp/cloud-api/guides/sell-products-and-services/upload-inventory) en un catálogo de comercio electrónico [conectado a su cuenta de WhatsApp Business](https://www.facebook.com/business/help/158662536425974).
* Habilite el carrito de compras y el catálogo de productos por cada número de teléfono comercial. De forma predeterminada, el carrito de compras está habilitado y el ícono de la tienda está oculto para todos los números de teléfono comercial asociados con una cuenta de WhatsApp Business. Utilice el endpoint [Actualizar configuración de comercio](https://docs.ycloud.com/reference/whatsapp_phone_number-update-commerce-settings) para habilitar o deshabilitar estas funciones.

### Mensaje interactivo de solicitud de ubicación

Los mensajes de solicitud de ubicación son mensajes de formato libre que muestran un **texto del cuerpo** y un **botón para enviar ubicación**. Cuando un usuario de WhatsApp toca el botón, aparece una pantalla para compartir la ubicación que el usuario puede usar para compartir su ubicación.

![example-messaging-location-request-sharing-response.png](https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/example-messaging-localtion-request-sharing-response.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "location_request_message",
    "body": {
      "text": "<BODY_TEXT>"
    },
    "action": {
      "name": "send_location"
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* El texto del cuerpo (es decir, `interactive.body`) es obligatorio y tiene una longitud máxima de 1024 caracteres. El encabezado y el pie de página no son compatibles.
* Una vez que el usuario comparte su ubicación, se activa un webhook de `whatsapp.inbound_message.received` que contiene los detalles de ubicación del usuario. Consulte también [Mensaje de ubicación entrante](/es/api-reference/guides/examples/webhook-examples/whatsapp-inbound-message-webhook-examples#inbound-location-message).

### Mensaje interactivo de Flow

Puede enviar un mensaje con un Flow en una conversación iniciada por el usuario utilizando un mensaje con una llamada a la acción (CTA):

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Flow message header"
    },
    "body": {
      "text": "Flow message body"
    },
    "footer": {
      "text": "Flow message footer"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.",
        "flow_id": "1",
        "flow_cta": "Book!",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "<SCREEN_ID>",
          "data": {
            "product_name": "name",
            "product_description": "description",
            "product_price": 100
          }
        }
      }
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Para enviar un mensaje con un Flow, hemos introducido un nuevo tipo de objeto `interactive` llamado `flow`. Para obtener más información, consulte [Parámetros de mensajes interactivos](https://developers.facebook.com/docs/whatsapp/flows/guides/sendingaflow#interactive-message-parameters).
* Para enviar un mensaje de plantilla con un Flow, consulte [Mensaje de plantilla de Flow](/es/api-reference/guides/examples/api-examples/whatsapp-messaging-examples#flow-template-message).
* Para recibir respuestas de Flow, consulte [Mensaje entrante de respuesta de Flow interactivo](/es/api-reference/guides/examples/webhook-examples/whatsapp-inbound-message-webhook-examples#inbound-interactive-flow-response-message).

### Mensaje interactivo de detalles del pedido

Un mensaje `order_details` es un nuevo tipo de mensaje `interactive`, que siempre contiene los mismos 4 componentes principales: `header`, `body`, `footer` y `action`. Dentro del componente `action`, la empresa incluye toda la información necesaria para que el cliente complete su pago.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "order_details",
    "header": {
      "type": "image",
      "image": {
        "link": "https://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    },
    "body": {
      "text": "your-text-body-content"
    },
    "footer": {
      "text": "your-text-footer-content"
    },
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "reference_id": "reference-id-value",
        "type": "digital-goods",
        "payment_settings": [
          {
            "type": "payment_gateway",
            "payment_gateway": {
              "type": "billdesk",
              "configuration_name": "payment-config-id",
              "billdesk": {
                "additional_info1": "additional_info1-value",
                "additional_info2": "additional_info2-value",
                "additional_info3": "additional_info3-value",
                "additional_info4": "additional_info4-value",
                "additional_info5": "additional_info5-value",
                "additional_info6": "additional_info6-value",
                "additional_info7": "additional_info7-value",
              }
            }
          }
        ],
        "currency": "INR",
        "total_amount": {
          "value": 21000,
          "offset": 100
        },
        "order": {
          "status": "pending",
          "catalog_id": "the-catalog_id",
          "expiration": {
            "timestamp": "utc_timestamp_in_seconds",
            "description": "cancellation-explanation"
          },
          "items": [
            {
              "retailer_id": "1234567",
              "name": "Product name, for example bread",
              "amount": {
                "value": 10000,
                "offset": 100
              },
              "quantity": 1,
              "sale_amount": {
                "value": 100,
                "offset": 100
              }
            }
          ],
          "subtotal": {
            "value": 20000,
            "offset": 100
          },
          "tax": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "shipping": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "discount": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text",
            "discount_program_name": "optional_text"
          }
        }
      }
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Para obtener más información sobre los parámetros de `interactive`, consulte [Enviar mensaje interactivo de detalles del pedido](https://developers.facebook.com/docs/whatsapp/cloud-api/payments-api/payments-in/pg#step-1).
* Si han pasado más de 24 horas desde la última vez que el cliente respondió a su número de teléfono comercial, envíe en su lugar una [plantilla de mensaje de detalles del pedido](/es/api-reference/guides/examples/api-examples/whatsapp-messaging-examples#order-details-template-message).

### Mensaje interactivo de estado del pedido

Para notificar al cliente sobre actualizaciones de un pedido, puede enviar un mensaje interactivo de tipo order\_status como se muestra a continuación.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "order_status",
    "body": {
      "text": "your-text-body-content"
    },
    "action": {
      "name": "review_order",
      "parameters": {
        "reference_id": "reference-id-value",
        "order": {
          "status": "processing | partially_shipped | shipped | completed | canceled",
          "description": "optional-text"
        }
      }
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

* Para obtener más información sobre los parámetros de `interactive`, consulte [Enviar actualizaciones del estado del pedido](https://developers.facebook.com/docs/whatsapp/cloud-api/payments-api/payments-in/pg#step-4--update-order-status).
* Si han pasado más de 24 horas desde la última vez que el cliente respondió a su número de teléfono comercial, envíe en su lugar una [plantilla de mensaje de detalles del pedido](/es/api-reference/guides/examples/api-examples/whatsapp-messaging-examples#order-status-template-message).
* Se le notificará a través de webhooks cuando el cliente haya intentado y el estado del pago haya cambiado. Consulte [Transacción de pago actualizada](/es/api-reference/guides/examples/webhook-examples/whatsapp-payment-updated-webhook-examples).

### Mensaje interactivo de llamada de voz

La empresa llama a esta API para enviar un mensaje a los consumidores con el fin de dar a conocer la compatibilidad con llamadas mediante un botón integrado en el mensaje. Cuando un consumidor hace clic en ese botón, se inicia una llamada de WhatsApp al número comercial que envió este mensaje. Este comportamiento es el mismo que cuando un consumidor hace clic en el ícono de teléfono/llamada en la barra de título del chat. No se admite que el botón realice una llamada de WhatsApp a un número de teléfono diferente.

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "voice_call",
    "body": {
      "text": "You can call us on WhatsApp now for faster service!"
    },
    "action": {
      "name": "voice_call",
      "parameters": {
        "display_text": "Call on WhatsApp"
      }
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Almacene `id` y correlacione eventos posteriores de `whatsapp.message.updated`.

#### Explicación

Haga coincidir los campos de la solicitud con el tipo de mensaje seleccionado y utilice el ID de mensaje devuelto para la correlación de estados.

### Mensajes interactivos de carrusel multimedia

El mensaje interactivo de carrusel multimedia permite a las empresas enviar tarjetas con desplazamiento horizontal que contienen imágenes o videos, cada una con un botón de llamada a la acción, dentro de las conversaciones de WhatsApp. Este formato permite a los usuarios explorar múltiples ofertas o contenidos en un solo mensaje, brindando una experiencia enriquecida y atractiva a través de las API de WhatsApp Business y los clientes móviles.

* `interactive.type` debe ser `carousel`
* `interactive.action.cards` debe agregar al menos 2 objetos de tarjeta a su mensaje y puede agregar un máximo de 10.
* El tipo de cada tarjeta debe establecerse en `cta_url`
* todas las tarjetas deben tener el mismo tipo de encabezado (`image` o `video`)
* debe agregar un cuerpo de mensaje (`interactive.body`) al mensaje (máx. 1024 caracteres). No se permiten encabezados, pies de página ni botones fuera de las tarjetas.
* debe tener la misma estructura para todas las tarjetas (encabezado, cuerpo, acción).
* el cuerpo de la tarjeta es opcional, pero con un máximo de 160 caracteres y hasta 2 saltos de línea.

![f657ef005148593d05cc1ded201de7731d11b51200fd4900ad2584533ddd282d-interactive\_media\_carousel\_message.jpg](https://files.readme.io/f657ef005148593d05cc1ded201de7731d11b51200fd4900ad2584533ddd282d-interactive_media_carousel_message.jpg)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "carousel",
    "body": {
      "text": "Check out our latest offers!"
    },
    "action": {
      "cards": [
        {
          "card_index": 0,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
            }
          },
          "body": {
            "text": "Exclusive deal #1"
          },
          "action": {
            "name": "cta_url",
            "parameters": {
              "display_text": "Shop now",
              "url": "https://shop.example.com/deal1"
            }
          }
        },
        {
          "card_index": 1,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
            }
          },
          "body": {
            "text": "Exclusive deal #2"
          },
          "action": {
            "name": "cta_url",
            "parameters": {
              "display_text": "Shop now",
              "url": "https://shop.example.com/deal2"
            }
          }
        }
      ]
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarde `id` y correlacione los eventos posteriores de `whatsapp.message.updated`.

#### Explicación

Haga coincidir los campos de la solicitud con el tipo de mensaje seleccionado y utilice el ID del mensaje devuelto para la correlación de estados.

### Mensajes interactivos de carrusel multimedia con botones de respuesta rápida

* Las tarjetas deben incluir un botón de URL o uno o más botones de respuesta rápida. Los tipos y la cantidad de botones deben coincidir en todas las tarjetas (por ejemplo, si define una tarjeta con 2 botones de respuesta rápida, todas las tarjetas deben definir exactamente 2 botones de respuesta rápida).

![a604f0105ba6b8dfa01f317ce10c2cb3961f1564a6cf12c9bede2eac57a11808-carousel\_quick\_reply.png](https://files.readme.io/a604f0105ba6b8dfa01f317ce10c2cb3961f1564a6cf12c9bede2eac57a11808-carousel_quick_reply.png)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "interactive",
  "interactive": {
    "type": "carousel",
    "body": {
      "text": "Check out our latest offers!"
    },
    "action": {
      "cards": [
        {
          "card_index": 0,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
            }
          },
          "body": {
            "text": "Exclusive deal #1"
          },
          "action": {
            "buttons": [
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "learn-zebra-haworthia",
                  "title": "Learn more"
                }
              },
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "fav-zebra-haworthia",
                  "title": "Add to favorites"
                }
              }
            ]
          }
        },
        {
          "card_index": 1,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg"
            }
          },
          "body": {
            "text": "Exclusive deal #2"
          },
          "action": {
            "buttons": [
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "learn-zebra-haworthia",
                  "title": "Learn more"
                }
              },
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "fav-zebra-haworthia",
                  "title": "Add to favorites"
                }
              }
            ]
          }
        }
      ]
    }
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarde `id` y correlacione los eventos posteriores de `whatsapp.message.updated`.

#### Explicación

Haga coincidir los campos de la solicitud con el tipo de mensaje seleccionado y utilice el ID del mensaje devuelto para la correlación de estados.

### Mensaje con botón de pago

Una vez aprobada su plantilla con botón de pago, puede enviarla en una plantilla de mensaje

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "item_back_in_stock_v1",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic",

    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "id": "12312312", <!-- Only if using uploaded media -->
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.jpg" <!-- Only if using hosted media (not recommended) -->
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Nidhi"
          },
          {
            "type": "text",
            "text": "Blue Elf Aloe"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "order_details",
        "index": 0,
        "parameters": [
          {
            "type": "action",
            "action": {
              "order_details": {
                "reference_id": "abc.123_xyz-1",
                "type": "physical-goods",
                "currency": "INR",
                "payment_settings": [
                  {
                    "type": "payment_gateway",
                    "payment_gateway": {
                      "type": "razorpay",
                      "configuration_name": "prod-razor-pay-config-05"
                    }
                  }
                ],
                "shipping_info": {
                  "country": "IN",
                  "addresses": [
                    {
                      "name": "Nidhi Tripathi",
                      "phone_number": "919000090000",
                      "address": "Bandra Kurla Complex",
                      "city": "Mumbai",
                      "state": "Maharastra",
                      "in_pin_code": "400051",
                      "house_number": "12",
                      "tower_number": "5",
                      "building_name": "One BKC",
                      "landmark_area": "Near BKC Circle"
                    }
                  ]
                },
                "order": {
                  "items": [
                    {
                      "amount": {
                        "offset": 100,
                        "value": 200000
                      },
                      "sale_amount": {
                        "offset": 100,
                        "value": 150000
                      },
                      "name": "Blue Elf Aloe",
                      "quantity": 1,
                      "country_of_origin": "India",
                      "importer_name": "Lucky Shrub Imports and Exports",
                      "importer_address": {
                        "address_line1": "One BKC",
                        "address_line2": "Bandra Kurla Complex",
                        "city": "Mumbai",
                        "zone_code": "MH",
                        "postal_code": "400051",
                        "country_code": "IN"
                      }
                    }
                  ],
                  "subtotal": {
                    "offset": 100,
                    "value": 150000
                  },
                  "shipping": {
                    "offset": 100,
                    "value": 20000
                  },
                  "tax": {
                    "offset": 100,
                    "value": 10000
                  },
                  "discount": {
                    "offset": 100,
                    "value": 15000,
                    "description": "Additional 10% off"
                  },
                  "status": "pending",
                  "expiration": {
                    "timestamp": "1726627150"
                  }
                },
                "total_amount": {
                  "offset": 100,
                  "value": 165000
                }
              }
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarde `id` y correlacione los eventos posteriores de `whatsapp.message.updated`.

#### Explicación

Haga coincidir los campos de la solicitud con el tipo de mensaje seleccionado y utilice el ID del mensaje devuelto para la correlación de estados.

### Plantilla de mensaje con GIF

En este caso, envía una plantilla de mensaje con GIF:

* Contiene una URL de GIF.

![d29ea20d56e36017614121fc2079e5c513d6f922c3713a2c963e3dfca7570c0c-Feishu20260128-162503.gif](https://files.readme.io/d29ea20d56e36017614121fc2079e5c513d6f922c3713a2c963e3dfca7570c0c-Feishu20260128-162503.gif)

#### Solicitud

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl 'https://api.ycloud.com/v2/whatsapp/messages/sendDirectly' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: {{YOUR-API-KEY}}' \
-d '{
  "from": "{{BUSINESS-PHONE-NUMBER}}",
  "to": "{{CUSTOMER-PHONE-NUMBER}}",
  "type": "template",
  "template": {
    "name": "marketing_friday_more",
    "language": {
      "code": "{{LANGUAGE-CODE}}",
      "policy": "deterministic"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "gif",
            "gif": {
              "link": "https://oss-ycloud-publicread.oss-ap-southeast-1.aliyuncs.com/api-docs/sample/sample.mp4"
            }
          }
        ]
      }
    ]
  }
}'
```

#### Respuesta

Una solicitud exitosa devuelve el objeto de mensaje de YCloud. Un estado inicial `accepted` confirma el envío, no la entrega final.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "MESSAGE_ID",
  "status": "accepted"
}
```

Guarde `id` y correlacione los eventos posteriores de `whatsapp.message.updated`.

<br />

#### Explicación

Haga coincidir los campos de la solicitud con el tipo de mensaje seleccionado y utilice el ID del mensaje devuelto para la correlación de estados.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.