# WhatsApp API

<figure><img src="/files/9Qmc4XyepVjSOAJ6t6HB" alt=""><figcaption></figcaption></figure>

## API de WhatsApp&#x20;

Esta documentación proporciona información sobre cómo su aplicación puede enviar mensajes de Whatsapp a través de la API utilizando la plataforma Sinch Messaging.

También encontrará información aquí sobre **Webhooks**, que son devoluciones de llamada HTTP definidas por el usuario que se desencadenan por eventos específicos. Cada vez que ocurra un evento desencadenante, la API de Sinch recopilará los datos e inmediatamente enviará una notificación (solicitud HTTP) a la URL elegida por el cliente, actualizando el estado de los mensajes enviados o indicando cuándo recibe un mensaje.

La API Sinch Messaging permite enviar mensajes individuales o por lotes.&#x20;

La API tiene integración REST, utilizando el protocolo HTTP con TLS, soportando el método POST con los parámetros enviados en formato JSON.

## Requisitos previos&#x20;

1. Para utilizar la API de mensajería de Sinch, primero debe tener una cuenta activa en la plataforma de mensajería de Sinch.&#x20;
2. También debe tener un nombre de usuario y un token válidos asociados con esta cuenta.&#x20;
3. Aprenda cómo crear su usuario en nuestra guía Agregar usuarios. Con las credenciales anteriores, puede comenzar a usar Sinch Messaging API.

## **Detalhes da conexão**

<table><thead><tr><th width="282">Campo</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>Hostname</strong></td><td>api-messaging.wavy.global</td></tr><tr><td><strong>Porta</strong></td><td>443 (https)</td></tr><tr><td><strong>Protocolo</strong></td><td>HTTPS (TLS encryption)</td></tr><tr><td><strong>Autenticação</strong></td><td>username + token</td></tr><tr><td><strong>Encoding</strong></td><td>UTF-8</td></tr></tbody></table>

## Realización de llamadas a la API Sinch Messaging&#x20;

Para realizar tus primeras llamadas te recomendamos utilizar la aplicación “Cartero” con solicitudes en formato JSON en lugar de empezar a escribir códigos en otros lenguajes.&#x20;

{% hint style="info" %}
**Nota: Para enviar mensajes de prueba, debe tener una plantilla de mensaje aprobada en su cuenta de WhatsApp Business. Consulte nuestra documentación de** [**creación de plantillas de mensajes de WhatsApp**](/whatsapp/sinch-messaging-platform/template-wa-que-es.md) **para crear sus primeras plantillas.**&#x20;
{% endhint %}

Si aún no tiene ningún modelo de mensaje aprobado, aún puede enviar mensajes de prueba, siempre que el destinatario interactúe con el número de origen.&#x20;

De esta forma, se activará una ventanilla de atención al cliente. Le permite enviar cualquier tipo de mensaje dentro de una ventana de 24 horas. Si el mensaje llega, su solicitud a Sinch Messaging API fue exitosa. De lo contrario, revise su Webhook para ver si hay notificaciones que puedan indicar un problema.

### Mensajes:&#x20;

Las llamadas a la API Sinch Messaging se envían a: \
<https://api-messaging.wavy.global/v1/whatsapp/send> \
en formato POST independientemente del tipo de mensaje, pero el contenido del cuerpo del mensaje JSON varía para cada tipo de mensaje. \
\
Los campos de autenticación en el encabezado también seguirán el mismo formato independientemente del tipo de mensaje:

POST /v1/whatsapp/send HTTP/1.1 \
Host: api-messaging.wavy.global\
UserName: user\_name \
AuthenticationToken: aaaaaa-bbbbbbbbbbbbbXXXXX12 \
Content-Type: application/json

### Envío de plantilla

**Destinations**

<table><thead><tr><th width="188">Nome</th><th width="137.00000000000003">Obligatorio</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>destinations</strong></td><td>Si</td><td>Detalles sobre identificadores de envío y destino</td></tr><tr><td><strong>message</strong></td><td>Si</td><td>Detalles sobre el objeto MESSEGE que se enviará</td></tr></tbody></table>

#### Destination <a href="#enviar-mensajes" id="enviar-mensajes"></a>

<table><thead><tr><th width="188">Nome</th><th width="137.00000000000003">Obligatorio</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>correlationId</strong></td><td>No</td><td>Id definido por el cliente que será devuelto en el estado del mensaje (devolución de llamada). Puede utilizar esta identificación para realizar un seguimiento de los envíos de mensajes de forma personalizada.</td></tr><tr><td><strong>destination</strong></td><td>Sim</td><td>Número de teléfono que recibirá el mensaje (código de país (55 para Brasil) y código de área son obligatorios). Ejemplos: 5519900001111, +5519900001111, +55(19) 900001111.</td></tr></tbody></table>

#### Message <a href="#enviar-mensajes" id="enviar-mensajes"></a>

<table><thead><tr><th width="188">Nome</th><th width="137.00000000000003">Obligatorio</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>TTL</strong></td><td>No</td><td>Vida útil en días. Define el número máximo de días que se debe entregar el mensaje. Válido de 1 a 30. Valor por defecto 7 si no se define</td></tr><tr><td><strong>Template</strong></td><td>Sim</td><td>Detalles sobre el objeto TEMPLATE que se enviará</td></tr></tbody></table>

#### Template <a href="#enviar-mensajes" id="enviar-mensajes"></a>

<table><thead><tr><th width="188">Nome</th><th width="137.00000000000003">Obligatorio</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>Namespace</strong></td><td>Si</td><td>Id. del espacio de nombres que se utilizará. NOTA: Los parámetros namespace y element_name deben coincidir con el Business Manager al que está asociado el número de origen, o el mensaje no se podrá enviar</td></tr><tr><td><strong>ElementName</strong></td><td>Si</td><td>Nombre del modelo registrado y aprobado.</td></tr><tr><td><strong>header</strong></td><td>Sí, cuando la plantilla tiene un parámetro en el encabezado</td><td>Objetos de encabezado con sus parámetros</td></tr><tr><td><strong>LanguageCode</strong></td><td>Si</td><td>Nombre del modelo registrado y aprobado.</td></tr></tbody></table>

#### Header <a href="#enviar-mensajes" id="enviar-mensajes"></a>

<table><thead><tr><th width="188">Nome</th><th width="137.00000000000003">Obligatorio</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>Title</strong></td><td>Opcional</td><td>El título debe tener hasta 60 caracteres.</td></tr><tr><td><strong>Element</strong></td><td>Si</td><td><p>Opções:</p><p>text (padrão),</p><p>image,</p><p>audio, </p><p>document, </p><p>hsm,</p><p>video.</p></td></tr></tbody></table>

#### Element <a href="#enviar-mensajes" id="enviar-mensajes"></a>

<table><thead><tr><th width="188">Nome</th><th width="137.00000000000003">Obligatorio</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>Url</strong></td><td>Si</td><td>URL de medios. Úselo solo con URL HTTP/HTTPS.</td></tr><tr><td><strong>Type</strong></td><td>Si</td><td>Tipo de medio (JPEG, MP3, PDF, etc.)</td></tr><tr><td><strong>Caption</strong></td><td>Si</td><td>nombre de los medios</td></tr></tbody></table>

## **Webhooks**

Los webhooks (o devoluciones de llamada) son devoluciones de llamada HTTP definidas por el usuario que se desencadenan por eventos específicos. Cada vez que ocurra un evento desencadenante, la API de Sinch recopilará los datos e inmediatamente enviará una notificación (solicitud HTTP) a la URL elegida por el cliente, actualizando el estado de los mensajes enviados o indicando cuándo recibe un mensaje.

Cuando el cliente le envía un mensaje, Sinch Messaging API enviará una notificación de solicitud HTTP POST a la URL del **webhook** con los detalles.

Es importante que su **webhook** devuelva una respuesta HTTPS 200 OK a las notificaciones (dentro de 200 ms o de forma asíncrona). De lo contrario, Sinch Messaging API considerará que esta notificación ha fallado y volverá a intentarlo después de un retraso.&#x20;

{% hint style="warning" %}
**Importante: Nuestro equipo de soporte debe configurar la URL donde recibirá los Webhooks.**
{% endhint %}

## **Formato geral de um Webhook**

<table data-header-hidden><thead><tr><th width="182">Nome</th><th>Conteúdo do objeto</th></tr></thead><tbody><tr><td><strong>Nome</strong></td><td><strong>Conteúdo do objeto</strong></td></tr><tr><td><strong>messages</strong></td><td>Notificações de mensagens de entrada</td></tr><tr><td><strong>statuses</strong></td><td>Atualizações de status das mensagens</td></tr></tbody></table>

## Estado

<table><thead><tr><th width="240.33333333333331">Estado</th><th>Descripción</th><th align="center">Equivalente móvil de WhatsApp</th></tr></thead><tbody><tr><td><mark style="color:yellow;"><strong>SENT_SUCCESS</strong></mark></td><td>Mensaje recibido por el servidor de WhatsApp</td><td align="center">una marca de verificación</td></tr><tr><td><mark style="color:green;"><strong>DELIVERED_SUCCESS</strong></mark></td><td>Mensaje entregado al destinatario</td><td align="center">dos marcas de verificación</td></tr><tr><td><mark style="color:blue;"><strong>READ_SUCCESS</strong></mark></td><td>Mensaje leído por el destinatario</td><td align="center">Dos marcas de verificación azules</td></tr></tbody></table>

## Erros

<table data-header-hidden><thead><tr><th width="209">HTTP Code</th><th>Description</th></tr></thead><tbody><tr><td><strong>HTTP Code</strong></td><td><strong>Description</strong></td></tr><tr><td><strong>2xx</strong></td><td><strong>Success</strong></td></tr><tr><td><strong>200</strong></td><td><strong>Success (OK)</strong></td></tr><tr><td><strong>201</strong></td><td><strong>Successfully created (For POST requests)</strong></td></tr><tr><td><strong>302</strong></td><td><strong>Found</strong></td></tr><tr><td><strong>4xx</strong></td><td><strong>Client Errors</strong></td></tr><tr><td><strong>400</strong></td><td><strong>Request was invalid</strong></td></tr><tr><td><strong>401</strong></td><td><strong>Unauthorized</strong></td></tr><tr><td><strong>403</strong></td><td><strong>Forbidden</strong></td></tr><tr><td><strong>404</strong></td><td><strong>Not found</strong></td></tr><tr><td><strong>405</strong></td><td><strong>Method not allowed</strong></td></tr><tr><td><strong>412</strong></td><td><strong>Precondition failed</strong></td></tr><tr><td><strong>420</strong></td><td><strong>Message is rate limited</strong></td></tr><tr><td><strong>429</strong></td><td><strong>Too many requests</strong></td></tr><tr><td><strong>5xx</strong></td><td><strong>Server Errors</strong></td></tr><tr><td><strong>500</strong></td><td><strong>Internal server error</strong></td></tr><tr><td><strong>504</strong></td><td><strong>Timeout</strong></td></tr></tbody></table>

## Outros status

