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.

    Shows the Incoming Webhook app under the Apps tab in 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.

    Highlights the "Add to a team" button for the Incoming Webhook app.

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

    Shows the team selection prompt on the Incoming Webhook app configuration dialog in Teams. Type the "Team or Team channel name"

  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.

    Shows the team selection prompt on the Incoming Webhook app configuration dialog in Teams. Highlights the Team and the "Set up a connector" button

  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.

    Highlights the name property, optional image upload, and "Create" button in the Incoming Webhook options page.  

  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.

    Shows the new webhook URL on the Incoming Webhook options page after creation.

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

    Shows the notification in the Teams channel where you added the webhook connector.

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).

    Shows the "New pipeline" menu in the Azure Data Factory Studio.

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

    Shows the "Properties" panel.

    Shows the "Properties" panel hidden.

  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

    Shows the "Pipeline parameters".

    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

    Shows the "Pipeline variables".

  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.

    Shows the "Set variable" activity general tab.

  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": "Pipline 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)}"
                    }
                ]
            }
        ]
    }
    

    Shows the "Set variable" activity variables tab.

  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.

    Shows the "Web" activity general pane.

  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'))

    Shows the "Web" activity settings pane.

  15. Ya que todo se estableció, ahora está listo para validar, depurar y publicar la canalización NotifiyTeamsChannelPipeline.

    • 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).

    Shows the "Validate, Debug, Publish" buttons to validate, debug, and then publish your pipeline.

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 "NotifiyTeamsChannelPipeline" 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.

    Shows the "Execute pipeline" activity general pane for "LoadDataPipeline" pipeline.

    Shows the "Execute pipeline" activity setting pane for "LoadDataPipeline" pipeline.

  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 NotifiyTeamsChannelPipeline, 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.

    Shows the second "Execute pipeline" activity "OnSuccess Notification" general pane for "NotifiyTeamsChannelPipeline" pipeline.

    Shows the second "Execute pipeline" activity "OnSuccess Notification" setting pane for "NotifiyTeamsChannelPipeline" pipeline.

  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 NotifiyTeamsChannelPipeline 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.

    Shows the third "Execute pipeline" activity "OnFailure Notification" general pane for "NotifiyTeamsChannelPipeline" pipeline.

    Shows the third "Execute pipeline" activity "OnFailure Notification" settings pane for "NotifiyTeamsChannelPipeline" pipeline.

  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ó.

    Shows on success pipeline notifications in a Teams channel.

    Shows on failure pipeline notifications in a Teams channel.

  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