Compartir vía


Envío de notificaciones a un canal de Microsoft Teams desde una canalización de Azure Data Factory o Synapse Analytics

A menudo es necesario enviar notificaciones durante la ejecución de una canalización o después de esta. La notificación proporciona un envío proactivo de alertas y reduce la necesidad de supervisión reactiva para detectar problemas.  Puede obtener información sobre cómo enviar notificaciones por correo electrónico mediante aplicaciones lógicas que una factoría de datos o una canalización de Synapse pueden invocar. Muchas empresas también usan cada vez más Microsoft Teams para la colaboración. En este artículo se muestra cómo configurar notificaciones de alertas de canalización en Microsoft Teams. 

Requisitos previos

Para poder enviar notificaciones a Teams desde las canalizaciones, debe crear un webhook de entrada para el canal de Teams. Si necesita crear un nuevo canal de Teams para este fin, consulte la documentación de Teams.  

  1. Abra Microsoft Teams y vaya a la pestaña Aplicaciones. Busque "Webhook entrante" y seleccione el conector de webhook entrante.

    Muestra la aplicación Webhook entrante en la pestaña Aplicaciones de Teams.

  2. Seleccione el botón "Add to a team" (Agregar a un equipo) para agregar el conector al sitio de nombre del canal de Team o Team al que desea enviar notificaciones.

    Resalta el botón "Agregar a un equipo" de la aplicación Webhook entrante.

  3. Escriba o seleccione el nombre del canal de Team o Team al que desea enviar las notificaciones.

    Muestra la solicitud de selección de equipo en el cuadro de diálogo de configuración de la aplicación Webhook entrante en Teams. Escriba el "Nombre del equipo o del canal del equipo"

  4. Seleccione el botón "Set up a connector" (Configurar un conector) para configurar el webhook de entrada para el nombre del canal de Team o Team que seleccionó en el paso anterior.

    Muestra la solicitud de selección de equipo en el cuadro de diálogo de configuración de la aplicación Webhook entrante en Teams. Resalta el equipo y el botón "Configurar un conector"

  5. Asigne al webhook el nombre adecuado y, opcionalmente, cargue un icono para identificar los mensajes. Después, seleccione el botón "Create" (Crear) para crear el webhook de entrada.

    Resalta la propiedad de nombre, la carga de imágenes opcional y el botón "Crear" en la página de opciones de Webhook entrante.  

  6. Copie la dirección URL del webhook que se genera durante la creación y guárdela para su uso posterior en la canalización. Después, seleccione el botón "Done" (Listo) para completar la configuración.

    Muestra la nueva dirección URL del webhook en la página de opciones Webhook entrante después de la creación.

  7. Puede ver la notificación en el canal donde agrega el conector de webhook.

    Muestra la notificación en el canal de Teams en el que agregó el conector del webhook.