<table><thead><tr><th width="175">código de envío</th><th width="119">código de entrega</th><th width="154">Estado</th><th>Significado</th></tr></thead><tbody><tr><td><strong>102</strong></td><td></td><td>CARRIER COMMUNICATION ERROR</td><td>Error al cargar medios a WhatsApp</td></tr><tr><td><strong>103</strong></td><td></td><td>REJECTED_BY_CARRIER</td><td>Ocurrió un error en la base de datos</td></tr><tr><td><strong>2</strong></td><td>101</td><td>EXPIRED</td><td>mensaje caducado</td></tr><tr><td><strong>2</strong></td><td>104</td><td>NOT_DELIVERED</td><td><strong>Posibles Causas:</strong> Se ha alcanzado el límite: se han intentado demasiados envíos de mensajes. o no se pudo enviar el mensaje porque el número de teléfono objetivo es parte de un experimento, o la estructura de la plantilla no existe, o no se pudo enviar el mensaje porque el número de destino está fuera de la ventana de servicio de 24 horas para recibir mensajes de formato libre. o hubo un error de carga de medios (error desconocido), o no pudo enviar el mensaje porque su cuenta no es elegible en Facebook Business Manager, o hubo un error de carga temporal. Vuelva a intentarlo más tarde.<br></td></tr><tr><td><strong>202</strong></td><td></td><td>INVALID_DESTINATION_NUMBER</td><td>Contacto de WhatsApp inválido</td></tr><tr><td><strong>204</strong></td><td></td><td>DESTINATION_BLOCKED_BY_OPTOUT</td><td>Destino bloqueado por exclusión voluntaria</td></tr><tr><td><strong>206</strong></td><td></td><td>INVALID_MESSAGE_LENGTH</td><td>mensaje demasiado largo</td></tr><tr><td><strong>207</strong></td><td></td><td>INVALID_MESSAGE_TEXT</td><td>El valor del parámetro no es válido</td></tr><tr><td><strong>209</strong></td><td></td><td>INVALID_CONTENT</td><td>Tipo de mensaje DESCONOCIDO no válido</td></tr><tr><td><strong>210</strong></td><td></td><td>INVALID_SESSION</td><td>La ventana de sesión o de escucha no está abierta y no se ha configurado ninguna plantilla alternativa</td></tr><tr><td><strong>311</strong></td><td></td><td>INTERNAL_ERROR</td><td>No se pueden verificar los contactos de la API de WhatsApp</td></tr></tbody></table>

## **Mensajes (MO)** <a href="#webhooks" id="webhooks"></a>

Cuando el cliente le envía un mensaje, Sinch Messaging API enviará una notificación de solicitud HTTP POST a la URL del webhook con los detalles.

Cuando el cliente le envía un mensaje, Sinch Messaging API enviará una notificación de solicitud HTTP POST a la URL del webhook con los detalles. Es importante que su webhook devuelva una respuesta HTTPS 200 OK a las notificaciones (dentro de 200 ms o de forma asíncrona). De lo contrario, Sinch Messaging API considerará que esta notificación ha fallado y volverá a intentarlo después de un retraso.

**Importante: Nuestro equipo de soporte debe configurar la URL donde recibirá los Webhooks.**

## Respuesta de código de estado HTTP común

### Solicitud de respuesta exitosa (200)

Si la solicitud se ejecuta con éxito, se devolverá la lista de destinos con los uuid generados:

```
{
 "Id": "5efc3581-b8e8-11e7-9895-a6aabe61edb5",
  "destination": [{
  "id": "5efc3581-b8e8-11e7-9895-a6aabe61edb5",
  "correlationId": "MyCorrelationId",
  "destination": "5519900001111."
}]
}
```

### Respuesta de error de autenticación (401)

Si hay un problema con la autenticación, se devolverá el siguiente mensaje:

```
{
  "errorCode": 401,
  "errorMessage": "Autenticação Error: No user was found with this combination of username and Autenticação token."
}
```

## Actualización de estado de devolución de llamada

> Ejemplo

```
{
  "total": 1,
  "data": [
    {
      "id": "8995c40f-1c3a-48d0-98ee-bbc603622a91",
      "correlationId": "...",
      "destination": "5519900000000",
      "origin": "5519900000000",
      "campaignId": 100,
      "campaignAlias": "...",
      "flowId": "...",
      "extraInfo": "...",
      "sent": true,
      "sentStatusCode": 1,
      "sentStatus": "sent status",
      "sentDate": "2017-12-18T17:09:31.891Z",
      "sentAt": 1513616971891,
      "delivered": true,
      "deliveredStatusCode": 1,
      "deliveredStatus": "delivered status",
      "deliveredDate": "2017-12-18T17:09:31.891Z",
      "deliveredAt": 1513616971891,
      "read": true,
      "readDate": "2017-12-18T17:09:31.891Z",
      "readAt": 1513616971891,
      "updatedDate": "2017-12-18T17:09:31.891Z",
      "updatedAt": 1513616971891
    }
  ],
  "clientInfo": {
      "customerId": 42,
      "subAccountId": 1291,
      "userId": 1
  }
}
```

Cada actualización del estado de los mensajes enviados (confirmación de entrega al usuario final, lectura de mensajes, etc.), se envía una devolución de llamada/webhook. Las devoluciones de llamada se envían por lotes.

**Importante: Nuestro equipo de soporte y operaciones debe configurar el punto final que usará el webhook para enviar los estados.**

El formato de devolución seguirá la siguiente descripción:

<table><thead><tr><th width="157.33333333333331">Campo</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>total</strong></td><td>Número de devoluciones de llamada en la llamada.</td><td>String</td></tr><tr><td><strong>data</strong></td><td>Lista de devolución de llamada.</td><td>Data[]</td></tr><tr><td><strong>clientInfo</strong></td><td>Información al cliente.</td><td>ClientInfo</td></tr></tbody></table>

## Dados:

<table><thead><tr><th width="190.33333333333331">Campo</th><th width="448">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>id</strong></td><td>identificación del último mensaje</td><td>String</td></tr><tr><td><strong>correlationId</strong></td><td>Una ID única definida por usted para que coincida con el estado del mensaje (Devolución de llamada y DLR). Este parámetro es opcional y puede utilizar el ID generado por Sinch Messaging para realizar la comparación.</td><td>String</td></tr><tr><td><strong>destination</strong></td><td>Número de teléfono al que se envió el mensaje (incluido el código de país). Ejemplo: 5511900000000.</td><td>String</td></tr><tr><td><strong>origin</strong></td><td>Número de telefone que Número de teléfono al que se envió el mensaje (incluido el código de país). Ejemplo: 5511900000000.</td><td>String</td></tr><tr><td><strong>campaignId</strong></td><td>ID de campaña definido anteriormente.</td><td>String</td></tr><tr><td><strong>campaignAlias</strong></td><td>Alias ​​de campaña definido anteriormente.</td><td>String</td></tr><tr><td><strong>extraInfo</strong></td><td>Información adicional enviada con el mensaje original.</td><td>String</td></tr><tr><td><strong>sent</strong></td><td>Indica si el mensaje fue enviado.</td><td>Boolean</td></tr><tr><td><strong>sentStatusCode</strong></td><td>Código de estado generado por Sinch Messaging para el mensaje que indica el estado de envío.</td><td>Number</td></tr><tr><td><strong>sentStatus</strong></td><td>Descripción del estado del envío.</td><td>Boolean</td></tr><tr><td><strong>sentDate</strong></td><td>Fecha en que se envió el mensaje. formato: aaaa-MM-dd'T'HH:mm:ssZ.</td><td>String</td></tr><tr><td><strong>sentAt</strong></td><td>Hora en que se envió el mensaje, utilizando el formato de hora Unix</td><td>Number</td></tr><tr><td><strong>delivered</strong></td><td>Indica si el mensaje se entregó en el destino.</td><td>Boolean</td></tr><tr><td><strong>deliveredStatusCode</strong></td><td>Código de estado generado por Sinch Messaging que indica si el mensaje fue entregado.</td><td>Number</td></tr><tr><td><strong>deliveredStatus</strong></td><td>Descripción del estado de entrega.</td><td>String</td></tr><tr><td><strong>deliveredDate</strong></td><td>Fecha en que se entregó el mensaje. formato:: aaaa-MM-dd'T'HH:mm:ssZ</td><td>String</td></tr><tr><td><strong>deliveredAt</strong></td><td>Tempo em que a mensagem foi entregue, usando Unix_time format</td><td>Number</td></tr><tr><td><strong>read</strong></td><td>Indica si el destinatario ha leído el mensaje.</td><td>Boolean</td></tr><tr><td><strong>readDate</strong></td><td>Fecha en que se leyó el mensaje. formato: aaaa-MM-dd'T'HH:mm:ssZ</td><td>String</td></tr><tr><td><strong>readAt</strong></td><td>Hora en que se leyó el mensaje, utilizando el formato Unix Time</td><td>String</td></tr><tr><td><strong>updatedDate</strong></td><td>Fecha en que se actualizó el estado del mensaje. Formato: aaaa-MM-dd'T'HH:mm:ssZ</td><td>String</td></tr><tr><td><strong>updatedAt</strong></td><td>Fecha en que se actualizó el estado del mensaje, utilizando el formato Unix_time</td><td>String</td></tr></tbody></table>

## ClientInfo

| Campo            | Detalhes                    | Tipo   |
| ---------------- | --------------------------- | ------ |
| **customerId**   | Identificación del cliente. | Number |
| **subAccountId** | ID de subcuenta.            | Number |
| **userId**       | Identificación de usuario.  | Number |

## Status

Status que podem ser enviados no callback:

<table><thead><tr><th>Status</th><th width="106">Código de envio</th><th width="120">Código de entrega</th><th>Significado</th></tr></thead><tbody><tr><td><strong>CARRIER_COMMUNICATION_ERROR</strong></td><td>102</td><td></td><td>Error al cargar medios a WhatsApp.</td></tr><tr><td><strong>REJECTED_BY_CARRIER</strong></td><td>103</td><td></td><td>Ocurrió un error en la base de datos.</td></tr><tr><td><strong>SENT_SUCCESS</strong></td><td>2</td><td></td><td></td></tr><tr><td><strong>EXPIRED</strong></td><td>2</td><td>101</td><td>Mensaje caducado.</td></tr><tr><td></td><td></td><td></td><td>No se pudo enviar el mensaje porque es demasiado antiguo.</td></tr><tr><td><strong>NOT_DELIVERED</strong></td><td>2</td><td>104</td><td>Se alcanzó el límite: se intentaron demasiados envíos de mensajes.</td></tr><tr><td><strong>DELIVERED_SUCCESS</strong></td><td>2</td><td>4</td><td></td></tr><tr><td><strong>READ_SUCCESS</strong></td><td>2</td><td>5</td><td></td></tr><tr><td><strong>INVALID_DESTINATION_NUMBER</strong></td><td>202</td><td></td><td>Contacto de WhatsApp no ​​válido.</td></tr><tr><td><strong>DESTINATION_BLOCKED_BY_OPTOUT</strong></td><td>204</td><td></td><td>Destino bloqueado por OptOut.</td></tr><tr><td><strong>INVALID_MESSAGE_LENGTH</strong></td><td>206</td><td></td><td>Mensaje demasiado largo.</td></tr><tr><td><strong>INVALID_MESSAGE_TEXT</strong></td><td>207</td><td></td><td>El valor del parámetro no es válido.</td></tr><tr><td><strong>INVALID_CONTENT</strong></td><td>209</td><td></td><td>Tipo de mensaje DESCONOCIDO no válido.</td></tr><tr><td><strong>INVALID_SESSION</strong></td><td>210</td><td></td><td>La sesión no está abierta y no se ha configurado ningún HSM de respaldo.</td></tr><tr><td><strong>DESTINATION_BLOCKED_BY_OPTIN</strong></td><td>211</td><td></td><td></td></tr><tr><td><strong>DESTINATION_BLOCKED_BY_WHITELIST</strong></td><td>212</td><td></td><td></td></tr><tr><td><strong>INTERNAL_ERROR</strong></td><td>311</td><td></td><td>No es posible verificar los contactos de la API de WhatsApp.</td></tr></tbody></table>

