feat(umind): el canal correo puede acotarse a ciertos remitentes

"Responder a: todos los que escriban / solo a estos remitentes" — direcciones
completas o dominios, separados por coma. Un dominio (@miempresa.com) habilita
a toda esa empresa; lo que no pasa el filtro se marca leído y no se contesta:
decisión tomada, no correo pendiente que se relee en cada revisión.

El match de dominio es contra el dominio entero, nunca por sufijo:
"empresa.com" no habilita a alguien de "malaempresa.com" ni de un subdominio.
Ese es el clásico filtro que parece cerrado y no lo está, y acá decide a quién
le habla el agente en nombre del negocio — hay un test por cada agujero.

El filtro y el intervalo también se pueden cambiar por el update del canal sin
recrearlo, porque recrearlo pide la contraseña de la casilla de nuevo.

De paso quedó verificado que el módulo de soporte sigue intacto tras la
unificación del SMTP: los catorce tests de soporte (auto-respuesta, parseo
IMAP, clasificador, resúmenes) pasan en verde.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-23 20:14:35 -05:00
co-authored by Claude Opus 5
parent eddec45857
commit 9da2a057f2
8 changed files with 154 additions and 28 deletions
+5
View File
@@ -45,6 +45,11 @@ type UmindCanal struct {
// memoria, por la misma razón que el aviso de tope: los despliegues borran
// la RAM varias veces por día.
UltimaRevision *time.Time `json:"ultima_revision" gorm:"column:ultima_revision"`
// FiltroRemitentes acota a quién le responde el canal correo: direcciones
// o dominios separados por coma. Vacío = responde a todos. Un correo que
// no pasa el filtro se marca leído y no se contesta — el agente decidió,
// no está pendiente.
FiltroRemitentes string `json:"filtro_remitentes" gorm:"column:filtro_remitentes;type:text"`
}
// MarcarRevisionCanal deja constancia de que la casilla se acaba de revisar.