Pasos para enviar notificaciones en el canal de Teams desde una canalización:

  1. Seleccione la pestaña Autor en el panel izquierdo.

  2. Haga clic en el botón + (Más) y seleccione New pipeline (Nueva canalización).

    Se muestra el menú "Nueva canalización" en Azure Data Factory Studio.

  3. En el panel "Propiedades" de "General", especifique NotifyTeamsChannelPipeline como Nombre. A continuación, contraiga el panel; para ello, haga clic en el icono Propiedades en la esquina superior derecha.

    Se muestra el panel "Propiedades".

    Se muestra el panel "Propiedades" oculto.

  4. En el panel "Configuraciones", seleccione Parámetros y, a continuación, seleccione el botón + Nuevo para definir los parámetros siguientes para la canalización.

    Nombre Type Valor predeterminado
    subscription String Specify subscription id for the pipeline
    resourceGroup String Specify resource group name for the pipeline
    runId String @activity('Specify name of the calling pipeline').output['pipelineRunId']
    name String @activity('Specify name of the calling pipeline').output['pipelineName']
    triggerTime String @activity('Specify name of the calling pipeline').ExecutionStartTime
    status String @activity('Specify name of the calling pipeline').Status
    message String @activity('Specify name of the calling pipeline').Error['message']
    executionEndTime String @activity('Specify name of the calling pipeline').ExecutionEndTime
    runDuration String @activity('Specify name of the calling pipeline').Duration
    teamWebhookUrl String Specify Team Webhook URL

    Se muestra "Parámetros de canalización".

    Nota:

    Estos parámetros se usan para construir la dirección URL de supervisión. Supongamos que no proporciona una suscripción y un grupo de recursos válidos (de la misma factoría de datos a la que pertenecen las canalizaciones). En ese caso, la notificación no contendrá una dirección URL de supervisión de canalización válida, pero los mensajes seguirán funcionando. Además, agregar estos parámetros ayuda a evitar la necesidad de pasar siempre esos valores desde otra canalización. Si piensa controlar esos valores a través de un enfoque basado en metadatos, debe modificarlos en consecuencia.

    Sugerencia

    Se recomienda agregar el identificador de suscripción de Data Factory, el grupo de recursos y la dirección URL del webhook de Teams (consulte los requisitos previos) para el valor predeterminado de los parámetros correspondientes.

  5. En el panel "Configuraciones", seleccione Variables y, a continuación, seleccione el botón + Nuevo para definir las siguientes variables para la canalización.

    Nombre Type Valor predeterminado
    messageCard String

    Se muestra "Variables de canalización".

  6. Busque "Establecer variable" en el panel "Actividades" de la canalización y arrastre una actividad Establecer variable al lienzo de la canalización.

  7. Seleccione la actividad Establecer variable en el lienzo, si aún no está seleccionada, y la pestaña "General" para editar sus detalles.

  8. En la pestaña "General", especifique Set JSON schema en Nombre de la actividad Establecer variable.

    Se muestra la pestaña general de la actividad "Establecer variable".

  9. En la pestaña "Variables", seleccione la variable messageCard para la propiedad Nombre y escriba el siguiente JSON para su propiedad Valor:

    {
        "@type": "MessageCard",
        "@context": "http://schema.org/extensions",
        "themeColor": "0076D7",
        "summary": "Pipeline status alert message​​​​",
        "sections": [
            {
                "activityTitle": "Pipeline execution alert​​​​",
                "facts": [
                    {
                        "name": "Subscription Id:",
                        "value": "@{pipeline().parameters.subscription}"
                    },
                    {
                        "name": "Resource Group:",
                        "value": "@{pipeline().parameters.resourceGroup}"
                    },
                    {
                        "name": "Data Factory Name:",
                        "value": "@{pipeline().DataFactory}"
                    },
                    {
                        "name": "Pipeline RunId:",
                        "value": "@{pipeline().parameters.runId}"
                    },
                    {
                        "name": "Pipeline Name:",
                        "value": "@{pipeline().Pipeline}"
                    },
                    {
                        "name": "Pipeline Status:",
                        "value": "@{pipeline().parameters.status}"
                    },
                    {
                        "name": "Execution Start Time (UTC):",
                        "value": "@{pipeline().parameters.triggerTime}"
                    },
                    {
                        "name": "Execution Finish Time (UTC):",
                        "value": "@{pipeline().parameters.executionEndTime}"
                    },
                    {
                        "name": "Execution Duration (s):",
                        "value": "@{pipeline().parameters.runDuration}"
                    },
                    {
                        "name": "Message:",
                        "value": "@{pipeline().parameters.message}"
                    },
                    {
                        "name": "Notification Time (UTC):",
                        "value": "@{utcnow()}"
                    }
                ],
                "markdown": true
            }
        ],
        "potentialAction": [
            {
                "@type": "OpenUri",
                "name": "View pipeline run",
                "targets": [
                    {
                        "os": "default",
                        "uri": "@{concat('https://synapse.azure.com/monitoring/pipelineruns/',pipeline().parameters.runId,'?factory=/subscriptions/',pipeline().parameters.subscription,'/resourceGroups/',pipeline().parameters.resourceGroup,'/providers/Microsoft.DataFactory/factories/',pipeline().DataFactory)}"
                    }
                ]
            }
        ]
    }
    

    Se muestra la pestaña de variables de la actividad "Establecer variable".

  10. Busque Web en el panel "Actividades" de canalización y arrastre una actividad "Web" al lienzo de canalización.

  11. Cree una condición de dependencia para la actividad Web de modo que solo se ejecute si la actividad Establecer variable se realiza correctamente. Para crear esta dependencia, seleccione el manipulador verde del lado derecho de la actividad Establecer variable, arrástrela y conéctela a la actividad Web.

  12. Seleccione la nueva actividad Establecer variable en el lienzo, si aún no está seleccionada, y la pestaña "General" para editar sus detalles.

  13. En el panel "General", especifique Invoke Teams Url Webhook como Nombre de la actividad Web.

    Se muestra el panel general de la actividad "Web".

  14. En el panel "Configuración", establezca las siguientes propiedades como se indica a continuación:

    Propiedad value
    URL @pipeline().parameters.teamWebhookUrl
    Método POST
    Cuerpo @json(variables('messageCard'))

    Se muestra el panel Configuración de la actividad "Web".

  15. Una vez configurado todo, ahora está listo para validar, depurar y publicar la canalización NotifyTeamsChannelPipeline.

    • Para validar la canalización, seleccione Validar en la barra de herramientas.
    • Para depurar la canalización, seleccione Depurar en la barra de herramientas. Puede ver el estado de ejecución de la canalización en la pestaña "Output" (Salida) en la parte inferior de la ventana.
    • Una vez que la canalización se puede ejecutar correctamente, en la barra de herramientas superior, seleccione Publish all (Publicar todo). Esta acción publica las entidades que creó para Data Factory. Espere a que aparezca el mensaje Successfully published (Publicado correctamente).

    Se muestran los botones "Validar, Depurar y Publicar" para validar, depurar y publicar la canalización.