### MO (mensajes enviados por el usuario final a la cuenta de Whatsapp)

> Ejemplo de mensaje de texto:

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
            "type": "TEXT",
"messageText": "Olá, essa é uma mensagem do usuário."
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

> Ejemplo de información adicional:

```
{  
   "segmentation_list":[  
      {  
         "id":26,
         "customerId":42,
         "subAccountId":0,
         "name":"Sinch WhatsApp Segmentation List",
         "active":true
      },
      {  
         "id":27,
         "customerId":43,
         "subAccountId":0,
         "name":"Sinch WhatsApp Segmentation List 2",
         "active":true
      }
   ]
}
```

> Ejemplo de mensaje multimedia

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
            "type": "IMAGE",
           "mediaUrl": "https://...",
           "mimeType": "image/jpg",
           "caption": "..."
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

> Ejemplo de mensaje de ubicación:

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
           "location": {
               "geoPoint": "-22.894180,-47.047960",
               "name": "Sinch",
               "address": "Av. Cel. Silva Telles"
           }
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

> Ejemplo de mensaje de contacto:

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",      
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
           "contacts":[  
                 {  
                    "addresses":[  
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"1 Hacker Way",
                          "type":"HOME",
                          "zip":"94025"
                       },
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"200 Jefferson Dr",
                          "type":"WORK",
                          "zip":"94025"
                       }
                    ],
                    "birthday":"2012-08-18",
                    "emails":[  
                       {  
                          "email":"test@fb.com",
                          "type":"WORK"
                       },
                       {  
                          "email":"test@whatsapp.com",
                          "type":"WORK"
                       }
                    ],
                    "name":{  
                       "first_name":"John",
                       "formatted_name":"John Smith",
                       "last_name":"Smith"
                    },
                    "org":{  
                       "company":"WhatsApp",
                       "department":"Design",
                       "title":"Manager"
                    },
                    "phones":[  
                       {  
                          "phone":"+1 (940) 555-1234",
                          "type":"HOME"
                       },
                       {  
                          "phone":"+1 (650) 555-1234",
                          "type":"WORK",
                          "wa_id":"16505551234"
                       }
                    ],
                    "urls":[  
                       {  
                          "url":"https://www.fb.com",
                          "type":"WORK"
                       }
                    ]
                 }
              ]
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

Cada respuesta del usuario final (MO o Mobile Origined) se envía una devolución de llamada/webhook. Estos MO se envían por lotes.

**Importante: Nuestro equipo de soporte y operaciones debe configurar el punto final que usará el webhook para enviar los estados.**

Importante: Nuestro equipo de soporte y operaciones debe configurar el punto final que usará el webhook para enviar los estados.

<table><thead><tr><th width="144.00000000000003">Campo</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>total</strong></td><td>Números de devolución de llamada para la llamada.</td><td>String</td></tr><tr><td><strong>data</strong></td><td>Lista de mensajes con origen móvil (MO).</td><td>Data[]</td></tr></tbody></table>

### Dados

<table><thead><tr><th width="157.00000000000003">Campo</th><th width="326">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>id</strong></td><td>Identificación del último mensaje</td><td>String</td></tr><tr><td><strong>source</strong></td><td>Número de teléfono del remitente</td><td>String</td></tr><tr><td><strong>origin</strong></td><td>Número de teléfono que identifica la Cuenta de WhatsApp (incluyendo código de país). Ejemplo: 5511900000000.</td><td>String</td></tr><tr><td><strong>userProfile</strong></td><td>Perfil del usuario que envió el mensaje</td><td>UserProfile</td></tr><tr><td><strong>correlationId</strong></td><td>Una ID única definida por usted para que coincida con el estado del mensaje (Devolución de llamada y DLR). Este parámetro es opcional y puede usar la ID generada por Sinch Messaging para hacer la comparación.</td><td>String</td></tr><tr><td><strong>campaignId</strong></td><td>ID de campaña definido anteriormente.</td><td>String</td></tr><tr><td><strong>campaignAlias</strong></td><td>Alias ​​de campaña definido anteriormente.</td><td>String</td></tr><tr><td><strong>mensagem</strong></td><td>Mensaje MO.</td><td>mensagem</td></tr><tr><td><strong>receivedAt</strong></td><td>Fecha en que se recibió el mensaje. Formato: aaaa-MM-dd'T'HH:mm:ssZ</td><td>String</td></tr><tr><td><strong>receivedDate</strong></td><td>Fecha en que se recibió el mensaje, utilizando el formato de hora Unix</td><td>String</td></tr><tr><td><strong>extraInfo</strong></td><td>Información adicional relacionada con el mensaje. Formato: JSON</td><td>String</td></tr></tbody></table>

## **Controle de Fluxo de MO- Listas de Segmentação**

El mensaje tendrá una lista de listas de orientación en el campo extraInfo. Nuestros socios lo usan para dirigir mensajes a ciertos flujos. El nombre de la clave es **segmentation\_lists** y contiene una lista de **SegmentationList.**

<table><thead><tr><th width="179.00000000000003">Campo</th><th width="329">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>id</strong></td><td>Identificador de lista de segmentación</td><td>Integer</td></tr><tr><td><strong>customerId</strong></td><td>identificador de cliente</td><td>Integer</td></tr><tr><td><strong>subAccountId</strong></td><td>identificador de subcuenta</td><td>Integer</td></tr><tr><td><strong>name</strong></td><td>Nombre de la lista de objetivos</td><td>String</td></tr><tr><td><strong>active</strong></td><td>Estado de la lista de objetivos</td><td>Boolean</td></tr></tbody></table>

## Mensaje:

<table><thead><tr><th width="204.33333333333331">Campo</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>type</strong></td><td>Tipo de mensaje enviado al usuario final: TEXTO - IMAGEN - AUDIO - DOCUMENTO</td><td>String</td></tr><tr><td><strong>messageText</strong></td><td>El mensaje de texto (MO) enviado por el usuario final.</td><td>String</td></tr><tr><td><strong>waGroupId</strong></td><td>Grupo al que se envió el mensaje.</td><td>String</td></tr><tr><td><strong>mediaUrl</strong></td><td>Url para descargar los medios enviados por el usuario final.</td><td>String</td></tr><tr><td><strong>mimeType</strong></td><td>Tipo Mime del archivo enviado por el usuario final.</td><td>String</td></tr><tr><td><strong>caption</strong></td><td>Etiqueta de medios enviada por el usuario final.</td><td>String</td></tr><tr><td><strong>location</strong></td><td>Ubicación enviada por el usuario final.</td><td>Location</td></tr><tr><td><strong>contacts</strong></td><td>Contactos enviados por el usuario final.</td><td>Contact[]</td></tr></tbody></table>

## UserProfile:

<table><thead><tr><th width="117">Campo</th><th width="133">Obligatorio</th><th width="188">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>name</strong></td><td>Não</td><td>Nombre de perfil de usuario</td><td>String</td></tr></tbody></table>

## Location:

<table><thead><tr><th width="178.00000000000003">Campo</th><th width="375">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>name</strong></td><td>Nombre del lugar.</td><td>String</td></tr><tr><td><strong>address</strong></td><td>Dirección del sitio.</td><td>String</td></tr><tr><td><strong>geoPoint</strong></td><td>Geopunto enviado por el usuario final. Formato: "latitud, longitud"</td><td>String</td></tr></tbody></table>

## Contact:

<table><thead><tr><th width="152">Campo</th><th width="124">Obligatorio</th><th width="221">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>addresses</strong></td><td>No</td><td>Dirección(es) completa(s) del contacto.</td><td>Address[]</td></tr><tr><td><strong>birthday</strong></td><td>No</td><td>Cumpleaños en formato AAAA-MM-DD.</td><td>String</td></tr><tr><td><strong>emails</strong></td><td>No</td><td>Dirección(es) de correo electrónico de contacto.</td><td>Email[]</td></tr><tr><td><strong>name</strong></td><td>No</td><td>Nombre completo del contacto.</td><td>Name</td></tr><tr><td><strong>org</strong></td><td>No</td><td>Información de contacto de la organización.</td><td>Org</td></tr><tr><td><strong>phones</strong></td><td>No</td><td>Teléfono(s) de contacto.</td><td>Phone[]</td></tr><tr><td><strong>urls</strong></td><td>No</td><td>URL de contacto.</td><td>Url[]</td></tr></tbody></table>

## Address:

<table><thead><tr><th width="156">Campo</th><th width="136">Obligatorio</th><th width="209">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>street</strong></td><td>No</td><td>Nombre y número de la calle.</td><td>String</td></tr><tr><td><strong>city</strong></td><td>No</td><td>Nombre de la ciudad.</td><td>String</td></tr><tr><td><strong>state</strong></td><td>No</td><td>símbolo del estado.</td><td>String</td></tr><tr><td><strong>zip</strong></td><td>No</td><td>CÓDIGO POSTAL.</td><td>String</td></tr><tr><td><strong>country</strong></td><td>No</td><td>Nombre completo del país.</td><td>String</td></tr><tr><td><strong>country_code</strong></td><td>No</td><td>Abreviatura del país (Dos letras).</td><td>String</td></tr><tr><td><strong>type</strong></td><td>No</td><td>Valores por defecto: CASA, TRABAJO.</td><td>String</td></tr></tbody></table>

## Email:

<table><thead><tr><th width="132">Campo</th><th>Obligatorio</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>email</strong></td><td>No</td><td>Dirección de correo electrónico.</td><td>String</td></tr><tr><td><strong>type</strong></td><td>No</td><td>Valores por defecto: CASA, TRABAJO.</td><td>String</td></tr></tbody></table>

## Name:

<table><thead><tr><th width="170">Campo</th><th width="145">Obligatorio</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>first_name</strong></td><td>No</td><td>Primer nombre.</td><td>String</td></tr><tr><td><strong>last_name</strong></td><td>No</td><td>Ultimo nombre.</td><td>String</td></tr><tr><td><strong>middle_name</strong></td><td>No</td><td>Nombre del medio.</td><td>String</td></tr><tr><td><strong>name_suffix</strong></td><td>No</td><td>Sufijo de nombre.</td><td>String</td></tr><tr><td><strong>name_prefix</strong></td><td>No</td><td>Prefijo del nombre.</td><td>String</td></tr><tr><td><strong>formatted_name</strong></td><td>No</td><td>Nombre completo como aparece normalmente.</td><td>String</td></tr></tbody></table>

## Org:

