Saltar al contenido principal

Obtener registros de WhatsApp de un proceso

GET /whatsapp/records

Este servicio devuelve el historial completo de la conversación de WhatsApp de un proceso de Auco: los mensajes que el bot de Auco envió al participante, las respuestas del participante y los estados de entrega reportados por WhatsApp.

La respuesta es un arreglo plano en orden cronológico ascendente, sin paginación ni filtros. Si el proceso no tuvo actividad en WhatsApp, el arreglo llega vacío ([]).

Qué cubre esta página

Esta página documenta la consulta del historial de mensajes, no la configuración de WhatsApp como canal de firma o notificación. Para activar el flujo de firma por WhatsApp (options.whatsapp, options.both, options.flow) consulta Validaciones de Identidad.


Autenticación

Incluye tu llave publica en el encabezado Authorization.

Authorization: puk_xxx...

Parámetros de consulta

NombreTipoRequeridoDescripción
codeStringRequeridoCódigo del proceso. Mínimo 9 caracteres. Su longitud determina el tipo de proceso que se consulta.
userIdStringCondicionalIdentificador del participante dentro del proceso. Obligatorio en procesos de firma y no admitido en AucoFace.
Los registros son por participante

No existe forma de traer un proceso multifirmante completo en una sola llamada: debes consultar participante a participante y unir los resultados en tu integración.


🧩 Tipos de proceso soportados

La longitud de code determina el tipo de proceso que Auco consulta y si userId es obligatorio.

LongitudTipo de procesouserIdDe dónde obtienes los identificadores
9Contratorequeridocode y signProfile[].id de GET /document
10Documentorequeridocode y signProfile[].id de GET /document
16Validación de identidad (AucoFace)no admitidocode de GET /veriface
24Paquete de documentosrequeridoel id del paquete y signers[].userId

Los procesos de AucoFace tienen un solo participante, por eso no llevan userId.


🧪 Ejemplos de uso

tip

Puedes copiar cualquiera de los ejemplos según el lenguaje de tu preferencia.

🔹 Proceso de firma (code y userId)

curl --location 'https://api.auco.ai/v1.5/ext/whatsapp/records?code=CODEDOCUM&userId=01' \
--header 'Authorization: puk_tuClavePublica'

🔸 Proceso de AucoFace (solo code)

curl --location 'https://api.auco.ai/v1.5/ext/whatsapp/records?code=VERIFACECODE1234' \
--header 'Authorization: puk_tuClavePublica'

📥 Ejemplos de respuesta

🔹 Conversación con mensajes salientes y entrantes

[
{
"entity": "auco",
"phone": "+573001234567",
"message": "👋🏼 Hola Juan, has sido invitado a firmar un documento creado por ACME...",
"date": 1746028800000,
"actions": [
{ "action": "sent", "timestamp": 1746028800000 },
{ "action": "delivered", "timestamp": 1746028805000 },
{ "action": "read", "timestamp": 1746028860000 }
]
},
{
"entity": "signer",
"phone": "+573001234567",
"message": "comenzar",
"date": 1746028900000
},
{
"entity": "auco",
"phone": "+573001234567",
"message": "Este es el documento, recuerda que debes leerlo en su *totalidad*.",
"date": 1746028950000,
"actions": [
{ "action": "sent", "timestamp": 1746028950000 },
{ "action": "delivered", "timestamp": 1746028952000 }
]
},
{
"entity": "signer",
"phone": "+573001234567",
"message": "Completo el formulario",
"date": 1746029050000
}
]

Los mensajes entrantes de este ejemplo muestran los dos casos que puedes encontrar. El segundo registro, comenzar, es el texto de un botón que pulsó el participante. El último, Completo el formulario, no es algo que el participante escribiera: es la referencia con la que se registró una acción suya dentro del flujo. Ese texto es descriptivo y varía según el proceso, así que no lo uses para detectar acciones en tu integración.

🔸 Mensaje que no se pudo entregar

[
{
"entity": "auco",
"phone": "+573001234567",
"message": "👋🏼 Hola Juan, has sido invitado a firmar un documento creado por ACME...",
"date": 1746028800000,
"actions": [
{ "action": "sent", "timestamp": 1746028800000 },
{
"action": "failed",
"timestamp": 1746028802000,
"errors": ["WHATSAPP_NUMBER_NOT_REGISTERED"]
}
]
}
]

🔸 Proceso sin actividad en WhatsApp

[]