Ejemplo de uso

En este escenario de uso de ejemplo, crearemos una canalización maestra con tres actividades de ejecución de canalización. La primera actividad de ejecución de canalización invocará nuestra canalización de ETL y las dos actividades de ejecución de canalización restantes invocarán la canalización "NotifyTeamsChannelPipeline" para enviar las notificaciones de error o correctas pertinentes al canal de Teams en función del estado de ejecución de la canalización de ETL.

  1. Seleccione la pestaña Author (Creador) en el panel izquierdo de Data Factory o la pestaña Integrate (Integrar) en el panel izquierdo de Synapse Studio. A continuación, seleccione el botón + (más) y, a después, seleccione Pipeline (Canalización) para crear una nueva canalización.

  2. En el panel "General", en "Propiedades", especifique MasterPipeline en Nombre. A continuación, contraiga el panel; para ello, haga clic en el icono Propiedades en la esquina superior derecha.

  3. Busque canalización en el panel "Actividades" de canalización y arrastre tres actividades de ejecución de canalización al lienzo de canalización.

  4. Seleccione la nueva actividad de ejecución de canalización en el lienzo si aún no está seleccionada y su panel "General" para editar sus detalles.

    • Para la propiedad Nombre de la actividad de ejecución de canalización, se recomienda usar el nombre de la canalización ETL invocada para la que desea enviar notificaciones. Por ejemplo, hemos usado LoadDataPipeline como Nombre de la actividad de ejecución de canalización porque es el nombre de la canalización invocada.
    • En el panel "Configuración", seleccione una canalización existente o cree una nueva con el botón + Nuevo para la propiedad Canalización invocada. Por ejemplo, en nuestro caso, seleccionamos la canalización LoadDataPipeline para la propiedad "Canalización invocada". Seleccione otras opciones y configure los parámetros de la canalización según sea necesario para completar la configuración.

    Se muestra el panel general de la actividad "Ejecutar canalización" de la canalización "LoadDataPipeline".

    Se muestra el panel Configuración de la actividad "Ejecutar canalización" de la canalización "LoadDataPipeline".

  5. Seleccione la segunda actividad de ejecución de canalización en el lienzo y su panel "General" para editar sus detalles.

    • Especifique OnSuccess Notification como Nombre de la actividad de ejecución de canalización.

    • En el panel "Configuración", seleccione la canalización NotifyTeamsChannelPipeline, que creamos anteriormente, para la propiedad Canalización invocada. Personalice los parámetros según sea necesario en función del tipo de actividad. Por ejemplo, he personalizado los parámetros de la siguiente manera:

      Nombre Value
      subscription 11111111-0000-aaaa-bbbb-0000000000
      resourceGroup contosorg
      runId @activity('LoadDataPipeline').output['pipelineRunId']
      name @activity('LoadDataPipeline').output['pipelineName']
      triggerTime @activity('LoadDataPipeline').ExecutionStartTime
      status @activity('LoadDataPipeline').Status
      message Pipeline - LoadDataPipeline ran with success.
      executionEndTime @activity('LoadDataPipeline').ExecutionEndTime
      runDuration @activity('LoadDataPipeline').Duration
      teamWebhookUrl https://microsoft.webhook.office.com/webhookb2/1234abcd-1x11-2ff1-ab2c-1234d0699a9e@72f988bf-32b1-41af-91ab-2d7cd011db47/IncomingWebhook/8212f66ad80040ab83cf68b554d9232a/17d524d0-ed5c-44ed-98a0-35c12dd89a6d
    • Cree una condición de dependencia para la segunda actividad de ejecución de canalización para que solo se ejecute si la primera actividad de ejecución de canalización se realiza correctamente. Para crear esta dependencia, seleccione el manipulador verde del lado derecho de la primera actividad de ejecución de canalización, arrástrela y conéctela a la segunda actividad de ejecución de canalización.

    Se muestra el panel general de "OnSuccess Notification" de la segunda actividad "Ejecutar canalización" de la canalización "NotifyTeamsChannelPipeline".

    Se muestra el panel Configuración de "OnSuccess Notification" de la segunda actividad "Ejecutar canalización" de la canalización "NotifyTeamsChannelPipeline".

  6. Seleccione la tercera actividad de ejecución de canalización en el lienzo y su panel "General" para editar sus detalles.

    • Especifique OnFailure Notification como Nombre de la actividad de ejecución de canalización.

    • En el panel "Configuración", seleccione la canalización NotifyTeamsChannelPipeline para la propiedad Canalización invocada. Personalice los parámetros según sea necesario en función del tipo de actividad. Por ejemplo, esta vez he personalizado los parámetros de la siguiente manera:

      Nombre Value
      subscription 11111111-0000-aaaa-bbbb-0000000000
      resourceGroup contosorg
      runId @activity('LoadDataPipeline').output['pipelineRunId']
      name @activity('LoadDataPipeline').output['pipelineName']
      triggerTime @activity('LoadDataPipeline').ExecutionStartTime
      status @activity('LoadDataPipeline').Status
      message @activity('LoadDataPipeline').Error['message']
      executionEndTime @activity('LoadDataPipeline').ExecutionEndTime
      runDuration @activity('LoadDataPipeline').Duration
      teamWebhookUrl https://microsoft.webhook.office.com/webhookb2/1234abcd-1x11-2ff1-ab2c-1234d0699a9e@72f988bf-32b1-41af-91ab-2d7cd011db47/IncomingWebhook/8212f66ad80040ab83cf68b554d9232a/17d524d0-ed5c-44ed-98a0-35c12dd89a6d
    • Cree una condición de dependencia para la tercera actividad de ejecución de canalización para que solo se ejecute si la primera actividad de ejecución de canalización falla. Para crear esta dependencia, seleccione el manipulador rojo del lado derecho de la primera actividad de ejecución de canalización, arrástrela y conéctela a la tercera actividad de ejecución de canalización.

    • Valide, depure y publique la canalización MasterPipeline.

    Se muestra el panel general de "OnFailure Notification" de la tercera actividad "Ejecutar canalización" de la canalización "NotifyTeamsChannelPipeline".

    Se muestra el panel Configuración de "OnFailure Notification" de la tercera actividad "Ejecutar canalización" de la canalización "NotifyTeamsChannelPipeline".

  7. Ejecute la canalización para recibir notificaciones en Teams. Por ejemplo, a continuación se muestran notificaciones de ejemplo, cuando mi canalización se ejecutó correctamente y cuando falló.

    Se muestran las notificaciones de una canalización correcta en un canal de Teams.

    Se muestran las notificaciones de una canalización con errores en un canal de Teams.

  8. Seleccione el botón "Ver ejecución de canalización" para ver la ejecución de la canalización.

Adición de mensajes dinámicos con variables del sistema y expresiones

Puede usar variables del sistema y expresiones para que los mensajes sean dinámicos. Por ejemplo:

  • @activity("CopyData").output.errors[0].Message

  • @activity("DataFlow").error.Message

Las expresiones anteriores devolverán los mensajes de error pertinentes a partir de una operación incorrecta, que se pueden enviar como notificación en un canal de Teams. Para obtener más información sobre este tema, consulte el artículo Propiedades de salida de actividad de copia.

También le animamos a que revise el esquema de carga útil de notificaciones de Microsoft Teams y personalice aún más la plantilla anterior según sus necesidades.

Envío de un correo electrónico desde una canalización