<table><thead><tr><th width="167">Campo</th><th>Obligatorio</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>company</strong></td><td>No</td><td>Nombre de la organización del contacto.</td><td>String</td></tr><tr><td><strong>department</strong></td><td>No</td><td>Nombre del departamento del contacto.</td><td>String</td></tr><tr><td><strong>title</strong></td><td>No</td><td>Título corporativo del contacto.</td><td>String</td></tr></tbody></table>

## Phone:

<table><thead><tr><th width="155">Campo</th><th width="134">Obligatorio</th><th width="211">Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>phone</strong></td><td>No</td><td>Número de teléfono formateado.</td><td>String</td></tr><tr><td><strong>type</strong></td><td>No</td><td>Valores predeterminados: CELULAR, PRINCIPAL, IPHONE, CASA, TRABAJO.</td><td>String</td></tr><tr><td><strong>wa_id</strong></td><td>No</td><td>Identificador de WhatsApp.</td><td>String</td></tr></tbody></table>

## Url:

<table><thead><tr><th width="127">Campo</th><th>Obligatorio</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>phone</strong></td><td>No</td><td>URL de contacto.</td><td>String</td></tr><tr><td><strong>type</strong></td><td>No</td><td>Valores por defecto: CASA, TRABAJO.</td><td>String</td></tr></tbody></table>

Para los objetos que contienen un campo de tipo, los valores enumerados simplemente se consideran los valores predeterminados que se pueden ver, sin embargo, puede establecer el campo en cualquier valor descriptivo que elija.

## API SFTP WhatsApp

### Detalles de conexión

<table><thead><tr><th width="222">Campo</th><th>Descripción</th></tr></thead><tbody><tr><td><strong>Hostname</strong></td><td>ftp-messaging.wavy.global</td></tr><tr><td><strong>Porta</strong></td><td>2222</td></tr><tr><td><strong>Protocolo</strong></td><td>SFTP (transferencia a través de ssh, que proporciona cifrado cliente-servidor)</td></tr><tr><td><strong>Autenticação</strong></td><td>nombre de usuario + contraseña (proporcionado por soporte)</td></tr></tbody></table>

Es necesario liberar tus IPs en los firewalls de Sinch. Si es necesario liberar el firewall para salida hacia el puerto 2222, debe liberar el DNS, o las IPs 200.219.220.54, 200.189.169.53 y 45.236.179.22

## Envío de mensajes a través de SFTP

Para disparar mensajes a través de FTP, es necesario generar un archivo con formato siguiendo el ejemplo a continuación: Mensaje HSM:

**2018-10-16;10:00;20:00;HSM;chatclub\_welcome;pt\_BR;DETERMINISTIC;nome|empresa**\
**telefone;nome;empresa**\
**551999999999;Nome1;Sinch**\
**551999999999;Nome2;Sinch**

| 1ª Línea                                                      |
| ------------------------------------------------------------- |
| Fecha de presentación (para casos de programación)            |
| Hora de inicio de envío (para casos de programación)          |
| Hora de envío final (para casos de programación)              |
| El tipo de mensaje debe ser: HSM                              |
| Nombre (elementName) del HSM                                  |
| Idioma (languageLocale) del HSM                               |
| Determinista o Fallback del lenguaje del HSM (languagePolicy) |
| Nombre de parámetros de HSM                                   |

### Notas para la primera línea:**:**

1. Los nombres de los parámetros deben coincidir con los nombres de las columnas.
2. La información que no se va a utilizar se puede dejar en blanco, pero el punto y coma se debe utilizar como separación. Ejemplo de un caso donde no usamos scheduling (los campos iniciales están entre punto y coma y sin información adentro): ; ; ; HSM;chatclub\_welcome;en\_BR;DETERMINISTIC;nombre|empresa
3. De forma predeterminada (predeterminada), languagePolicy será determinista.
4. Los nombres de los parámetros de HSM deben estar separados por “ | ” y no por “ ; ”

| 2ª Linha            |
| ------------------- |
| nombres de columnas |

| 3ª y otras lineas:                          |
| ------------------------------------------- |
| Valores de parámetros de destinatario y HSM |

## Consulta de lista a través de API

### Pedido

Con GET, puede realizar una solicitud enviando todos los parámetros en la cadena de consulta

`http://api-messaging.wavy.global/v1/list/{listType}?customerId={customerId}&subAccountId={subAccountId}`

<table><thead><tr><th width="309">Tipo de Lista</th><th>Valor pasado en {listType}</th></tr></thead><tbody><tr><td><strong>Whatsapp OPT-OUT List</strong></td><td>OPTOUT</td></tr><tr><td><strong>Whatsapp OPT-IN List</strong></td><td>OPTIN</td></tr><tr><td><strong>Whatsapp Blacklist</strong></td><td>BLACKLIST</td></tr><tr><td><strong>Whatsapp Whitelist (para MT)</strong></td><td>WHITELIST</td></tr></tbody></table>

El parámetro **customerId** es obligatorio, mientras que **subAccountId** es opcional.&#x20;

**Atención: las llaves '{' y '}' también deben reemplazarse.**&#x20;

Por ejemplo, "{listType}" se convierte en "OPTIN". Todavía es necesario pasar los siguientes encabezados:

<table><thead><tr><th width="267">Header</th><th>Valor</th></tr></thead><tbody><tr><td><strong>Content-Type</strong></td><td>application/json</td></tr><tr><td><strong>authenticationToken</strong></td><td>Token do Messaging</td></tr><tr><td><strong>userName</strong></td><td>Nombre de usuario de mensajería</td></tr></tbody></table>

### Respuesta

En caso de éxito, si hay datos asociados con customerId y subAccountId, la solicitud devolverá un JSON con 3 atributos:

<table><thead><tr><th width="254">Atributo</th><th>Valor</th></tr></thead><tbody><tr><td><strong>success</strong></td><td>true</td></tr><tr><td><strong>status</strong></td><td>200</td></tr><tr><td><strong>data</strong></td><td>Enlace para descargar un archivo csv que contiene los campos "fuente" y "creado en" de todos los destinos encontrados</td></tr></tbody></table>

La columna "creado en" está en la zona horaria de América/Sao\_Paulo, UTC-3 o UTC-2 en horario de verano.

Si no hay datos asociados, solo se devolverá un JSON similar, pero sin el campo de datos, lo que significa que no hubo problemas con la solicitud, pero no hubo datos relacionados con los parámetros pasados.

> Ejemplo de respuesta:

```
{
    "success": true,
    "status": 200,
    "data": "https://chatclub-cdn.wavy.global/2019/02/12/f2b8effb-d0bc-4327-86c2-48fedcb01b1b/list-42-4330544192402746957.csv"
}
```

### Consultar sesiones abiertas a través de API

### Pedido

Para consultar las sesiones abiertas a través de nuestra API, debe realizar una solicitud GET a la dirección:

`GET http://api-messaging.wavy.global/v1/session?customerId={customerId}&subAccountId={subAccountId}`

El parámetro **customerId** es obligatorio, mientras que **subAccountId** es opcional.

{% hint style="danger" %}
**Atención: Las llaves '{' y '}' también deben reemplazarse. Por ejemplo, “={customerId}” se convierte en “=42”.**
{% endhint %}

Todavía es necesario pasar los siguientes encabezados

| Header                  | Valor             |
| ----------------------- | ----------------- |
| **Content-Type**        | application/json  |
| **authenticationToken** | Token             |
| **userName**            | Nombre de usuario |

El usuario y el token se pueden obtener a través de nuestra plataforma: [**Mi Perfil**](/whatsapp/sinch-messaging-platform/mi-perfil-or-idioma.md)

### Respuesta&#x20;

En caso de éxito, si hay sesiones abiertas para el ID de cliente y el ID de subcuenta especificados, la solicitud devolverá un JSON con el atributo:

<table><thead><tr><th width="151">Atributo</th><th>Valor</th></tr></thead><tbody><tr><td><strong>file_url</strong></td><td>Enlace para descargar un archivo csv que contiene los campos "fuente" y "session_created_at" de todos los destinos encontrados</td></tr></tbody></table>

Si no hay datos asociados con **customerId** y **subAccountId**, el archivo devuelto estará vacío, con solo el encabezado.

> Ejemplo de respuesta:

```
{
    "file_url": "https://chatclub-cdn.wavy.global/2019/02/13/633e33fc-3a3f-4ca5-a8b0-4b747fb67137/5bd46e2b-5990-4681-9b29-98ab6598960e"
}
```

## Destino: <a href="#destino" id="destino"></a>

<table><thead><tr><th width="174">Campo</th><th>Necesario</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>correlationId</strong></td><td>No</td><td>Su id definido sera devuelto en un mensaje de confirmación (Callback). Esto será útil en casos en que se desea mantener el control del mensaje enviado, ya que es posible definir ids diferentes para mensajes distintos.</td><td>String</td></tr><tr><td><strong>destination</strong></td><td>Si</td><td>Número de teléfono (código de país y estado deben estar presentes) o el WhatsApp group ID al que se enviará el mensaje. Ejemplos: 5411900001111, +5720900001111, +56 (56) 900001111.</td><td>String</td></tr><tr><td><strong>recipientType</strong></td><td>No</td><td>Debe ser <code>"individual"</code> o <code>"group"</code>, dependiendo de si el campo <code>destination</code> es un número de teléfono o un group ID.</td><td>String</td></tr></tbody></table>

#### Mensaje: <a href="#mensaje" id="mensaje"></a>

| Campo               | Necesario | Detalles                                                                                                   | Tipo       |
| ------------------- | --------- | ---------------------------------------------------------------------------------------------------------- | ---------- |
| **messageText**     | Si        | Campo utilizado en caso de que desee enviar un mensaje personalizado como respuesta a un mensaje recibido. | text       |
| **image**           | Si        | Campo utilizado en caso de que desee enviar un contenido de imagen.                                        | Image      |
| **audio**           | Si        | Campo utilizado en caso de que desee enviar un contenido de audio.                                         | Audio      |
| **document**        | Si        | Campo utilizado en caso de que desee enviar un archivo o documento.                                        | Document   |
| **contacts**        | Si        | Campo utilizado en caso de que desee enviar contactos.                                                     | Contact\[] |
| **previewFirstUrl** | No        | Controla la vista previa de la aplicación de la primera URL enviada                                        | Boolean    |
| **location**        | Si        | Campo utilizado en caso de que desee enviar una ubicacion.                                                 | Location   |

{% hint style="danger" %}
**Solo una de las siguientes opciones de midia debe ser especificado, ya sea ‘messageText’, ‘image’, ‘audio’, ‘document’, ‘location’ o ‘contacts’**
{% endhint %}

#### Texto: <a href="#texto" id="texto"></a>

{% hint style="danger" %}
**Solo se debe enviar un mensaje personalizado como respuesta a un mensaje recibido por el usuario siempre cuando la sesión se encuentre abierta. Si la sesión no está abierta o el usuario no envió un mensaje deberá utilizase el HSM.**
{% endhint %}

> Ejemplo de envío de texto

```
        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "messageText": "Mensaje de prueba"
            }
        }

```

#### Imagen: <a href="#imagen" id="imagen"></a>

