Ir al contenido

Modificar Contactos

Permite modificar uno o múltiples contactos de clientes existentes en una única petición. Cada contacto viaja con su array details: los medios de contacto que ya existen se actualizan y los que no existen se agregan. Los medios de contacto nunca se eliminan por este endpoint; para retirar uno, envíelo con state: "N".

Método: POST

https://api.ventasremotas.com/v1/contacts/batch-update
Header Valor Descripción Requerido
Content-Type application/json Indica que los datos se envían en formato JSON Sí
Accept application/json Indica que la respuesta debe estar en formato JSON No
Subscription-Key {subscription_key} Clave de suscripción para acceder a la API Sí
Authorization Bearer {access_token} Token de acceso obtenido del endpoint /token Sí*

El body debe ser un array de objetos, donde cada objeto representa un contacto a actualizar junto con sus medios de contacto.

Parámetro Valor Descripción
Mínimo de items 1 El array no puede estar vacío
Máximo de items 10,000 Número máximo de contactos por petición
Mínimo de details por contacto 0 Un array vacío actualiza solo los datos del contacto, sin tocar sus medios de contacto

El cuerpo (Body) de la solicitud debe enviarse en formato JSON y debe incluir un array con los siguientes parámetros.

Campo Tipo Nulo Restricciones Descripción
code number Sí Código único del contacto en la base de datos. Llave de identificación alternativa, usada cuando erp_code es null
client_id string (max 18) No No permite: espacio, #, %, &, *, {, }, \, :, <, >, ?, /, +, . Código del cliente al que pertenece el contacto. Acota la búsqueda: el contacto debe pertenecer a este cliente
first_name string (max 100) No Primer nombre del contacto
second_name string (max 100) Sí Segundo nombre del contacto
first_last_name string (max 100) No Primer apellido del contacto
second_last_name string (max 100) Sí Segundo apellido del contacto
position string (max 100) Sí Cargo que ocupa el contacto
department string (max 100) Sí Departamento o área a la que pertenece
company_name string (max 100) Sí Nombre de la empresa del contacto, cuando difiere del cliente
relation string (max 100) Sí Relación del contacto con el cliente
observations string (max 500) Sí Observaciones generales del contacto
state string (max 1) No Valores permitidos: Y, N Estado del contacto (Activo/Inactivo)
erp_code string (max 50) Sí Único por empresa Código del contacto en el sistema ERP. Es la llave de identificación principal
details array No Puede ser vacío Medios de contacto a agregar o actualizar. Cada elemento sigue la tabla siguiente
Campo Tipo Nulo Restricciones Descripción
type int No Valores: 1, 2, 3, 4 Tipo de medio de contacto: 1 (Correo electrónico), 2 (Teléfono), 3 (Dirección), 4 (Fecha)
value string (max 100) No Según el tipo, ver Reglas por tipo Valor del medio de contacto. Junto con type identifica el medio de contacto a actualizar
label string (max 100) Sí Obligatorio y no vacío cuando type es 4 Nombre de la fecha (Cumpleaños, Aniversario). Para los demás tipos se ignora y se guarda vacío
state string (max 1) No Valores permitidos: Y, N Estado del medio de contacto (Activo/Inactivo)
latitude decimal (24, 18) Sí Entre -90 y 90. Solo se guarda cuando type es 3 Latitud de la dirección georreferenciada. Debe enviarse junto con longitude
longitude decimal (24, 18) Sí Entre -180 y 180. Solo se guarda cuando type es 3 Longitud de la dirección georreferenciada. Debe enviarse junto con latitude
type Medio Regla sobre value label latitude / longitude
1 Correo electrónico Debe ser una dirección de correo válida Se ignora, se guarda vacío Se ignoran
2 Teléfono Solo dígitos, de 7 a 15, con + e indicativo del país opcional al inicio. Si trae +, el indicativo se separa y se guarda como indicativo de WhatsApp (por ejemplo +573001234567 → indicativo +57, número 3001234567). Sin +, se guarda tal cual como teléfono fijo Se ignora, se guarda el indicativo extraído o vacío Se ignoran
3 Dirección Texto libre con la dirección física Se ignora, se guarda vacío Opcionales, pero deben venir ambas o ninguna
4 Fecha Fecha en formato YYYY-MM-DD Obligatorio y no vacío Se ignoran

Cada elemento de details se busca dentro del contacto por type y value, tal como los devuelve Listar Contactos. En los teléfonos el indicativo forma parte de la identidad: +573001234567 y 3001234567 son dos medios de contacto distintos.

  • Si existe, se actualizan state, label (fechas) y las coordenadas (direcciones).
  • Si no existe, se agrega al contacto.
  • Ningún medio de contacto se elimina. Para cambiar el valor de un correo, teléfono, dirección o fecha, agregue el nuevo y envíe el anterior con state: "N".
  • Cualquier actualización, incluso solo de medios de contacto, actualiza la fecha de modificación del contacto, de modo que la aplicación móvil lo sincroniza.
  • string (max N): Cadena de texto con longitud máxima de N caracteres.
  • int: Número entero.
  • decimal (p, s): Número decimal donde p es la precisión total (dígitos enteros + decimales) y s es la escala (dígitos decimales).
    • Ejemplo: decimal (24, 18) permite hasta 6 dígitos enteros y 18 decimales (ej: 4.710988600000000000)
  • array: Lista de objetos JSON.

Aquí tienes un ejemplo de cómo debería quedar el cuerpo de la solicitud en formato JSON. El primer contacto se identifica por erp_code: cambia su cargo, inactiva el WhatsApp anterior, agrega el nuevo y corrige el nombre de la fecha. El segundo se identifica por code y solo actualiza sus datos:

[
{
"code": null,
"client_id": "CLI-001",
"first_name": "María",
"second_name": "Fernanda",
"first_last_name": "Gómez",
"second_last_name": "Ríos",
"position": "Gerente de Compras",
"department": "Compras",
"company_name": "Distribuciones El Norte S.A.S.",
"relation": "Cliente",
"observations": "Atiende de lunes a viernes en la mañana",
"state": "Y",
"erp_code": "ERP-CT-001",
"details": [
{
"type": 2,
"value": "+573001234567",
"label": null,
"state": "N",
"latitude": null,
"longitude": null
},
{
"type": 2,
"value": "+573109876543",
"label": null,
"state": "Y",
"latitude": null,
"longitude": null
},
{
"type": 4,
"value": "1985-03-14",
"label": "Cumpleaños",
"state": "Y",
"latitude": null,
"longitude": null
}
]
},
{
"code": 1024,
"client_id": "CLI-001",
"first_name": "Carlos",
"second_name": null,
"first_last_name": "Pérez",
"second_last_name": null,
"position": "Jefe de Bodega",
"department": "Logística",
"company_name": null,
"relation": "Recibe mercancía",
"observations": null,
"state": "Y",
"erp_code": null,
"details": []
}
]

{
"statusCode": 200,
"message": "Contacts updated successfully"
}