udistrital / Cumplidos_y_certificaciones_documentacion

0 stars 0 forks source link

Implementar notificaciones por correo #131

Closed JuanCamiloMartinezLopez closed 2 months ago

JuanCamiloMartinezLopez commented 2 months ago

Se requiere realizar la implementación del envió de notificaciones por correo con base en las plantillas creadas #126

Sub Tareas

Criterios de aceptación

Requerimientos

No aplica

Definition of Ready - DoR

Definition of Done - DoD - Desarrollo

faidercamilo26 commented 2 months ago

:triangular_flag_on_post: Implementación Notificaciones por correo :triangular_flag_on_post:

Variables de Entorno

Modelos

Función

Se crea la función EnviarNotificacionCambioEstado() La cual es la encargada de enviar las notificaciones por correo electrónico de los cambios de estado.

Problemas

Al usar la funcion normal para realizar los post que es la de SendJson() al hacer una petición post al api de notificaciones aparece el siguiente error

Image

Para solucionar este error se crea la siguiente funcion, con la cual si se puede hacer la peticion pero el problema esque esto ignora las validaciones TLS/SSL, lo cual no es muy seguro:


func SendJson2(url string, trequest string, target interface{}, datajson interface{}) error {
    // Crear un buffer para el cuerpo de la solicitud
    b := new(bytes.Buffer)
    if datajson != nil {
        if err := json.NewEncoder(b).Encode(datajson); err != nil {
            beego.Error(err)
        }
    }

    // Configurar el transporte del cliente para que ignore las validaciones de certificado
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr}

    // Crear la solicitud HTTP
    req, err := http.NewRequest(trequest, url, b)
    if err != nil {
        beego.Error("error creando la solicitud", err)
        return err
    }
    req.Header.Set("Content-Type", "application/json")

    // Enviar la solicitud
    r, err := client.Do(req)
    if err != nil {
        beego.Error("error", err)
        return err
    }
    defer func() {
        if err := r.Body.Close(); err != nil {
            beego.Error(err)
        }
    }()

    // Decodificar la respuesta en la variable target
    return json.NewDecoder(r.Body).Decode(target)
}

Image

Sin embargo, al visualizar el correo de outlook en un dispositivo móvil el botón carga correctamente y el link funciona para redirigir.

Image

Al enviar el correo a gmail tanto en dispositivos moviles como en computador carga correctamente el boton y la informacion del correo.

Image

faidercamilo26 commented 2 months ago

Se ha completado la implementación de las notificaciones por correo electrónico cuando se cambia el estado de un cumplido. Se han gestionado correctamente los casos en los que el equipo de contratación es el responsable anterior o nuevo del cumplido. Se ha incorporado el envío de notificaciones tanto al correo del equipo de contratación como al responsable correspondiente, utilizando la dirección de correo configurada para el envío de estas notificaciones.

JuanCamiloMartinezLopez commented 2 months ago

@faidercamilo26 Buen trabajo.