| Campo       | Necesario | Detalles                                                                                          | Tipo   |
| ----------- | --------- | ------------------------------------------------------------------------------------------------- | ------ |
| **type**    | Si        | Tipo / extensión de la imagen que se enviará en el mensaje. Opciones disponibles: JPG, JPEG, PNG. | String |
| **caption** | No        | Texto que se mostrara al usuario debajo de la imagen en Whatsapp                                  | String |
| **url**     | Si        | URL donde se aloja el contenido que se enviará.                                                   | String |
| **data**    | Si        | Base64 contenido codificado                                                                       | String |

> Ejemplo de envío de imagen (URL)

```
        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "image": {
                    "type": "JPG",
                    "url": "http://...jpg",
                    "caption": "image description"
                }
            }
        }

```

> Ejemplo de envío de imagen (Base64)

```
{
           "destinations": [{
               "correlationId": "MyCorrelationId",
               "destination": "5519900001111"
           }],
           "message": {
               "image": {
                   "type": "JPG",
                   "data": "ZmlsZQ=="
               }
           }
       }
```

{% hint style="danger" %}
**Solo se debe especificar una de las siguientes opciones, ya sea ‘url’, en caso de que desee enviar usando un archivo, o ‘datos’, en caso de que desee enviar una imagen usando la codificación base64**
{% endhint %}

#### Audio: <a href="#audio" id="audio"></a>

| Campo    | Necesario | Detalles                                                                                             | Tipo   |
| -------- | --------- | ---------------------------------------------------------------------------------------------------- | ------ |
| **type** | Si        | Tipo/Extensión de audio que se enviará en el mensaje. Opciones disponibles: AAC, MP4, AMR, MP3, OGG. | String |
| **url**  | Si        | URL donde se aloja el contenido que se enviará.                                                      | String |
| **data** | Si        | Base64 contenido codificado                                                                          | String |

{% hint style="danger" %}
**Solo se debe especificar una de las siguientes opciones, ya sea ‘url’, en caso de que desee enviar usando un archivo, o ‘datos’, en caso de que desee enviar un audio usando la codificación base64**
{% endhint %}

> Ejemplo de envío de audio (URL)

```
        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "audio": {
                    "type": "MP3",
                    "url": "http://...mp3"
                }
            }
        }
```

> Ejemplo de envío de audio (Base64)

```
        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "audio": {
                    "type": "MP3",
                    "data": "ZmlsZQ=="
                }
            }
        }
```

#### Documento: <a href="#documento" id="documento"></a>

| Campo       | Necesario | Detalles                                                                             | Tipo   |
| ----------- | --------- | ------------------------------------------------------------------------------------ | ------ |
| **type**    | Si        | Tipo/Extensión de documento que se enviará en el mensaje. Opciones disponibles: PDF. | String |
| **caption** | No        | Texto que se mostrara al usuario debajo del documento en Whatsapp                    | String |
| **url**     | Si        | URL donde se aloja el contenido que se enviará.                                      | String |
| **data**    | Si        | Base64 contenido codificado                                                          | String |

{% hint style="danger" %}
**Solo se debe especificar una de las siguientes opciones, ya sea ‘url’, en caso de que desee enviar usando un archivo, o ‘datos’, en caso de que desee enviar un documento usando la codificación base64 encoding**
{% endhint %}

> Ejemplo de envío de documento (URL)

```
        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "document": {
                    "type": "PDF",
                    "url": "http://...pdf",
                    "caption": "pdf description"
                }
            }
        }
```

> Ejemplo de envío de documento (Base64)

```
        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "document": {
                    "type": "PDF",
                    "data": "ZmlsZQ=="
                }
            }
        }
```

> Ejemplo de envío de ubicacion

```
        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "location": {
                    "geoPoint": "-22.894180,-47.047960",
                    "name": "Sinch",
                    "address": "Av. Cel. Silva Telles"
                }
            }
        }
```

#### Contact: <a href="#contact" id="contact"></a>

| Campo         | Necesario | Detalles                                                | Tipo       |
| ------------- | --------- | ------------------------------------------------------- | ---------- |
| **addresses** | No        | Direcciones de contacto completas.                      | Address\[] |
| **birthday**  | No        | Fecha de cumpleaños como cadena con formato YYYY-MM-DD. | String     |
| **emails**    | No        | Direcciones de correo electrónico de contacto.          | Email\[]   |
| **name**      | No        | Nombre completo de contacto.                            | Name       |
| **org**       | No        | Información de la organización de contacto.             | Org        |
| **phones**    | No        | Teléfonos de contacto.                                  | Phone\[]   |
| **urls**      | No        | URLs de los contactos.                                  | Url\[]     |

> Ejemplo de envio de contactos

```
        {  
           "destinations":[  
              {  
                 "correlationId":"MyCorrelationId",
                 "destination":"5519900001111"
              }
           ],
           "message":{  
              "contacts":[  
                 {  
                    "addresses":[  
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"1 Hacker Way",
                          "type":"HOME",
                          "zip":"94025"
                       },
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"200 Jefferson Dr",
                          "type":"WORK",
                          "zip":"94025"
                       }
                    ],
                    "birthday":"2012-08-18",
                    "emails":[  
                       {  
                          "email":"test@fb.com",
                          "type":"WORK"
                       },
                       {  
                          "email":"test@whatsapp.com",
                          "type":"WORK"
                       }
                    ],
                    "name":{  
                       "first_name":"John",
                       "formatted_name":"John Smith",
                       "last_name":"Smith"
                    },
                    "org":{  
                       "company":"WhatsApp",
                       "department":"Design",
                       "title":"Manager"
                    },
                    "phones":[  
                       {  
                          "phone":"+1 (940) 555-1234",
                          "type":"HOME"
                       },
                       {  
                          "phone":"+1 (650) 555-1234",
                          "type":"WORK",
                          "wa_id":"16505551234"
                       }
                    ],
                    "urls":[  
                       {  
                          "url":"https://www.fb.com",
                          "type":"WORK"
                       }
                    ]
                 }
              ]
           }
        }
```

#### Address: <a href="#address" id="address"></a>

| Campo             | Necesario | Detalles                           | Tipo   |
| ----------------- | --------- | ---------------------------------- | ------ |
| **street**        | No        | Número y nombre de la calle.       | String |
| **city**          | No        | Nombre de la ciudad.               | String |
| **state**         | No        | Abreviatura del estado.            | String |
| **zip**           | No        | Código postal.                     | String |
| **country**       | No        | Nombre completo del país.          | String |
| **country\_code** | No        | Abreviatura de país de dos letras. | String |
| **type**          | No        | Valores estándar: HOME, WORK.      | String |

#### Email: <a href="#email" id="email"></a>

| Campo     | Necesario | Detalles                      | Tipo   |
| --------- | --------- | ----------------------------- | ------ |
| **email** | No        | Correo electrónico.           | String |
| **type**  | No        | Valores estándar: HOME, WORK. | String |

#### Name: <a href="#name" id="name"></a>

| Campo               | Necesario | Detalles                                  | Tipo   |
| ------------------- | --------- | ----------------------------------------- | ------ |
| **first\_name**     | No        | Primer nombre.                            | String |
| **last\_name**      | No        | Apellido.                                 | String |
| **middle\_name**    | No        | Segundo nombre.                           | String |
| **name\_suffix**    | No        | Sufijo del nombre.                        | String |
| **name\_prefix**    | No        | Prefijo del nombre.                       | String |
| **formatted\_name** | No        | Nombre completo como aparece normalmente. | String |

#### Org: <a href="#org" id="org"></a>

<table><thead><tr><th>Campo</th><th width="195">Necesario</th><th>Detalles</th><th>Tipo</th></tr></thead><tbody><tr><td><strong>company</strong></td><td>No</td><td>Nombre de la empresa del contacto.</td><td>String</td></tr><tr><td><strong>department</strong></td><td>No</td><td>Nombre del departamento de contacto.</td><td>String</td></tr><tr><td><strong>title</strong></td><td>No</td><td>Título comercial de contacto.</td><td>String</td></tr></tbody></table>

#### Phone: <a href="#phone" id="phone"></a>

| Campo      | Necesario | Detalles                                          | Tipo   |
| ---------- | --------- | ------------------------------------------------- | ------ |
| **phone**  | No        | Número de teléfono formateado.                    | String |
| **type**   | No        | Valores estándar: CELL, MAIN, IPHONE, HOME, WORK. | String |
| **wa\_id** | No        | Identificador de WhatsApp.                        | String |

#### Url: <a href="#url" id="url"></a>

| Campo     | Necesario | Detalles                      | Tipo   |
| --------- | --------- | ----------------------------- | ------ |
| **phone** | No        | URL del contacto.             | String |
| **type**  | No        | Valores estándar: HOME, WORK. | String |

{% hint style="danger" %}
**Para los objetos que contienen un campo de tipo, los valores listados se consideran simplemente los valores estándar que se pueden ver, sin embargo, puede establecer el campo en cualquier valor descriptivo que elija..**
{% endhint %}

### Envío de mensajes HSM <a href="#env-o-de-mensajes-hsm" id="env-o-de-mensajes-hsm"></a>

> Ejemplo de solicitud HSM

```
{
           "destinations": [{
               "correlationId": "MyCorrelationId",
               "destination": "5519900001111"
           }],
           "message": {
               "ttl": 1,
               "hsm": {
                   "namespace": "namespace",
                   "elementName": "elementName",
                   "parameters":[
                       "MyParam1",
                       "MyParam2"
                   ]
               }
           }
       }
```

También es posible enviar una base de mensajes en plantillas previamente definidas (también llamado HSM), con la adición de placeholders (“parámetros”). El cuerpo de la solicitud debe contener un objeto JSON con los siguientes campos:

| Campo                | Necesario | Detalles                                                                                                         | Tipo        |
| -------------------- | --------- | ---------------------------------------------------------------------------------------------------------------- | ----------- |
| **destinations**     | Si        | Lista de destinatarios                                                                                           | Destination |
| **message**          | Si        | Mensaje de texto que se enviará a la lista de destinatarios                                                      | Message     |
| **flowId**           | No        | Identificación del flujo de Bot                                                                                  | String      |
| **defaultExtraInfo** | No        | Los datos adicionales que identifican el envío, se vincularán a todos los destinatarios que recibirán el mensaje | String      |
| **campaignAlias**    | No        | ID de campaña, está vinculado a todos los mensajes del envío                                                     | String      |

#### Destino: <a href="#destino" id="destino"></a>

| Campo             | Necesario | Detalles                                                                                                                                                                                                                  | Tipo   |
| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| **correlationId** | No        | Su id definido sera devuelto en un mensaje de confirmación (Callback). Esto será útil en casos en que se desea mantener el control del mensaje enviado, ya que es posible definir ids diferentes para mensajes distintos. | String |
| **destination**   | Si        | Número de teléfono al que se enviará el mensaje (código de país y estado deben estar presentes). Ejemplos: 5411900001111, +5720900001111, +56 (56) 900001111.                                                             | String |

#### Mensaje: <a href="#mensaje" id="mensaje"></a>

| Campo   | Necesario | Detalles                                                                                                                                                    | Tipo |
| ------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- |
| **ttl** | No        | Tiempo de vida en días. Define el número máximo de días en que el mensaje debe entregarse. Válido de 1 a 30. Valor predeterminado 7 si no está configurado. | long |
| **hsm** | Si        | Contenido del mensaje HSM.                                                                                                                                  | HSM  |

