esofitec. CoreDocs

esofitec. CoreDocs

Addons a medida / 4198 - ESOFITEC GLOBAL SOLUTIONS, S.L. / Sit.Sync.Smg

Resolución de problemas

Casi todas las incidencias del sincronizador se reducen a tres preguntas: si la ejecución llegó a producirse, si el contacto que se echa en falta llegó a entrar en la ventana de esa ejecución y si lo que la vista genera para él es lo que se espera. Este artículo ordena las herramientas para responderlas.

Dónde mirar primero#

Fuente Qué aporta
Correo de resumen Si llega con asunto …finalizada con errores, el cuerpo lista cada contacto que ha fallado y el mensaje devuelto. Si no llega, o hubo un fallo antes de arrancar o el propio correo falla
Fichero de log en C:\Logs\ Todo lo que ocurre a partir del nivel configurado en FileLogLevel. Es el único sitio donde queda registrado un fallo del correo o de la carga de la configuración
Ejecución en consola Lanzar Sit.Sync.Smg.exe sin parámetros desde la carpeta del ejecutable muestra el proceso en directo. Con ConsoleLogLevel a 0 se ve cada llamada a Salesmanago
Historial de la tarea programada Confirma si la tarea se lanzó y con qué código de salida
SIT_SYNC_SMG_LOG Qué cambios detectó a3ERP y cuándo. Si un contacto no está aquí dentro de la ventana, el sincronizador no lo ha visto
Vista SalesmanagoContacts Lo que se enviará exactamente para un contacto, antes del saneado de etiquetas

Tabla de síntomas#

Síntoma Causa probable Qué hacer
No llega el correo de resumen y el log no tiene errores NotificationEmail vacío Informarlo en appsettings.json
No llega el correo y el log tiene un error de autenticación de Microsoft Graph o SMTP Secreto de Entra ID caducado o credenciales de correo incorrectas. La sincronización en sí ha funcionado Renovar el secreto o corregir SitFrameworkMailerSettings
El log dice No se ha encontrado el archivo de configuración appsettings.json La tarea programada no tiene informado Iniciar en, o el fichero no se ha creado a partir del .sample Poner la carpeta del ejecutable en Iniciar en; comprobar que existe appsettings.json
El log dice No se ha proporcionado la sección… o …el dato… Configuración incompleta Rellenar los campos que indica el mensaje
El log dice 401: Acceso al método de la API no autorizado ClientId, ClientSecret u Owner de Salesmanago incorrectos Revisar la sección Salesmanago
El log dice No hay contactos modificados en a3ERP pero ha habido cambios Los desencadenadores no están instalados en la empresa, o el cambio fue en una tabla sin desencadenador Comprobar que existen los nueve desencadenadores; ver qué cambios se detectan
Un contacto modificado en a3ERP no aparece en Salesmanago La relación no es de cliente ni potencial, no tiene correo, o el cambio se hizo mientras el sincronizador estaba en marcha Comprobar la relación de contacto y consultar la vista; forzar el reenvío si hace falta
Un contacto sí llega pero le falta una etiqueta La etiqueta no cumple RegexPatternCustomTags, o la tabla de origen no tiene desencadenador y el contacto no se ha vuelto a tocar Ver qué etiquetas gestiona; forzar el reenvío
Una etiqueta creada a mano en Salesmanago desaparece cada noche Cumple el patrón de a3ERP y el sincronizador la borra al no generarla la vista Renombrarla con un formato que no cumpla el patrón
Salesmanago rechaza una etiqueta El literal contiene caracteres que el saneado no sustituye (: ; < = > ? @) Corregir el nombre en a3ERP o ajustar el saneado en el ejecutable
Un opt-out de Salesmanago no baja a a3ERP El correo no coincide exactamente con __CONTACTOS.EMAIL ni con ninguna relación, o el contacto no se modificó en Salesmanago dentro de la ventana Comparar correos; el sincronizador nunca crea contactos en a3ERP
Cada ejecución tarda mucho y no sincroniza los cambios del día Algún interruptor de FirstRun sigue a true Ponerlos los tres a false
Todos los contactos aparecen como nuevos en Salesmanago tras un cambio de Owner Los contactos pertenecen a otro propietario en Salesmanago Volver al Owner original o migrar los contactos en Salesmanago
Un contacto borrado en a3ERP sigue recibiendo campañas Borrar la relación no fuerza el opt-out Marcarlo obsoleto o vaciarle el correo antes de borrarlo; o forzar el opt-out a mano en Salesmanago

Comprobaciones útiles con SQL#

Las consultas se lanzan en la instancia donde está la empresa ESOFITEC y la base auxiliar ESOFITEC_OTRS.

Ver qué se enviará de un contacto#

SELECT * FROM ESOFITEC_OTRS.dbo.SalesmanagoContacts WHERE email = 'usuario@ejemplo.com';

Las columnas properties, dictionaryProperties y tags muestran los tres bloques separados por ::, con los literales de las etiquetas antes del saneado. Si el contacto no aparece, o no es de cliente ni potencial, o no tiene correo, y en ambos casos no se sincroniza.

Ver los cambios registrados en la última ventana#

