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.txtla 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_LOGo 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.txtse actualiza igualmente y esa ventana queda sin procesar. Hay que reenviar los cambios a mano: borrarlastTimestamp.txtrecupera los últimos siete días. - Las tablas
__CLIENTESPOT,ARTICULOyCARACTERISTICASno 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 dePART-NO-ENVIAR, que nació comoPARTNER-NO-ENVIARy 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
Facturacionrequiere que los códigos de la característica 6 de organización empiecen por dígito. Si no, se envía0. - Cada relación de contacto es un contacto de Salesmanago. El correo es único en
__CONTACTOSRELACIONpor una restricción de la empresaESOFITEC; 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 elENVIAREMAILde 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_LOGno 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.