#### HSM: <a href="#hsm" id="hsm"></a>

| Campo              | Necesario                                       | Detalles                                                                                                                                                                                                                                                                                                                                                                             | Tipo   |
| ------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ |
| **namespace**      | Si                                              | El espacio de nombres que se usará                                                                                                                                                                                                                                                                                                                                                   | String |
| **elementName**    | Si                                              | El nombre del elemento que indica qué plantilla usar dentro del espacio de nombres                                                                                                                                                                                                                                                                                                   | String |
| **parameters**     | Si, si la plantilla del mensaje tiene variables | Este campo es una matriz de valores para aplicar a las variables en la plantilla                                                                                                                                                                                                                                                                                                     | String |
| **languagePolicy** | No                                              | Parámetro que identifica cómo se seleccionará el lenguaje HSM. Opciones Disponibles: FALLBACK: Cuando la plantilla de HSM no tenga una versión para el idioma del dispositivo del usuario, se usará el idioma definido. DETERMINISTIC: El mensaje siempre se enviará en el código de idioma, independientemente del idioma en que esté configurado el dispositivo del usuario final. | String |
| **languageCode**   | Obligatorio si languagePolicy está presente     | Código de idioma o configuración regional, acepta ambos formatos: lenguaje (en) o lenguaje\_local (es\_AR). Para confirmar todos los idiomas disponibles para un HSM en particular, contáctese con nuestro equipo de Soporte.                                                                                                                                                        | String |

### Envío de mensajes template <a href="#env-o-de-mensajes-template" id="env-o-de-mensajes-template"></a>

> Ejemplo de solicitud template

```
{
  {
    "destinations": [{
            "correlationId": "MyCorrelationId",
            "destination": "5519900001111"      
  }],
    "message": {
        "template": {
            "namespace" : "aaaaaaaa_bbbb_cccc_dddd_eeeeeeeeeeee",
            "elementName" : "some_approved_image_hsm",
            "header": {
                "image": {
                    "url": "https://upload.wikimedia.org/wikipedia/commons/c/c3/Arquivo.jpg",
                    "type": "JPG"
                }
            },
            "bodyParameters": [
                "https://upload.wikimedia.org/wikipedia/commons/c/c3/Arquivo.jpg"
            ],
            "languagePolicy": "DETERMINISTIC",
            "languageCode": "pt_BR"
        }
    }
}
```

También es posible enviar una base de mensajes en plantillas previamente definidas (también llamado templates), con la adición de placeholders (“parámetros”). El cuerpo de la solicitud debe contener un objeto JSON con los siguientes campos:

| Campo                | Necesario | Detalles                                                                                                         | Tipo        |
| -------------------- | --------- | ---------------------------------------------------------------------------------------------------------------- | ----------- |
| **destinations**     | Si        | Lista de destinatarios                                                                                           | Destination |
| **message**          | Si        | Mensaje de texto que se enviará a la lista de destinatarios                                                      | Message     |
| **flowId**           | No        | Identificación del flujo de Bot                                                                                  | String      |
| **defaultExtraInfo** | No        | Los datos adicionales que identifican el envío, se vincularán a todos los destinatarios que recibirán el mensaje | String      |
| **campaignAlias**    | No        | ID de campaña, está vinculado a todos los mensajes del envío                                                     | String      |

#### Destino:

| Campo             | Necesario | Detalles                                                                                                                                                                                                                  | Tipo   |
| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| **correlationId** | No        | Su id definido sera devuelto en un mensaje de confirmación (Callback). Esto será útil en casos en que se desea mantener el control del mensaje enviado, ya que es posible definir ids diferentes para mensajes distintos. | String |
| **destination**   | Si        | Número de teléfono al que se enviará el mensaje (código de país y estado deben estar presentes). Ejemplos: 5411900001111, +5720900001111, +56 (56) 900001111.                                                             | String |

#### Mensaje:

| Campo        | Necesario | Detalles                                                                                                                                                    | Tipo     |
| ------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| **ttl**      | No        | Tiempo de vida en días. Define el número máximo de días en que el mensaje debe entregarse. Válido de 1 a 30. Valor predeterminado 7 si no está configurado. | long     |
| **template** | Si        | Contenido del template del mensaje.                                                                                                                         | Template |

#### Template:

| Campo              | Necesario                           | Detalles                                                                                                                                                                                                                                                                                                                                                                             | Tipo             |
| ------------------ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- |
| **namespace**      | Si                                  | Valor que identifica la cuenta de registro del modelo de Facebook                                                                                                                                                                                                                                                                                                                    | String           |
| **elementName**    | Si                                  | Valor que identifica el modelo registrado en Facebook                                                                                                                                                                                                                                                                                                                                | String           |
| **languageCode**   | Si                                  | Uno de los idiomas definidos en el registro del template                                                                                                                                                                                                                                                                                                                             | String           |
| **languagePolicy** | Si                                  | Parámetro que identifica cómo se seleccionará el lenguaje HSM. Opciones Disponibles: FALLBACK: Cuando la plantilla de HSM no tenga una versión para el idioma del dispositivo del usuario, se usará el idioma definido. DETERMINISTIC: El mensaje siempre se enviará en el código de idioma, independientemente del idioma en que esté configurado el dispositivo del usuario final. | String           |
| **header**         | Si (caso lo template necessite)     | Objetos de cabeçalho com sus parametros                                                                                                                                                                                                                                                                                                                                              | Header           |
| **bodyParameters** | Si (caso lo template use variaveis) | La suma de todos los caracteres del cuerpo, considerando los campos fijos y dinámicos, está limitada a 1024 caracteres si el template registrado solo tiene el cuerpo. Está limitado a 160 caracteres si tiene un header o footer.                                                                                                                                                   | Lista de strings |

#### Header:

| Campo          | Necesario | Detalles                                                                                                                                 | Tipo        |
| -------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| **parameters** | No        | <p>Lista de parámetros para reemplazar en el texto del header.<br></p><p>Si está presente, el header no debe tener title ni elements</p> |             |
| **title**      | No        | El título debe tener hasta 60 caracteres.                                                                                                | String \[ ] |
| **element**    | Si        | <p>Opciones:</p><p>TEXT, IMAGE, AUDIO, DOCUMENT,  HSM, VIDEO.<br></p><p>Obs.: No es obligatorio en caso de pasar el campo parameters</p> | Object      |

### Códigos comunes de respuesta de estado HTTP <a href="#c-digos-comunes-de-respuesta-de-estado-http" id="c-digos-comunes-de-respuesta-de-estado-http"></a>

#### Respuesta de envio exitoso (200) <a href="#respuesta-de-envio-exitoso-200" id="respuesta-de-envio-exitoso-200"></a>

Si tiene éxito, se espera una lista de destinatarios (“destinos”) con uuids generados desde el lado de la aplicación:

```
{
 "Id": "5efc3581-b8e8-11e7-9895-a6aabe61edb5",
  "destinations": [{
  "id": "5efc3581-b8e8-11e7-9895-a6aabe61edb5",
  "correlationId": "MyCorrelationId",
  "destination": "5519900001111."
}]
}
```

#### Respuesta de error de autenticación (401) <a href="#respuesta-de-error-de-autenticaci-n-401" id="respuesta-de-error-de-autenticaci-n-401"></a>

Si hay un problema en la autenticación del usuario, se espera el siguiente mensaje de error:

```
{
  "errorCode": 401,
  "errorMessage": "Authentication Error: No se encontró ningún usuario con esta combinación de nombre de usuario y token de autenticación."
}
```

### Callback de actualización de estado <a href="#callback-de-actualizaci-n-de-estado" id="callback-de-actualizaci-n-de-estado"></a>

> Ejemplo

```
{
  "total": 1,
  "data": [
    {
      "id": "8995c40f-1c3a-48d0-98ee-bbc603622a91",
      "correlationId": "...",
      "destination": "5411900000000",
      "origin": "5411900000000",
      "campaignId": 100,
      "campaignAlias": "...",
      "flowId": "...",
      "extraInfo": "...",
      "sent": true,
      "sentStatusCode": 1,
      "sentStatus": "sent status",
      "sentDate": "2017-12-18T17:09:31.891Z",
      "sentAt": 1513616971891,
      "delivered": true,
      "deliveredStatusCode": 1,
      "deliveredStatus": "delivered status",
      "deliveredDate": "2017-12-18T17:09:31.891Z",
      "deliveredAt": 1513616971891,
      "read": true,
      "readDate": "2017-12-18T17:09:31.891Z",
      "readAt": 1513616971891,
      "updatedDate": "2017-12-18T17:09:31.891Z",
      "updatedAt": 1513616971891
    }
  ],
  "clientInfo": {
      "customerId": 42,
      "subAccountId": 1291,
      "userId": 1
  }
}
```

Para cada actualización sobre el estado de los mensajes enviados (confirmación de entrega al usuario final, lectura de mensajes, etc.), se envíara un Callback / Webhook. Los callbacks se envían por lotes.

{% hint style="danger" %}
**IMPORTANTE: El endpoint al que sera enviado el webhook debe configurarse previamente con el equipo de soporte / operaciones.**
{% endhint %}

El formato de esta devolución será de acuerdo a la siguiente descripción:

| Campo          | Detalles                           | Tipo       |
| -------------- | ---------------------------------- | ---------- |
| **total**      | Número de callbacks en la llamada. | String     |
| **data**       | Lista de callbacks.                | Data\[]    |
| **clientInfo** | Información del cliente            | ClientInfo |

#### Datos: <a href="#datos" id="datos"></a>

| Campo                   | Detalles                                                                                                                                                                                 | Tipo    |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| **id**                  | ID del último mensaje                                                                                                                                                                    | String  |
| **correlationId**       | Un ID único configurado por usted para coincidir con el estado del mensaje (callback y DLR). Este parámetro es opcional y puede usar el ID generado por ChatClub para esta coincidencia. | String  |
| **destination**         | Teléfono al que se envió el mensaje (incluido el código de país). Ejemplo: 5411900000000.                                                                                                | String  |
| **origin**              | Teléfono que identifica la cuenta de WhatsApp (incluido el código de país). Ejemplo: 5411900000000.                                                                                      | String  |
| **campaignId**          | ID de campaña previamente definido.                                                                                                                                                      | String  |
| **campaignAlias**       | Alias de campaña previamente definido.                                                                                                                                                   | String  |
| **extraInfo**           | Información adicional enviada con el mensaje original.                                                                                                                                   | String  |
| **sent**                | Indica si el mensaje fue enviado.                                                                                                                                                        | Boolean |
| **sentStatusCode**      | Código de estado generado por ChatClub para un mensaje que indica el estado de envío.                                                                                                    | Number  |
| **sentStatus**          | Descripción del estado enviado.                                                                                                                                                          | Boolean |
| **sentDate**            | Fecha en que se envió el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ.                                                                                                                       | String  |
| **sentAt**              | Hora en que se envió el mensaje, utilizando el formato Unix\_time                                                                                                                        | Number  |
| **delivered**           | Indica si el mensaje fue entregado al destino.                                                                                                                                           | Boolean |
| **deliveredStatusCode** | Código de estado generado por ChatClub para indicar que el mensaje fue entregado.                                                                                                        | Number  |
| **deliveredStatus**     | Descripción del estado de entrega                                                                                                                                                        | String  |
| **deliveredDate**       | Fecha en que se entregó el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ                                                                                                                      | String  |
| **deliveredAt**         | Hora en que se entregó el mensaje, utilizando el formato Unix\_time                                                                                                                      | Number  |
| **read**                | Indica si el mensaje fue leído por el destinatario.                                                                                                                                      | Boolean |
| **readDate**            | Fecha en que se leyó el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ                                                                                                                         | String  |
| **readAt**              | Hora en que se leyó el mensaje, utilizando el formato Unix\_time                                                                                                                         | String  |
| **updatedDate**         | Fecha en que se actualizó el estado del mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ                                                                                                         | String  |
| **updatedAt**           | Fecha en que se actualizó el estado del mensaje, utilizando el formato Unix\_time                                                                                                        | String  |