SELECT SIT_SYNC_SMG_FECHA, SIT_SYNC_SMG_TIPO, SIT_SYNC_SMG_TABLA_ORIGEN, SIT_SYNC_SMG_EMAIL, SIT_SYNC_SMG_EMAIL_OLD, SIT_SYNC_SMG_ID_RELACION
FROM ESOFITEC.dbo.SIT_SYNC_SMG_LOG
WHERE SIT_SYNC_SMG_FECHA >= DATEADD(DAY, -1, GETDATE())
ORDER BY SIT_SYNC_SMG_FECHA DESC;

Si el contacto que falta no está en el resultado, el problema es de detección (desencadenadores o tabla de origen sin desencadenador), no de envío.

Forzar el reenvío de un contacto#

La forma más limpia es tocar el contacto desde a3ERP (abrir la relación de contacto y guardar), que dispara el desencadenador. Si se prefiere hacerlo desde SQL, basta con insertar a mano una fila en el registro con el identificador de la relación:

INSERT INTO ESOFITEC.dbo.SIT_SYNC_SMG_LOG (SIT_SYNC_SMG_EMAIL, SIT_SYNC_SMG_TIPO, SIT_SYNC_SMG_FECHA, SIT_SYNC_SMG_ID_RELACION, SIT_SYNC_SMG_TABLA_ORIGEN)
SELECT EMAIL, 'U', GETDATE(), ID, 'MANUAL'
FROM ESOFITEC.dbo.__CONTACTOSRELACION
WHERE EMAIL = 'usuario@ejemplo.com';

Para reenviar todos los cambios de la última semana, borrar lastTimestamp.txt de la carpeta del ejecutable. Para reenviar absolutamente todo, usar ExportAllContactsToSalesmanago del modo masivo.

Purgar el registro de cambios#

SIT_SYNC_SMG_LOG crece con cada cambio y el sincronizador no la limpia. Cualquier fila anterior a la última ejecución completada ya no se va a leer, así que se puede purgar periódicamente conservando un margen prudente:

DELETE FROM ESOFITEC.dbo.SIT_SYNC_SMG_LOG WHERE SIT_SYNC_SMG_FECHA < DATEADD(MONTH, -3, GETDATE());

Comportamientos y limitaciones conocidos#

  • El sincronizador nunca borra contactos ni etiquetas manuales en Salesmanago. Las bajas son opt-out forzados; las etiquetas que no cumplen el patrón no se tocan.
  • Borrar una relación de contacto en a3ERP no hace nada en Salesmanago. El contacto conserva sus datos, etiquetas y opt-in. Solo cambiar o vaciar el correo, o marcar la relación obsoleta, fuerza el opt-out.
  • Los contactos obsoletos siguen actualizándose. Se envían sus datos y etiquetas y, además, se les fuerza el opt-out en cada ejecución que los toque.
  • Sin lastTimestamp.txt la ventana es de siete días. No se reprocesa todo el histórico; para eso está el modo masivo.
  • Los cambios hechos durante la ejecución se pierden hasta el siguiente cambio del contacto. La ventana termina en el arranque y la siguiente empieza en el fin.
  • Una noche con fallo global de subida o de bajada no se reintenta sola. Si falla la lectura de SIT_SYNC_SMG_LOG o de la vista (Error exportando contactos a Salesmanago), o la consulta de contactos modificados a Salesmanago (Error importando OptIn/Out de contactos a a3ERP), lastTimestamp.txt se actualiza igualmente y esa ventana queda sin procesar. Hay que reenviar los cambios a mano: borrar lastTimestamp.txt recupera los últimos siete días.
  • Las tablas __CLIENTESPOT, ARTICULO y CARACTERISTICAS no tienen desencadenador. Los cambios en ellas se reflejan en Salesmanago cuando el contacto vuelve a modificarse por otra causa.
  • Toda etiqueta nueva en la vista debe tener un prefijo de cuatro caracteres y guion. Si no cumple ^[0-Z]{4}-.+, la vista la genera pero el ejecutable la descarta sin error ni aviso. Ocurrió con la primera versión de PART-NO-ENVIAR, que nació como PARTNER-NO-ENVIAR y nunca llegó a Salesmanago.
  • BAJA-<producto> se envía aunque el producto tenga otros mantenimientos vivos. No se retira al reactivar un mantenimiento del mismo producto mientras quede alguna línea de baja.
  • El saneado deja pasar : ; < = > ? @. Un nombre con esos caracteres puede producir una etiqueta que Salesmanago rechace.
  • La propiedad de diccionario Facturacion requiere que los códigos de la característica 6 de organización empiecen por dígito. Si no, se envía 0.
  • Cada relación de contacto es un contacto de Salesmanago. El correo es único en __CONTACTOSRELACION por una restricción de la empresa ESOFITEC; una persona con relaciones en dos empresas son dos contactos en Salesmanago, con correos y etiquetas distintos.
  • La bajada de opt-out escribe en __CONTACTOS.ENVIAREMAIL, no en el ENVIAREMAIL de la relación, y no toca Permitir publicidad.
  • El modo masivo borra el directorio de copia al terminar y, si se interrumpe, al relanzar vuelve a descargar toda la base de contactos.
  • SIT_SYNC_SMG_LOG no se purga automáticamente.
  • Las credenciales de SQL Server y de la API de Salesmanago van en claro en appsettings.json. Solo el secreto del correo admite cifrado.