Note:

Configuración de notificaciones para trabajos de flujo de trabajo de AIDP y escenarios personalizados mediante OCI Notifications

Introducción

En este tutorial se explica cómo configurar notificaciones para trabajos de flujo de trabajo de AIDP mediante el servicio OCI Notifications and Events. También aprenderá a implementar la lógica de notificación personalizada mediante un programa Python en un bloc de notas de AIDP.

El servicio OCI Notifications utiliza un modelo de publicación-suscripción para entregar mensajes de forma fiable y segura.

Objetivos

Al final de este tutorial, podrá:

Requisitos


Tarea 1: Crear tema de notificación y suscripción

  1. Conéctese a la consola de OCI.
  2. Vaya a Servicios para desarrolladores → Notificaciones.
  3. Haga clic en Crear tema y proporcione:
    • Nombre
    • Descripción

    Crear Tema

  4. Cree una suscripción:
    • Protocolo: correo electrónico
    • Correo electrónico: su dirección de correo electrónico

    Crear Suscripción

  5. Compruebe su correo electrónico y confirme la suscripción.

    Confirmar Suscripción

Nota: El estado de la suscripción cambia de Pendiente a Activo después de la confirmación.


Tarea 2: Configurar regla de evento para flujo de trabajo de AIDP

  1. Vaya a Observability & Management → Events Service → Rules.
  2. Haga clic en Create Rule.
  3. Configure:
    • Servicio: lago de datos inteligente
    • Tipo de evento: Ejecutar trabajo - Finalizar
    • Nombre de atributo 1: jobKey
    • Valores de atributo 1: Mantener ID de flujo de trabajo de ayuda
    • Nombre de atributo 2: jobStatus
    • Valores de atributo 2: Fallo
  4. Definir Acción:
    • Seleccionar tema de notificación creado anteriormente

    Confirmar Suscripción

Consejo: puede personalizar reglas para otros estados, como Correcto o En ejecución.


Tarea 3: Validar notificación por correo electrónico

  1. Dispara o ejecuta un trabajo de flujo de trabajo.
  2. Fuerce un escenario de fallo si es necesario.
  3. Compruebe el buzón de correo electrónico.

    Notificación de Faliure de Trabajo

Nota: La notificación incluye detalles del trabajo, como el nombre y el estado del trabajo.


Tarea 4: Implantación de notificaciones personalizadas mediante Python

A continuación se muestra un programa Python de ejemplo para enviar notificaciones mediante el SDK de OCI.

import oci
from oci.ons.models import MessageDetails

config = oci.config.from_file("~/.oci/config", "DEFAULT")
client = oci.ons.NotificationDataPlaneClient(config)

topic_id = "<your_topic_ocid>"

message_details = MessageDetails(
    title="Test Notification",
    body="Hello from AIDP!"
)

response = client.publish_message(
    topic_id=topic_id,
    message_details=message_details
)

print("Message sent:", response.data.message_id)

Tarea 5: Clase de notificación personalizada avanzada

import oci
import logging
import time
from typing import List, Optional, Dict

logger = logging.getLogger("OCI_Notifier")
logger.setLevel(logging.INFO)

handler = logging.StreamHandler()
formatter = logging.Formatter(
    "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)

class OCINotifier:
    def __init__(
        self,
        topic_id: str,
        config_file: str = "~/.oci/config",
        profile: str = "DEFAULT",
        max_retries: int = 3,
        retry_delay: int = 2,
    ):
        """
        Initialize OCI Notification client

        Args:
            topic_id: OCI Notification Topic OCID
            config_file: Path to OCI config
            profile: Config profile name
            max_retries: Retry attempts
            retry_delay: Delay between retries (seconds)
        """
        self.topic_id = topic_id
        self.max_retries = max_retries
        self.retry_delay = retry_delay

        try:
            self.config = oci.config.from_file(config_file, profile)
            self.client = oci.ons.NotificationDataPlaneClient(self.config)
            logger.info("OCI Notifier initialized successfully")
        except Exception as e:
            logger.error(f"Failed to initialize OCI client: {e}")
            raise

    
    def send(
        self,
        title: str,
        message: str,
        metadata: Optional[Dict] = None,
    ) -> bool:
        """
        Send notification message

        Args:
            title: Notification subject
            message: Notification body
            metadata: Optional metadata dictionary

        Returns:
            bool: True if success, False otherwise
        """

        payload = {
            "title": title,
            "body": message,
        }

        if metadata:
            payload["metadata"] = metadata

        for attempt in range(1, self.max_retries + 1):
            try:
                response = self.client.publish_message(
                    self.topic_id,
                    payload
                )
                logger.info(
                    f"Notification sent successfully | "
                    f"Message ID: {response.data.message_id}"
                )
                return True

            except Exception as e:
                logger.error(
                    f"Attempt {attempt} failed: {str(e)}"
                )
                if attempt < self.max_retries:
                    time.sleep(self.retry_delay)
                else:
                    logger.error("Max retries reached. Notification failed.")
                    return False



def notify_success(notifier: OCINotifier, job_name: str):
    notifier.send(
        title=f"{job_name} SUCCESS",
        message=f"Job '{job_name}' completed successfully."
    )


def notify_failure(notifier: OCINotifier, job_name: str, error: str):
    notifier.send(
        title=f"{job_name} FAILED",
        message=f"Job '{job_name}' failed.\nError: {error}"
    )

Tarea 6: Llamar a notificación personalizada desde el bloc de notas de AIDP

Puede llamar a la lógica de notificación dentro del flujo de trabajo o el bloc de notas:

from notifier import notify_failure

notify_failure(notifier, "SampleJob", "Error details here")

Solución de problemas y consejos

Consejo: asegúrese de que la ruta del archivo de configuración de OCI es correcta.

Nota: Verifique el OCID del tema y el estado de la suscripción.

Consejo: utilice reintentos en el notificador personalizado para garantizar la fiabilidad.


Pasos Siguientes


Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal de YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.