Envío de mensajes

En este artículo, examinaremos a fondo el proceso de enviar, editar y eliminar mensajes a través de la API de Wazzup.

Envío de mensajes

Para enviar mensajes es necesario hacer una solicitud:

POST https://api.wazzup24.com/v3/message

En el cuerpo de la solicitud debes pasar los parámetros del mensaje con los datos de autorización en el encabezado.

Parámetros de solicitud

¡La ruta no es idempotente! Las solicitudes repetidas con el mismo contenido resultarán en el envío de varios mensajes idénticos. Para protegerte contra posibles duplicados, puedes añadir la propiedad crmMessageId única para cada mensaje.

Si el mensaje ya fue enviado, cualquier otra solicitud con el mismo crmMessageId no se enviará, y se devolverá el error:

400 Bad Request
{ error: 'repeatedCrmMessageId', description: 'Ya has enviado un mensaje con el mismo crmMessageId' }
Para enviar plantillas WABA, en el campo text debes pasar el "código de plantilla", que puedes obtener del soporte. Si la plantilla contiene variables, debes reemplazarlas con los valores necesarios en el momento del envío. Puedes leer más sobre cómo añadir plantillas y ejemplos de uso en el artículo correspondiente.

Ejemplos de solicitud

Se solicita el envío de una plantilla WABA con tres botones. Cada uno tiene una carga útil.

 

fetch("https://api.wazzup24.com/v3/message", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer {apiKey|sidecarApiKey}",
  },
  body: {
    channelId: "24197d5f-06de-421f-8576-9f6e6cb67f28",
    chatType: "whatsapp",
    chatId: "79994621848",
    templateId: "6201005a-9a6f-486f-bdd5-e6cb86c76ddb",
    templateValues: ["value"]
    buttonsObject: {
     buttons: [
         { payload: "button_payload 1" },
         { payload: "button_payload 2" },
         { payload: "button_payload 3" }
     ]
    }
  },
});

La solicitud para las plantillas WABA con botones no requiere el texto del botón. Estas son moderadas junto con el texto principal de la plantilla, por lo que los botones no pueden ser cambiados.

buttonsObject solo es útil si necesitas especificar una carga útil (payload) para los botones.

En esta solicitud, enviamos un mensaje interactivo con tres botones: "Sí", "No" y "Quizás". Estos botones no tienen carga útil.

fetch("https://api.wazzup24.com/v3/message", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer {apiKey|sidecarApiKey}",
  },
  body: {
    channelId: "e0629e11-0f67-4567-92a9-2237e91ec1b9",
    refMessageId: "61e5a375-1760-452f-ad73-5318844ffc4f",
    crmUserId: "string-user-id",
    crmMessageId: "string-crm-message-id",
    chatId: "string-chat-id",
    chatType: "whatsapp",
    text: "message text",
    buttonsObject: {
     buttons: [
         {text: "Yes", type: "text"},
         {text: "No", type: "text"},
         {text: "Maybe", type: "text"}
     ]
    }
  },
});

Respuesta

Si envías una plantilla sin payload a través de la API, en el webhook de mensaje de respuesta se enviará el texto del botón correspondiente. Si envías un mensaje interactivo sin payload, se enviará el número de serie del botón, comenzando desde 0.

Parámetro Tipo Descripción
messageId String Identificador del mensaje.

Solo aparece cuando code=OK

chatId String ID del chat.

Solo aparece cuando code=OK

Ejemplo de respuesta:

HTTP/1.1 201 OK 
{ 
"messageId": "f66c53a6-957a-46b2-b41b-5a2ef4844bcb", 
"chatId": "79999999999" 
}

Errores al enviar mensajes

1. Valores de parámetros inválidos

Si un parámetro no cumple con los requisitos (por ejemplo, channelId no tiene formato UUID, chatId no es un string o chatType no corresponde a los valores permitidos), se devolverá:

