CRM ZEUS EXTERNAL API ACCESS
(Registro externo de Contactos y Organizaciones)
Introducción
Un External API Access permite que organizaciones separadas colaboren
con CRM ZEUS. Por ejemplo, las organizaciones pueden compartir entre sí
especificaciones de API sin hacerlos públicos para acelerar el desarrollo de
un componente funcional requerido por la organización sin tener que esperar
a que dicho componente sea liberado por CRM ZEUS. Los administradores
controlan los orígenes de datos de las organizaciones y de estos podrán
crear Access Token y administrar su vigencia o conclusión. Agregar un
Access Token significa que usted confía en la otra organización con la que
compartirá el acceso concediéndole permisos de acceso a datos de su
origen de datos.
Palabras clave
Base de Datos (BD), Access Token de una conexión en CRM Zeus (aToken), Valor
numérico entero de cantidad variable (vInt), Cadena de texto de longitud variable
(cVariable), Cadena de texto de longitud fija (cFija), Valor lógico [true,false] (vLogico), BIT
[0,1] (vBit)
Requerimientos
- Contar con un Access Token de una conexión CRMZeus, este recurso se
puede obtener en https://crmzeus-app.com desde las conexiones disponibles.
Obtener Access Token - Iniciar sesión en https://crmzeus-app.com/ y ubicarte en el apartado de Conexiones
disponibles dentro de la sección de Organización, ahora haga click en la columna
Token en el botón de enlace “ ” para ver el form con los Access Token registrados
para la conexión elegida. - Para registrar un nuevo Access token para la conexión elegida, estando en el form
Access token API se desplaza a la pestaña Nuevo, proporcione el Nombre para
ubicar más fácilmente el Access token dentro del listado de registros previos,
también la fecha con la cual terminará la Vigencia de validez del Access token, por
último se registra el Tipo de conexión entrante que brindará el servicio de acceso a
datos (de momento solo está funcional el Público el cual permite conexiones desde
cualquier equipo a través de internet, la opción de Privado en el cual se define el
Host o la IP del equipo del cual solo se aceptarán las conexiones no está
desarrollado) para concluir el registro se presiona el botón Guardar. - En la pestaña Tokens haga click en la columna Token del Access token deseado
Implementación
Para agregar nuevos registros de CONTACTOS y PROSPECTOS a la BD mediante External API Access se requiere el acceso a los
métodos:
● Test de conectividad
● Vistas de catálogos
● Consulta de registros previos
● Nuevos registros
● Actualizar registros
Notas: Todos los métodos del External API Access de CRM ZEUS son mediante el método POST.
El aToken es una cadena hexadecimal de longitud variable. La URL_BASE es una ruta de respuesta para todos los métodos del
External API Access “CRMZeus
Test de conectividad:
TEST | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘test’ | headers: { “api_access_token”: aToken } data:{} |
{ “ERROR”: vInt, “TITULO”: cVariable } |
Si en la respuesta de la consulta se ha obtenido la propiedad ERROR con valor de “0” eso indica que se ha establecido la comunicación a la BD con un Access Token válido. Caso contrario se requiere atender los comentarios proporcionados en la propiedad TITULO.
Vistas de Catálogos:
CALIFICACIÓN DE ORGANIZACIÓN | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_CalificacionOrganizacion’ | headers: { “api_access_token”: aToken } data:{ “CALIFICACION_ID”: vInt } CALIFICACION_ID; Es un parámetro opcional |
[{ “CALIFICACION_ID”: vInt, “NOMBRE”: cVariable(50), “ES_SISTEMA”: cFija (1), “ES_DEFAULT”: cFija (1) },] |
En caso de no proporcionar el identificador de CALIFICACION_ID se recupera todo el catálogo. Si se proporciona el identificador CALIFICACION_ID como parámetro se filtra el listado del catálogo y solo se proporciona el registro al que corresponda el identificador.
ESTATUS DE CORREO DE CONTACTO DE ORGANIZACIÓN | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_EstatusDeCorreoContacto’ | headers: { “api_access_token”: aToken } data:{ “ESTATUS”: vInt } ESTATUS; Es un parámetro opcional |
[{ “ESTATUS”: vInt, “NOMBRE”: cVariable(50), “ES_DEFAULT”: cFija (1) },] |
En caso de no proporcionar el identificador de ESTATUS se recupera todo el catálogo. Si se proporciona el identificador ESTATUS como parámetro se filtra el listado del catálogo y solo se proporciona el registro al que corresponda el identificador.
GIRO DE ORGANIZACIÓN | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_Giro’ | headers: { “api_access_token”: aToken } data:{ “GIRO_ID”: vInt } GIRO_ID; Es un parámetro opcional |
[{ “GIRO_ID”: vInt, “NOMBRE”: cVariable(50), “ES_SISTEMA”: cFija (1), “ES_DEFAULT”: cFija (1) },] |
En caso de no proporcionar el identificador de GIRO_ID se recupera todo el catálogo. Si se proporciona el identificador GIRO_ID como parámetro se filtra el listado del catálogo y solo se proporciona el registro al que corresponda el identificador.
MONEDAS | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_Moneda’ | headers: { “api_access_token”: aToken } data:{ “MONEDA_ID”: vInt } MONEDA_ID; Es un parámetro opcional |
[{ “MONEDA_ID”: vInt, “NOMBRE”: cVariable(50), “TEXTO_IMPTE_LETRA”: cVariable(30), “SIMBOLO”: cVariable(10), “CLAVE_FISCAL”: cVariable(3), “ES_MONEDA_LOCAL”: cFija (1), “ES_DEFAULT”: cFija (1) },] |
En caso de no proporcionar el identificador de MONEDA_ID se recupera todo el catálogo. Si se proporciona el identificador MONEDA_ID como parámetro se filtra el listado del catálogo y solo se proporciona el registro al que corresponda el identificador.
TIPO DE CONTACTO DE ORGANIZACIÓN | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_TipoContacto’ | headers: { “api_access_token”: aToken } data:{ “TIPO_CONTACTO_CONTACTO_ID”: vInt } TIPO_CONTACTO_CONTACTO_ID; Es un parámetro opcional |
[{ “TIPO_CONTACTO_CONTACTO_ID”: vInt, “NOMBRE”: cVariable(50), “ES_DEFAULT”: cFija (1) },] |
En caso de no proporcionar el identificador de TIPO_CONTACTO_CONTACTO_ID se recupera todo el catálogo. Si se proporciona el identificador TIPO_CONTACTO_CONTACTO_ID como parámetro se filtra el listado del catálogo y solo se proporciona el registro al que corresponda el identificador.
VENDEDORES | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_Vendedor’ | headers: { “api_access_token”: aToken } data:{ “VENDEDOR_ID”: vInt } VENDEDOR_ID; Es un parámetro opcional |
[{ “VENDEDOR_ID”: vInt, “NOMBRE”: cVariable(50), “ES_DEFAULT”: cFija (1), “POLITICA_COMIS_VEN_ID”: vInt, “NOTAS”: cVariable(250), “CLAVE”: cVariable(20) },] |
En caso de no proporcionar el identificador de VENDEDOR_ID se recupera todo el catálogo. Si se proporciona el identificador VENDEDOR_ID como parámetro se filtra el listado del catálogo y solo se proporciona el registro al que corresponda el identificador.
ZONA DE ORGANIZACIÓN | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_ZonaOrganizacion’ | headers: { “api_access_token”: aToken } data:{ “ZONA_CLIENTE_ID”: vInt } ZONA_CLIENTE_ID; Es un parámetro opcional |
[{ “ZONA_CLIENTE_ID”: vInt, “NOMBRE”: cVariable(50), “ES_DEFAULT”: cFija (1) },] |
En caso de no proporcionar el identificador de ZONA_CLIENTE_IDse recupera todo el catálogo. Si se proporciona el identificador ZONA_CLIENTE_ID como parámetro se filtra el listado del catálogo y solo se proporciona el registro al que corresponda el identificador.
Consulta de registros previos:
BUSCAR CONTACTOS POR TELEFONO O CORREO | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘contact/find_Contacto’ | headers: { “api_access_token”: aToken } data:{ “EMAIL”: cVariable (200), “TELEFONO”: cVariable (50), } EMAIL; Si se proporciona serán listados los CONTACTOS donde el correo coincida con la cadena proporcionada. TELEFONO; Si se proporciona serán listados los CONTACTOS donde el teléfono coincida con la cadena proporcionada. |
[{ CONTACTO_CONTACTO_ID: vInt, NOMBRE: cVariable(100), PUESTO: cVariable(50), TIPO_CONTACTO_CONTACTO_ID: vInt, TIPO_CONTACTO: cVariable(50), TELEFONO: cVariable(50), CELULAR: cVariable(35), CORREO: cVariable(200), CLIENTE_ID: vInt, TITULO: cVariable(30), ES_PPAL: cFija (1), ES_DEFAULT: cFija (1), CONTACTO_CONTACTOS_EMAIL_ID: vInt, CUMPLE_MES: vInt, CUMPLE_DIA: vInt, PASSWORD: cVariable(10), ORG:{ ORG_ID: vInt, NOMBRE: cVariable(250), NOMBRE_CALLE: cVariable(100), NUM_EXTERIOR: cVariable(10), COLONIA: cVariable(100), CIUDAD_ID: vInt, TELEFONO1: cVariable(35), T: cFija (1), TIPO_ORG: vInt, TIPO_ORG_NOMBRE: cVariable(15), TIPO_ORGANIZACION_ID: vInt, CLI_PRO: cFija (1), } ] |
Se requiere que proporcionen al menos uno de los parámetros y según sea el caso se recuperan los registros en los que coincidan completamente el correo o el teléfono determinado por los parámetros enviados al método.
LISTAR CONTACTOS | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_Contacto’ | headers: { “api_access_token”: aToken } data:{ “pagination”: {FIRST: vInt, SKIP: vInt}, “filter”: cVariable (50), “CLIENTE_ID”: vInt } pagination; Es un parámetro opcional, si se proporciona debe ser proporcionada la cantidad de elementos que serán listados en el parámetro “FIRST” y la cantidad de registros que serán saltados en la consulta. filter; Es un parámetro opcional, si se proporciona serán listados los CONTACTOS donde el nombre coincida con la cadena proporcionada. CLIENTE_ID; Es un parámetro obligatorio, debe proporcionarse para listar los CONTACTOS asociados a la ORGANIZACIÓN de la que se ha proporcionado el identificador en este parámetro. |
[{ resources: [{ CONTACTO_CONTACTO_ID: vInt, NOMBRE: cVariable(100), PUESTO: cVariable(50), TIPO_CONTACTO_CONTACTO_ID: vInt, TIPO_CONTACTO: cVariable(50), TELEFONO: cVariable(50), CELULAR: cVariable(35), CORREO: cVariable(200), CLIENTE_ID: vInt, TITULO: cVariable(30), ES_PPAL: cFija (1), ES_DEFAULT: cFija (1), CONTACTO_CONTACTOS_EMAIL_ID: vInt, CUMPLE_MES: vInt, CUMPLE_DIA: vInt, PASSWORD: cVariable(10) }], total: vInt }] |
En caso de no proporcionar “pagination” se recupera todo el catálogo determinado por el parámetro “CLIENTE_ID”. Si se proporciona el parametro “S” como parámetro “filter” se recuperan los registros en los que coincidan completa o parcialmente el nombre pero que pertenezcan a la organización de la que se ha proporcionado el identificador.
LISTAR CONTACTO | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘contact/get_Contacto’ | headers: { “api_access_token”: aToken } data:{ “CONTACTO_CONTACTO_ID”: vInt } CONTACTO_CONTACTO_ID; Es un parámetro obligatorio el cual es el identificador del registro que se pretende recuperar. |
[{ CONTACTO_CONTACTO_ID: vInt, NOMBRE: cVariable(100), PUESTO: cVariable(50), TIPO_CONTACTO_CONTACTO_ID: vInt, TIPO_CONTACTO: cVariable(50), TELEFONO: cVariable(50), CELULAR: cVariable(35), CORREO: cVariable(200), CLIENTE_ID: vInt, TITULO: cVariable(30), ES_PPAL: cFija (1), ES_DEFAULT: cFija (1), CONTACTO_CONTACTOS_EMAIL_ID: vInt, CUMPLE_MES: vInt, CUMPLE_DIA: vInt, PASSWORD: cVariable(10), ORG:{ ORG_ID: vInt, NOMBRE: cVariable(50), NOMBRE_CALLE: cVariable(430), NUM_EXTERIOR: cVariable(10), COLONIA: cVariable(100), CIUDAD_ID: vInt, TELEFONO1: cVariable(50), CALLE: cVariable(430) }, CIUDAD:{ CIUDAD_ID: vInt, ESTADO_ID: vInt, PAIS_ID: vInt, NOMBRE: cVariable(50), ES_DEFAULT: cFija(1), ESTADO: cVariable(50), PAIS: cVariable(50), ESTADO_ABREV: cVariable(10), PAIS_ABREV: cVariable(3) }}] |
Debe proporcionarse el identificador “CONTACTO_CONTACTO_ID” para recuperar el registro objetivo de la consulta.
LISTAR ORGANIZACIONES | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘catalog/getLst_Organizacion’ | headers: { “api_access_token”: aToken } data:{ “pagination”: {FIRST: vInt, SKIP: vInt}, “filter”: cVariable (50), “CLIENTE_ID”: vInt } pagination; Es un parámetro opcional, si se proporciona debe ser proporcionada la cantidad de elementos que serán listados en el parámetro “FIRST” y la cantidad de registros que serán saltados en la consulta. filter; Es un parámetro opcional, si se proporciona serán listados los CONTACTOS donde el nombre coincida con la cadena proporcionada. CLIENTE_ID; Es un parámetro opcional, debe proporcionarse para listar la ORGANIZACIÓN de la que se ha proporcionado el identificador en este parámetro. |
[{ RAZON_SOCIAL: cVariable(200), NOMBRE_COMERCIAL: cVariable(200), CONTACTO_ID: vInt, CONTACTO_PRINCIPAL: cVariable(100), TIPO_CLIENTE_ID: vInt, TIPO_CLIENTE: cVariable(50), CALIFICACION_ID: vInt, CALIFICACION: cVariable(50), GIRO_ID: vInt, GIRO: cVariable(50), ORIGEN_ID: vInt, ORIGEN: cVariable(50), ZONA_CLIENTE_ID: vInt, ZONA: cVariable(50), VENDEDOR_ID: vInt, RESPETAR_VENDEDOR: vFija(1), VENDEDOR: cVariable(50), TELEFONO1: cVariable(35), CLIENTE_ID: vInt, CLI_PRO: vFija(1), TIPO_ORG: vInt, COND_PAGO_ID: vInt, MONEDA_ID: vInt, DIR_CLI_ID: vInt, CLAVE_CLIENTE_ID: vInt, CALLE: cVariable(430), NOMBRE_CALLE: cVariable(430), NUM_EXTERIOR: cVariable(10), COLONIA: cVariable(100), CIUDAD_ID: vInt, ESTADO_ID: vInt, PAIS_ID: vInt, CODIGO_POSTAL: cVariable(10), FECHA_ULT_ACCION: vFecha, COBRADOR_ID: vInt, LIMITE_CREDITO: vDecimal, ESTATUS: vFija(1), FECHA_SUSP: vFecha, FECHA_HORA_CREACION: vFecha, USUARIO_CREADOR: cVariable(31), COBRAR_IMPUESTOS: vFija(1), RETIENE_IMPUESTOS: vFija(1), USO_CFDI: vFija(3), FORMA_PAGO_SAT: vFija(2), CORREO_ENVIO: cVariable(60), FECHA_HORA_ULT_MODIF: vFecha, USUARIO_ULT_MODIF: cVariable(35), CLIENTE_MATRIZ_ID: vInt, LIGADO_A_ORGANIZACION: vFija(1) },] |
En caso de no proporcionar “pagination” se recupera todo el catálogo determinado por el parámetro “CLIENTE_ID”. Si se proporciona el parametro “filter” se recuperan los registros en los que coincidan completa o parcialmente el nombre pero que pertenezcan a la organización de la que se ha proporcionado el identificador.
LISTAR ORGANIZACIÓN | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘org/get_Organizacion’ | headers: { “api_access_token”: aToken } data:{ “CLIENTE_ID”: vInt } CLIENTE_ID; Es un parámetro obligatorio el cual es el identificador del registro que se pretende recuperar. |
[{ CLAVE: cVariable(20), RAZON_SOCIAL: cVariable(200), NOMBRE_COMERCIAL: cVariable(200), CONTACTO_ID: vInt, CONTACTO_PRINCIPAL: cVariable(100), TIPO_CLIENTE_ID: vInt, TIPO_CLIENTE: cVariable(50), CALIFICACION_ID: vInt, CALIFICACION: cVariable(50), GIRO_ID: vInt, GIRO: cVariable(50), ORIGEN_ID: vInt, ORIGEN: cVariable(50), ZONA_CLIENTE_ID: vInt, ZONA: cVariable(50), VENDEDOR_ID: vInt, RESPETAR_VENDEDOR: vFija(1), VENDEDOR: cVariable(50), TELEFONO1: cVariable(35), CLIENTE_ID: vInt, CLI_PRO: cFija(1), TIPO_ORG: vInt, EMAIL: cVariable(200), COND_PAGO_ID: vInt, MONEDA_ID: vInt, DIR_CLI_ID: vInt, CLAVE_CLIENTE_ID: vInt, CALLE: cVariable(430), NOMBRE_CALLE: cVariable(430), NUM_EXTERIOR: cVariable(10), NUM_INTERIOR: cVariable(10), COLONIA: cVariable(100), POBLACION: cVariable(100), REFERENCIA: cVariable(100), CIUDAD_ID: vInt, ESTADO_ID: vInt, PAIS_ID: vInt, CODIGO_POSTAL: cVariable(10), FECHA_ULT_ACCION: vFecha, RFC_CURP: cVariable(18), COBRADOR_ID: vInt, LIMITE_CREDITO: vDecimal, ESTATUS: cFija(1), FECHA_SUSP: vFecha, CAUSA_SUSP: cVariable(100), FECHA_HORA_CREACION: vFecha, USUARIO_CREADOR: cVariable(31), COBRAR_IMPUESTOS: vFija(1), RETIENE_IMPUESTOS: vFija(1), USO_CFDI: vFija(3), FORMA_PAGO_SAT: vFija(2), CORREO_ENVIO: cVariable(60), FECHA_HORA_ULT_MODIF: vFecha, USUARIO_ULT_MODIF: cVariable(35), CLIENTE_MATRIZ_ID: vInt, LIGADO_A_ORGANIZACION: cVariable, CIUDAD: cVariable(50), ESTADO: cVariable(50), ESTADO_ABREV: cVariable(10), PAIS: cVariable(50), PAIS_ABREV: cVariable(10) }] |
Debe proporcionarse el identificador “CLIENTE_ID” para recuperar el registro objetivo de la consulta.
Nuevos registros:
AGREGAR CONTACTO | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘contact/add_Contacto’ | headers: { “api_access_token”: aToken } data: { “NOMBRE”: cVariable(100), “TITULO”: cVariable(30), “TELEFONO”: cVariable(50), “CELULAR”: cVariable(35), “ES_PPAL”: vLogico, // true, false “CUMPLE_MES”: vInt, // 1 a 12 “CUMPLE_DIA”: vInt, // 1 a 31 “PUESTO”: cVariable(50), “CLIENTE_ID”: vInt, “PASSWORD”: cVariable(10), “TIPO_CONTACTO_CONTACTO_ID”: vInt, “CORREOS”: { “resources”: [{ “EMAIL”: cVariable(200), “ES_PPAL”: cFija(1), // 0,1 “USAR_MKT”: cFija(1), // S, N “ESTATUS_ID”: cFija(1) }], } } |
[{ “error”: vInt, “errData”: {}, “id”: vInt }] |
Si en el registro se ha proporcionado correos para asociarlos es necesario que se proporcionen todas las propiedades de las cuentas de correo. En caso de crearse un nuevo registro se recibirá como respuesta un objeto { error: 0, errData: ‘’, id: vInt }y en caso de algún error { error: 1, errData: {} }
AGREGAR ORGANIZACIÓN | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘org/add_Organizacion’ | headers: { “api_access_token”: aToken } data: { “CLAVE”: cVariable(20), “RAZON_SOCIAL”: cVariable(200), “NOMBRE_COMERCIAL”: cVariable(200), “TELEFONO1”: cVariable(35), “TIPO_ORG”: vInt, “NOMBRE_CALLE”: cVariable(430), “NUM_EXTERIOR”: cVariable(10), “NUM_INTERIOR”: cVariable(10), “COLONIA”: cVariable(100), “REFERENCIA”: cVariable(100), “CODIGO_POSTAL”: cVariable(10), “LIMITE_CREDITO”: vDecimal, “NOTAS”: cVariableBLOB, “FECHA_SUSP”: vFecha, “CAUSA_SUSP”: ‘’, “RFC_CURP”: cVariable(18), “COBRAR_IMPTOS”: vBoolean, “RETIENE_IMPTOS”: vBoolean, “VENDEDOR_ID”: vInt, “CIUDAD_ID”: vInt, “ESTADO_ID”: vInt, “PAIS_ID”: vInt, “ZONA_CLIENTE_ID”: vInt, “CALIFICACION_ID”: vInt, “TIPO_CLIENTE_ID”: vInt, “GIRO_ID”: vInt, “ORIGEN_ID”: vInt, “ESTATUS”: cFija(1), “MONEDA_ID”: vInt, “COND_PAGO_ID”: vInt, “COBRADOR_ID”: vInt } |
[{ “error”: vInt, “errData”: {}, “id”: vInt }] |
En caso de crearse un nuevo registro se recibirá como respuesta un objeto: { error: 0, errData: ‘’, id: vInt }. En caso de algún error el detalle del error se presentará en el arreglo “errData”: { error: 1, errData: {} }
Actualizar registros:
ACTUALIZAR CONTACTO | ||
---|---|---|
Url | Parámetros | Respuesta |
URL_BASE + ‘contact/upd_Contacto’ | headers: { “api_access_token”: aToken } data: { “CONTACTO_CONTACTO_ID”: vInt, “CLIENTE_ID”: vInt, “NOMBRE”: cVariable(100), “TITULO”: cVariable(30), “TELEFONO”: cVariable(50), “CELULAR”: cVariable(35), “ES_PPAL”: vLogico, // true, false “CUMPLE_MES”: vInt, “CUMPLE_DIA”: vInt, “PUESTO”: cVariable(50), “PASSWORD”: cVariable(10), “TIPO_CONTACTO_CONTACTO_ID”: vInt, “CORREOS”: { “resources”: [{ “CONTACTO_CONTACTOS_EMAIL_ID”: vInt, “EMAIL”: cVariable(200), “ES_PPAL”: cFija(1), // 0,1 “USAR_MKT”: cFija(1), // S, N “ESTATUS_ID”: cFija(1) }], } “CORREOS_DEL”: [{ “CONTACTO_CONTACTOS_EMAIL_ID”: vInt }] } |
[{ “error”: vInt, “errData”: {}, “id”: vInt }] |
Si en el registro se ha proporcionado correos para asociarlos es necesario que se proporcionen todas las propiedades de las cuentas de correo salvo la de CONTACTO_CONTACTOS_EMAIL_ID que es exclusiva solo para cuentas de correo asociadas previamente. En caso de actualizarse el registro se recibirá como respuesta un objeto { error: 0, errData: ‘’, id: vInt }y en caso de algún error { error: 1, errData: {} }
Esto es para Juan Pablo:
Probadores: https://interno.crmzeus-app.com/t/ligas-documentacion-api-crmzeus/126