#### ClientInfo <a href="#clientinfo" id="clientinfo"></a>

| Campo            | Detalles                        | Tipo   |
| ---------------- | ------------------------------- | ------ |
| **customerId**   | Identificación del cliente.     | Number |
| **subAccountId** | Identificación de la subcuenta. | Number |
| **userId**       | Identificación del usuario.     | Number |

#### Estatus <a href="#estatus" id="estatus"></a>

Estatus que puedem ser enviados en el callback:

<table><thead><tr><th>Estatus</th><th width="164">Codigo de envio</th><th width="183">Codigo de entrega</th><th>Significado</th></tr></thead><tbody><tr><td><strong>CARRIER_COMMUNICATION_ERROR</strong></td><td>102</td><td></td><td>Error al subir el contenido multimedia a WhatsApp.</td></tr><tr><td><strong>REJECTED_BY_CARRIER</strong></td><td>103</td><td></td><td>Se produjo un error en la base de datos.</td></tr><tr><td><strong>SENT_SUCCESS</strong></td><td>2</td><td></td><td></td></tr><tr><td><strong>EXPIRED</strong></td><td>2</td><td>101</td><td>Mensaje vencido.</td></tr><tr><td></td><td></td><td></td><td>Error al enviar el mensaje porque es demasiado viejo.</td></tr><tr><td><strong>NOT_DELIVERED</strong></td><td>2</td><td>104</td><td>Limitación activada - muchos envíos de mensajes intentaron.</td></tr><tr><td></td><td></td><td></td><td>Error al enviar el mensaje porque el número de teléfono de este usuario es parte de un experimento.</td></tr><tr><td></td><td></td><td></td><td>Estructura no disponible: El cliente no puede mostrar HSM.</td></tr><tr><td></td><td></td><td></td><td>Error al enviar el mensaje porque está fuera de la ventana de soporte de forma libre para este usuario. Utilice una notificación HSM válida o reconsidere.</td></tr><tr><td></td><td></td><td></td><td>Error de carga del medio (error desconocido).</td></tr><tr><td></td><td></td><td></td><td>Error al enviar el mensaje porque su cuenta no es elegible. Verifique su cuenta WhatsApp Business.</td></tr><tr><td></td><td></td><td></td><td>Fallo de carga temporal. Por favor, intente de nuevo más tarde.</td></tr><tr><td><strong>DELIVERED_SUCCESS</strong></td><td>2</td><td>4</td><td></td></tr><tr><td><strong>READ_SUCCESS</strong></td><td>2</td><td>5</td><td></td></tr><tr><td><strong>INVALID_DESTINATION_NUMBER</strong></td><td>202</td><td></td><td>Contacto WhatsApp no válido.</td></tr><tr><td><strong>DESTINATION_BLOCKED_BY_OPTOUT</strong></td><td>204</td><td></td><td>Destino bloqueado por OptOut.</td></tr><tr><td><strong>INVALID_MESSAGE_LENGTH</strong></td><td>206</td><td></td><td>Mensaje demasiado largo.</td></tr><tr><td><strong>INVALID_MESSAGE_TEXT</strong></td><td>207</td><td></td><td>El valor del parámetro no es válido.</td></tr><tr><td><strong>INVALID_CONTENT</strong></td><td>209</td><td></td><td>Tipo de mensaje no válido UNKNOWN.</td></tr><tr><td><strong>INVALID_SESSION</strong></td><td>210</td><td></td><td>La sesión no está abierta y no se ha establecido un HSM de Fallback.</td></tr><tr><td><strong>DESTINATION_BLOCKED_BY_OPTIN</strong></td><td>211</td><td></td><td></td></tr><tr><td><strong>DESTINATION_BLOCKED_BY_WHITELIST</strong></td><td>212</td><td></td><td></td></tr><tr><td><strong>INTERNAL_ERROR</strong></td><td>311</td><td></td><td>No se pudieron verificar los contactos de la API de WhatsApp.</td></tr></tbody></table>

### MO (Mensajes enviados por el usuario final a la cuenta de Whatsapp) <a href="#mo-mensajes-enviados-por-el-usuario-final-a-la-cuenta-de-whatsapp" id="mo-mensajes-enviados-por-el-usuario-final-a-la-cuenta-de-whatsapp"></a>