{
"status": 400,
"requestId": "7ca68797d127735e72b066b0080e2cc0",
"error": "INVALID_MESSAGE_DATA",
"description": "Los datos del mensaje no son válidos",
"data": {
"fields": ["channelId"]
}
}

Solución: Verifica que los valores de los parámetros sean correctos. El array data.fields indicará cuál tiene el error.

2. Incompatibilidad entre tipo de transporte y canal

Si se especifica un channelId con un tipo de transporte, pero el chatType pertenece a otro transporte, se devolverá:

{
"status": 400,
"requestId": "21a9be7692d378b0270e7fc1d993381a",
"error": "WRONG_TRANSPORT",
"description": "No puedes enviar un mensaje de WhatsApp a un chat de VK",
"data": {
"channelId": "dffa1c7b-6db8-4b8f-b559-91166aba879e",
"transport": "whatsapp",
"chatType": "vk"
}
}

Solución: Asegúrate de que chatType coincida con el tipo de transporte del canal especificado.

3. Reutilización de crmMessageId

Si se incluye un crmMessageId que ya fue utilizado en los últimos 60 segundos, se devolverá:

{
"status": 400,
"requestId": "c1005276e8a2b5aa23fcc94407d39f49",
"error": "REPEATED_CRM_MESSAGE_ID",
"description": "Ya has enviado un mensaje con el mismo crmMessageId",
"data": {
"crmMessageId": "1"
}
}

Solución: Usa valores únicos de crmMessageId para cada mensaje. El sistema verifica duplicados dentro de una ventana de 60 segundos.

Gestión de mensajes

Una vez enviado el mensaje, se puede editar o eliminar, siempre y cuando el canal lo soporte.

Edición de mensajes

Wazzup permite editar mensajes enviados. Puedes modificar el texto o el archivo adjunto, pero no ambos al mismo tiempo.

PATCH https://api.wazzup24.com/v3/message/:messageId

Incluye la clave API en el encabezado de la solicitud:

"Authorization": "Bearer {apiKey|sidecarApiKey}"

Cómo editar un mensaje:

  • Especifica el nuevo texto en el campo text.
  • Para reemplazar un archivo adjunto, usa contentUri.
  • No se pueden cambiar texto y archivo adjunto a la vez.
Parámetro Tipo Descripción
messageId String Identificador del mensaje (en la URL)
crmUserId String ID del usuario CRM, especificado con CRUD de usuarios
text String Texto del mensaje. Obligatorio si no se usa contentUri
contentUri String URL del archivo a enviar. Obligatorio si no se usa text

Ejemplo para mensajes de texto:

curl --location \
--request PATCH 'https://api.wazzup24.com/v3/message/6f1b3c67-3008-488b-9abc-12fcac6de134' \
--header 'Authorization: Bearer {apiKey|sidecarApiKey}' \
--header 'Content-Type: application/json' \
--data '{
"text": "Texto actualizado del mensaje",
"crmUserId": "2e0df379-0e3c-470f-9b36-06b9e34c3bdb"
}'

Ejemplo para mensajes con archivos adjuntos:

curl --location \
--request PATCH 'https://api.wazzup24.com/v3/message/6f1b3c67-3008-488b-9abc-12fcac6de134' \
--header 'Authorization: Bearer {apiKey|sidecarApiKey}' \
--header 'Content-Type: application/json' \
--data '{
"contentUri": "https://example.com/image.png",
"crmUserId": "2e0df379-0e3c-470f-9b36-06b9e34c3bdb"
}'

Eliminación de mensajes

Para eliminar un mensaje, utiliza:

DELETE https://api.wazzup24.com/v3/message/:messageId

Incluye la clave API en el encabezado:

"Authorization": "Bearer {apiKey|sidecarApiKey}"

Ejemplo de eliminación:

curl --location \
--request DELETE 'https://api.wazzup24.com/v3/message/6f1b3c67-3008-488b-9abc-12fcac6de134' \
--header 'Authorization: Bearer {apiKey|sidecarApiKey}'