📋 Campos de la respuesta

CampoTipoDescripción
entityStringSiempre presente. auco = mensaje saliente enviado por el bot de Auco. signer = mensaje entrante enviado por el participante.
phoneStringSiempre presente. Teléfono del participante en formato internacional, con indicativo de país y el signo +.
messageStringSiempre presente. Texto plano ya renderizado: las plantillas de WhatsApp llegan con sus variables sustituidas.
dateNumberSiempre presente. Timestamp epoch en milisegundos.
actionsArray<Object>Opcional. Solo en mensajes con estados de entrega reportados por WhatsApp. Los mensajes del participante (entity: "signer") no lo incluyen.
actions[].actionStringEstado de entrega: sent, delivered, read o failed.
actions[].timestampNumberTimestamp epoch en milisegundos del momento en que WhatsApp reportó el estado.
actions[].errorsArray<String>Opcional. Solo cuando action es failed. Contiene los motivos del fallo.
Fechas en milisegundos

Tanto date como actions[].timestamp están en milisegundos, no en segundos. Por ejemplo, 1746028800000 corresponde a 2025-04-30T16:00:00.000Z. Si el lenguaje de tu integración espera segundos, divide el valor entre 1000.

No compares message con textos fijos

La respuesta no incluye URLs ni archivos de medios. Cuando el participante envía un adjunto o realiza una acción dentro del flujo, el registro guarda una referencia en texto de esa acción (por ejemplo, algo como Completo el formulario) en lugar del contenido.

Ese texto es descriptivo, no un identificador: depende del flujo del proceso, puede estar personalizado y puede cambiar. Si tu integración necesita reaccionar a acciones concretas, no la construyas comparando el contenido de message.

Para descargar los archivos que el participante cargó usa Consultar Proceso y Anexos.


🔄 Estados de entrega (actions[].action)

EstadoDescripción
sentAuco entregó el mensaje a WhatsApp y este lo aceptó para su envío.
deliveredWhatsApp confirmó que el mensaje llegó al dispositivo del participante.
readEl participante abrió el mensaje.
failedWhatsApp no pudo entregar el mensaje; el motivo viene en actions[].errors.

Los estados son acumulativos y llegan en el orden en que WhatsApp los reporta. Un mensaje puede quedarse en sent si el participante tiene desactivadas las confirmaciones de lectura.


🚫 Motivos de fallo (actions[].errors)

Estos códigos no son códigos HTTP: la consulta puede devolver 200 y contener mensajes con estado failed.

CódigoDescripción
WHATSAPP_RATE_LIMITSe excedió el límite de mensajes que WhatsApp permite en la ventana de tiempo actual.
WHATSAPP_NUMBER_NOT_REGISTEREDEl número del participante no está registrado en WhatsApp.
WHATSAPP_NO_ACTIVE_CONVERSATIONNo hay conversación activa; WhatsApp no admite mensajes fuera de plantilla.
WHATSAPP_UNSUPPORTED_MESSAGE_TYPEWhatsApp rechazó el tipo de mensaje.
WHATSAPP_TEMPLATE_NOT_FOUNDLa plantilla usada no existe.
WHATSAPP_TEMPLATE_PAUSEDLa plantilla está pausada por WhatsApp.
WHATSAPP_TEMPLATE_DISABLEDLa plantilla fue deshabilitada por WhatsApp.
WHATSAPP_SERVICE_UNAVAILABLEEl servicio de WhatsApp no estaba disponible.
WHATSAPP_NUMBER_NOT_ACTIVEEl número emisor de Auco no estaba activo.
WHATSAPP_SEND_ERRORError de envío no clasificado.

⚠️ Respuestas de error

CódigoDescripción
400Error de validación o proceso no encontrado: CODE_REQUIRED (falta code), CODE_NOT_VALID (code de menos de 9 caracteres), USER_ID_REQUIRED (falta userId en un proceso de firma), USER_ID_NOT_ALLOWED (se envió userId en un proceso de AucoFace) y PROCESS_NOT_FOUND
401Autenticación inválida o ausente

PROCESS_NOT_FOUND se devuelve cuando el proceso no existe, no pertenece a tu compañía, el participante no está en el proceso, o el proceso de AucoFace no usó WhatsApp como canal.

Procesos de AucoFace por web

Un proceso de AucoFace realizado por web, sin canal WhatsApp, devuelve PROCESS_NOT_FOUND en lugar de un arreglo vacío.