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.
Abra Microsoft Teams y vaya a la pestaña Aplicaciones. Busque "Webhook entrante" y seleccione el conector de webhook entrante.
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.
Escriba o seleccione el nombre del canal de Team o Team al que desea enviar las notificaciones.
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.
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.
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.
Puede ver la notificación en el canal donde agrega el conector de webhook.
Pasos para enviar notificaciones en el canal de Teams desde una canalización:
Seleccione la pestaña Autor en el panel izquierdo.
Haga clic en el botón + (Más) y seleccione New pipeline (Nueva canalización).
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.
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
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.
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
Busque "Establecer variable" en el panel "Actividades" de la canalización y arrastre una actividad Establecer variable al lienzo de la canalización.
Seleccione la actividad Establecer variable en el lienzo, si aún no está seleccionada, y la pestaña "General" para editar sus detalles.
En la pestaña "General", especifique Set JSON schema en Nombre de la actividad Establecer variable.
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)}" } ] } ] }
Busque Web en el panel "Actividades" de canalización y arrastre una actividad "Web" al lienzo de canalización.
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.
Seleccione la nueva actividad Establecer variable en el lienzo, si aún no está seleccionada, y la pestaña "General" para editar sus detalles.
En el panel "General", especifique Invoke Teams Url Webhook como Nombre de la actividad Web.
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'))
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).
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.
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.
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.
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.
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.
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.
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.
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ó.
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.