> Ejemplo de mensaje de texto:

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5419900000000",
      "origin": "5419900000000",
      "userProfile": {
        "nombre del usuario"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
        "type": "TEXT",
        "messageText": "Hola, este es un mensaje del usuario."
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

> Ejemplo de Extra Info:

```
{  
   "segmentation_list":[  
      {  
         "id":26,
         "customerId":42,
         "subAccountId":0,
         "name":"Movile WhatsApp Segmentation List",
         "active":true
      },
      {  
         "id":27,
         "customerId":43,
         "subAccountId":0,
         "name":"Movile WhatsApp Segmentation List 2",
         "active":true
      }
   ]
}
```

> Ejemplo de mensaje multimedia

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5419900000000",
      "origin": "5419900000000",
      "userProfile": {
        "nombre del usuario"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
            "type": "IMAGE",
           "mediaUrl": "https://...",
           "mimeType": "image/jpg",
           "caption": "..."
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

> Ejemplo de mensaje de ubicación:

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5419900000000",
      "origin": "5419900000000",
      "userProfile": {
        "nombre del usuario"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
           "location": {
               "geoPoint": "-22.894180,-47.047960",
               "name": "Movile",
               "address": "Av. Cel. Silva Telles"
           }
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

> Ejemplo de mensaje de contacto:

```
{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",      
      "userProfile": {
        "nombre del usuario"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
           "contacts":[  
                 {  
                    "addresses":[  
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"1 Hacker Way",
                          "type":"HOME",
                          "zip":"94025"
                       },
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"200 Jefferson Dr",
                          "type":"WORK",
                          "zip":"94025"
                       }
                    ],
                    "birthday":"2012-08-18",
                    "emails":[  
                       {  
                          "email":"test@fb.com",
                          "type":"WORK"
                       },
                       {  
                          "email":"test@whatsapp.com",
                          "type":"WORK"
                       }
                    ],
                    "name":{  
                       "first_name":"John",
                       "formatted_name":"John Smith",
                       "last_name":"Smith"
                    },
                    "org":{  
                       "company":"WhatsApp",
                       "department":"Design",
                       "title":"Manager"
                    },
                    "phones":[  
                       {  
                          "phone":"+1 (940) 555-1234",
                          "type":"HOME"
                       },
                       {  
                          "phone":"+1 (650) 555-1234",
                          "type":"WORK",
                          "wa_id":"16505551234"
                       }
                    ],
                    "urls":[  
                       {  
                          "url":"https://www.fb.com",
                          "type":"WORK"
                       }
                    ]
                 }
              ]
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}
```

En cada respuesta del usuario final (MO) se envía un Callback / webhook. Estos MO se envían por lotes.

{% hint style="danger" %}
**IMPORTANTE: El endpoint al que se enviará el webhook debe configurarse previamente con el equipo de soporte / operaciones.**
{% endhint %}

El formato de la respuesta será de acuerdo a la siguiente descripción:

| Campo     | Detalles                                              | Tipo   |
| --------- | ----------------------------------------------------- | ------ |
| **total** | Número de callbacks en la llamada.                    | String |
| **data**  | Lista de mensajes originados en dispositivos móviles. | Data   |

| Campo             | Detalles                                                                                                                                                                                 | Tipo        |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| **id**            | Última identificación del mensaje                                                                                                                                                        | String      |
| **source**        | Teléfono del remitente                                                                                                                                                                   | String      |
| **origin**        | Teléfono que identifica la cuenta de WhatsApp (incluido el código de país). Ejemplo: 5411900000000.                                                                                      | String      |
| **userProfile**   | Perfil del usuario que envió el mensaje                                                                                                                                                  | UserProfile |
| **correlationId** | Un ID único configurado por usted para coincidir con el estado del mensaje (Callback y DLR). Este parámetro es opcional y puede usar el ID generado por ChatClub para esta coincidencia. | String      |
| **campaignId**    | ID de campaña previamente definido.                                                                                                                                                      | String      |
| **campaignAlias** | Alias de Campaña previamente definido.                                                                                                                                                   | String      |
| **message**       | Mensaje MO.                                                                                                                                                                              | Message     |
| **receivedAt**    | Fecha en que se recibió el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ                                                                                                                      | String      |
| **receivedDate**  | Fecha en que se recibió el mensaje, utilizando el formato Unix\_time                                                                                                                     | String      |
| **extraInfo**     | Información extra relacionada con el mensaje. Formato: **Json**                                                                                                                          | String      |

### **Control de flujo de MO - Listas de segmentación**

El mensaje tendrá una lista de listas de segmentaciones en el campo Información adicional. Nuestros asociados lo utilizan para redirigir los mensajes a través de ciertos flujos. El nombre de la clave es **segmentation\_lists** y contiene una lista de **SegmentationList**.

| Campo            | Detalles                                  | Tipo    |
| ---------------- | ----------------------------------------- | ------- |
| **id**           | Identificador de la lista de segmentación | Integer |
| **customerId**   | Identificador de cliente                  | Integer |
| **subAccountId** | Identificador de subcuenta                | Integer |
| **name**         | Nombre de la lista de segmentación        | String  |
| **active**       | Estado de la lista de segmentación        | Boolean |

#### Mensaje: <a href="#mensaje" id="mensaje"></a>

| Campo           | Detalles                                                                      | Tipo       |
| --------------- | ----------------------------------------------------------------------------- | ---------- |
| **type**        | Tipo de mensaje enviado por el usuario final: TEXT - IMAGE - AUDIO - DOCUMENT | String     |
| **messageText** | El mensaje de texto (MO) enviado por el usuario final.                        | String     |
| **waGroupId**   | El grupo al que se envió el mensaje.                                          | String     |
| **mediaUrl**    | Url para descargar la multimedia enviada por el usuario final.                | String     |
| **mimeType**    | Tipo de archivo enviado por el usuario final.                                 | String     |
| **caption**     | Etiqueta de multimedia enviada por el usuario final.                          | String     |
| **location**    | Ubicación enviada por el usuario final.                                       | Location   |
| **contacts**    | Contactos enviados por el usuario final.                                      | Contact\[] |

#### UserProfile: <a href="#userprofile" id="userprofile"></a>

| Field    | Necesario | Detalles                         | Tipo   |
| -------- | --------- | -------------------------------- | ------ |
| **name** | No        | El nombre del perfil del usuario | String |

#### Location: <a href="#location" id="location"></a>

| Field        | Details                                                             | Type   |
| ------------ | ------------------------------------------------------------------- | ------ |
| **name**     | Nombre del sitio.                                                   | String |
| **address**  | Dirección del sitio.                                                | String |
| **geoPoint** | Geopoint enviada por el usuario final. Formato: “latitud, longitud” | String |

#### Contact: <a href="#contact" id="contact"></a>

| Campo         | Necesario | Detalles                                                | Tipo       |
| ------------- | --------- | ------------------------------------------------------- | ---------- |
| **addresses** | No        | Direcciones de contacto completas.                      | Address\[] |
| **birthday**  | No        | Fecha de cumpleaños como cadena con formato YYYY-MM-DD. | String     |
| **emails**    | No        | Direcciones de correo electrónico de contacto.          | Email\[]   |
| **name**      | No        | Nombre completo de contacto.                            | Name       |
| **org**       | No        | Información de la organización de contacto.             | Org        |
| **phones**    | No        | Teléfonos de contacto.                                  | Phone\[]   |
| **urls**      | No        | URLs de los contactos.                                  | Url\[]     |

#### Address: <a href="#address" id="address"></a>

| Campo             | Necesario | Detalles                           | Tipo   |
| ----------------- | --------- | ---------------------------------- | ------ |
| **street**        | No        | Número y nombre de la calle.       | String |
| **city**          | No        | Nombre de la ciudad.               | String |
| **state**         | No        | Abreviatura del estado.            | String |
| **zip**           | No        | Código postal.                     | String |
| **country**       | No        | Nombre completo del país.          | String |
| **country\_code** | No        | Abreviatura de país de dos letras. | String |
| **type**          | No        | Valores estándar: HOME, WORK.      | String |

#### Email: <a href="#email" id="email"></a>

| Campo     | Necesario | Detalles                      | Tipo   |
| --------- | --------- | ----------------------------- | ------ |
| **email** | No        | Correo electrónico.           | String |
| **type**  | No        | Valores estándar: HOME, WORK. | String |

#### Name: <a href="#name" id="name"></a>

| Campo               | Necesario | Detalles                                  | Tipo   |
| ------------------- | --------- | ----------------------------------------- | ------ |
| **first\_name**     | No        | Primer nombre.                            | String |
| **last\_name**      | No        | Apellido.                                 | String |
| **middle\_name**    | No        | Segundo nombre.                           | String |
| **name\_suffix**    | No        | Sufijo del nombre.                        | String |
| **name\_prefix**    | No        | Prefijo del nombre.                       | String |
| **formatted\_name** | No        | Nombre completo como aparece normalmente. | String |

#### Org: <a href="#org" id="org"></a>

| Campo          | Necesario | Detalles                             | Tipo   |
| -------------- | --------- | ------------------------------------ | ------ |
| **company**    | No        | Nombre de la empresa del contacto.   | String |
| **department** | No        | Nombre del departamento de contacto. | String |
| **title**      | No        | Título comercial de contacto.        | String |

#### Phone: <a href="#phone" id="phone"></a>

| Campo      | Necesario | Detalles                                          | Tipo   |
| ---------- | --------- | ------------------------------------------------- | ------ |
| **phone**  | No        | Número de teléfono formateado.                    | String |
| **type**   | No        | Valores estándar: CELL, MAIN, IPHONE, HOME, WORK. | String |
| **wa\_id** | No        | Identificador de WhatsApp.                        | String |

#### Url: <a href="#url" id="url"></a>

| Campo     | Necesario | Detalles                      | Tipo   |
| --------- | --------- | ----------------------------- | ------ |
| **phone** | No        | URL del contacto.             | String |
| **type**  | No        | Valores estándar: HOME, WORK. | String |

{% hint style="danger" %}
**Para los objetos que contienen un campo de tipo, los valores listados se consideran simplemente los valores estándar que se pueden ver, sin embargo, puede establecer el campo en cualquier valor descriptivo que elija.**
{% endhint %}

### API SFTP WhatsApp <a href="#api-sftp-whatsapp" id="api-sftp-whatsapp"></a>

#### Detalle de Conexión <a href="#detalle-de-conexi-n" id="detalle-de-conexi-n"></a>

| Campo             | Descripción                                                                |
| ----------------- | -------------------------------------------------------------------------- |
| **Hostname**      | ftp-messaging.wavy.global                                                  |
| **puerto**        | 2222                                                                       |
| **Protocolo**     | SFTP (transferencia sobre ssh, usando criptografía entre cliente-servidor) |
| **Autenticación** | username + senha (provisto por soporte)                                    |

{% hint style="danger" %}
**Es necesaria la liberación de sus IPs en el firewalls de Wavy Si fuera necesario liberación del firewall para salida sentido puerto 2222, usted debe liberar los DNS, o las IPs 200.219.220.54, 200.189.169.53 e 45.236.179.22**
{% endhint %}

### Envío de mensajes a través de SFTP <a href="#env-o-de-mensajes-a-trav-s-de-sftp" id="env-o-de-mensajes-a-trav-s-de-sftp"></a>

Para realizar el disparo de mensajes vía FTP es necesario generar un archivo con el formato siguiendo el ejemplo abajo: Mensaje HSM:

**2018-10-16;10:00;20:00;HSM;chatclub\_welcome;pt\_BR;DETERMINISTIC;nome|empresa**\
**telefone;nome;empresa**\
**551999999999;Nome1;Wavy**\
**551999999999;Nome2;Movile**

| 1ª Línea                                                   |
| ---------------------------------------------------------- |
| Fecha de envío (para casos de programación)                |
| Hora inicial de envío (para casos de programación)         |
| Hora final de envío (para casos de programación)           |
| Tipo de mensaje debe ser: HSM                              |
| Nombre (elementName) del HSM                               |
| Idioma (languageLocale) de HSM                             |
| Determinante o Fallback del idioma de HSM (languagePolicy) |
| Nombre de los parámetros de HSM                            |

\*\* Observaciones para la primera línea: \*\*

1 - Los nombres de los parámetros deben coincidir con los nombres de las columnas

2 - Las informaciones que no se utilicen se pueden dejar en blanco, pero deben mantener el punto y coma como separación. Ejemplo de un caso que no utilizamos programación (los campos iniciales quedan entre punto y coma y sin información dentro):; ; ; HSM; chatclub\_welcome; es\_ES; DETERMINISTIC; nombre | empresa

3 - Por defecto (predeterminado) la languagePolicy será determinante.

4 - Los nombres de los parámetros del HSM deben ser separados por “|” y no por “;”

| 2ª línea               |
| ---------------------- |
| Nombre de las columnas |

| 3ª y demás líneas:                              |
| ----------------------------------------------- |
| Destinatario y valores de los parámetros de HSM |

### Consulta de listas vía API <a href="#consulta-de-listas-v-a-api" id="consulta-de-listas-v-a-api"></a>

#### Solicitud <a href="#solicitud" id="solicitud"></a>

Usando GET, puede hacer una solicitud enviando todos los parámetros en la query string (cadena de consulta)

`GET http://api-messaging.wavy.global/v1/list/{listType}?customerId={customerId}&subAccountId={subAccountId}`

| Tipo de Lista                    | Valor pasado en {listType} |
| -------------------------------- | -------------------------- |
| **Whatsapp OPT-OUT List**        | OPTOUT                     |
| **Whatsapp OPT-IN List**         | OPTIN                      |
| **Whatsapp Blacklist**           | BLACKLIST                  |
| **Whatsapp Whitelist (para MT)** | WHITELIST                  |

El parámetro ***customerId*** es obligatorio, mientras que el ***subAccountId*** es opcional.

{% hint style="danger" %}
**Atención: Tenga cuidado de reemplazar ‘{’ y ‘}’ también. Por ejemplo, “{listType}” se convierte en “OPTIN”.**
{% endhint %}

Todavía es necesario pasar los siguientes headers:

| Header                  | Valor                           |
| ----------------------- | ------------------------------- |
| **Content-Type**        | application/json                |
| **authenticationToken** | Token de Messaging1             |
| **userName**            | Nombre de usuario de Messaging1 |

Puede obtener su nombre de usuario y su token a través de la plataforma: `https://messaging.wavy.global`

#### Respuesta <a href="#respuesta" id="respuesta"></a>

En caso de éxito, si hay datos asociados al customerId y al subAccountId, la solicitud devuelve un JSON con 3 atributos:

<table><thead><tr><th width="182">Atributo</th><th>Valor</th></tr></thead><tbody><tr><td><strong>success</strong></td><td>true</td></tr><tr><td><strong>status</strong></td><td>200</td></tr><tr><td><strong>data</strong></td><td>Link para descargar un archivo de tipo csv que contiene los campos “source” y “createdAt” de todos los destinos encontrados</td></tr></tbody></table>

La columna “createdAt” está en la zona horaria **America/Sao\_Paulo**, UTC-3 o UTC-2 en el horario de verano

En caso de que no haya datos relacionados con customerId y subAccountId, sólo se devuelve un JSON similar, pero sin el campo “data”, lo que significa que no hubo problemas con la solicitud, pero no había datos relativos a los parámetros pasados.

> Ejemplo de respuesta:

```
{
    "success": true,
    "status": 200,
    "data": "https://chatclub-cdn.wavy.global/2019/02/12/f2b8effb-d0bc-4327-86c2-48fedcb01b1b/list-42-4330544192402746957.csv"
}
```

### Consulta sesiones abiertas vía API <a href="#consulta-sesiones-abiertas-v-a-api" id="consulta-sesiones-abiertas-v-a-api"></a>

#### Solicitud <a href="#solicitud" id="solicitud"></a>

Para consultar sesiones abiertas a través de nuestra API, debe realizar una solicitud GET a la siguiente dirección:

`GET http://api-messaging.wavy.global/v1/session?customerId={customerId}&subAccountId={subAccountId}`

Pasar el parámetro ***customerId*** es obligatorio, mientras que ***subAccountId*** es opcional.

Atención: Tenga cuidado de reemplazar ‘{’ y ‘}’ también. Por ejemplo, “={customerId}” se convierte en “=42”.

También necesitará utilizar los siguientes headers:

| Header                  | Valor                           |
| ----------------------- | ------------------------------- |
| **Content-Type**        | application/json                |
| **authenticationToken** | Token de Messaging1             |
| **userName**            | Nombre de usuario de Messaging1 |

#### Respuesta <a href="#respuesta" id="respuesta"></a>

En el exito, si hay sesiones abiertas para el cliente especificado y subAccountId, la solicitud devuelve un JSON con el atributo:

| Atributo      | Valor                                                                                                                                  |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| **file\_url** | Link para descargar un archivo de tipo csv que contiene los campos “source” y “session\_created\_at” de todos los destinos encontrados |

Si no hay datos asociados con ***customerId*** y ***subAccountId***, el archivo devuelto estará vacío, sólo con el encabezado.

> Ejemplo de respuesta:

```
{
    "file_url": "https://chatclub-cdn.wavy.global/2019/02/13/633e33fc-3a3f-4ca5-a8b0-4b747fb67137/5bd46e2b-5990-4681-9b29-98ab6598960e"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-es.sinch.com/documentacion-tecnica/api-integraciones/whatsapp-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
