Envoyer des notifications à un canal Microsoft Teams à partir d’un pipeline Azure Data Factory ou Synapse Analytics

Il est souvent nécessaire d’envoyer des notifications pendant ou après l’exécution d’un pipeline. La notification fournit des alertes proactives et réduit le besoin d’une surveillance réactive pour découvrir les problèmes.  Vous pouvez en savoir plus sur l’envoi de notifications par e-mail à l’aide d’applications logiques qu’un pipeline Data Factory ou Synapse peut appeler. De nombreuses entreprises utilisent également de plus en plus Microsoft Teams pour la collaboration. Cet article explique comment configurer des notifications à partir d’alertes de pipeline dans Microsoft Teams. 

Prérequis

Avant de pouvoir envoyer des notifications à Teams depuis vos pipelines, vous devez créer un webhook entrant pour votre canal Teams. Si vous devez créer un nouveau canal Teams à cet effet, reportez-vous à la documentation de Teams.  

  1. Ouvrez Microsoft Teams et rendez-vous dans l’onglet Applications. Recherchez « Webhook entrant » et sélectionnez le connecteur Webhook entrant.

    Shows the Incoming Webhook app under the Apps tab in Teams.

  2. Sélectionnez le bouton « Ajouter à une équipe » pour ajouter le connecteur au site de l’équipe ou du nom du canal de l’équipe où vous voulez envoyer des notifications.

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

  3. Tapez ou sélectionnez le nom de l’équipe ou du canal d’équipe où vous voulez envoyer les notifications.

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

  4. Sélectionnez le bouton « Configurer un connecteur » pour configurer le webhook entrant pour le nom de l’équipe ou du canal de l’équipe que vous avez sélectionné à l’étape précédente.

    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. Nommez le webhook comme il convient et, si vous le souhaitez, chargez une icône pour identifier vos messages. Après cela, sélectionnez le bouton « Créer » pour créer le webhook entrant.

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

  6. Copiez l’URL du webhook qui est générée lors de la création et enregistrez-la pour une utilisation ultérieure dans le pipeline. Après cela, sélectionnez le bouton « Terminé » pour terminer l’installation.

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

  7. Vous pouvez voir la notification dans le canal où vous ajoutez le connecteur du webhook.

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

Étapes pour envoyer des notifications sur le canal Teams à partir d’un pipeline :

  1. Sélectionnez l’onglet Créer dans le volet gauche.

  2. Sélectionnez le bouton + (plus), puis sélectionnez Nouveau pipeline.

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

  3. Dans le volet « Propriétés » sous « Général », spécifiez NotifiyTeamsChannelPipeline pour Nom. Réduisez ensuite le panneau en cliquant sur l’icône Propriétés en haut à droite.

    Shows the "Properties" panel.

    Shows the "Properties" panel hidden.

  4. Dans le volet « configurations », sélectionnez Paramètres, puis sélectionnez le bouton + Nouveau pour définir les paramètres suivants pour votre pipeline.

    Nom Type Valeur par défaut
    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".

    Remarque

    Ces paramètres sont utilisés pour construire l’URL de surveillance. Supposons que vous ne fournissez pas un abonnement et un groupe de ressources valides (appartenant à la même fabrique de données que les pipelines). Dans ce cas, la notification ne contiendra pas d’URL de surveillance de pipeline valide, mais les messages fonctionneront quand même. En outre, l’ajout de ces paramètres permet d’éviter de devoir toujours transmettre ces valeurs depuis un autre pipeline. Si vous avez l’intention de contrôler ces valeurs par une approche basée sur les métadonnées, vous devez les modifier en conséquence.

    Conseil

    Nous recommandons d’ajouter l’ID d’abonnement Data Factory actuel, le groupe de ressources et l’URL du webhook Teams (voir les prérequis) pour connaître la valeur par défaut des paramètres appropriés.

  5. Dans le volet « Configurations », sélectionnez Variables, puis sélectionnez le bouton + Nouveau pour définir les variables suivantes pour votre pipeline.

    Nom Type Valeur par défaut
    messageCard String

    Shows the "Pipeline variables".

  6. Recherchez « Définir une variable » dans le volet « Activités » du pipeline, puis faites glisser une activité Définir une variable vers le canevas du pipeline.

  7. Sélectionnez l’activité Définir une variable sur le canevas si elle n’est pas déjà sélectionnée, et son onglet « Général » pour en modifier les détails.

  8. Sous l’onglet « Général », spécifiez Définir le schéma JSON pour le Nom de l’activité Définir une variable.

    Shows the "Set variable" activity general tab.

  9. Sous l’onglet « Variables », sélectionnez la variable messageCard pour la propriété Nom, puis entrez le code JSON suivant pour sa propriété Valeur :

    {
        "@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. Recherchez « Web » dans le volet « Activités » du pipeline, puis faites glisser une activité Web vers le canevas du pipeline.

  11. Créez une condition de dépendance pour l’activité Web afin qu’elle s’exécute seulement si l’activité Définir une variable réussit. Pour créer cette dépendance, sélectionnez la poignée verte sur le côté droit de l’activité Définir une variable, faites-la glisser et connectez-la à l’activité Web.

  12. Sélectionnez la nouvelle activité Web sur le canevas si elle n’est pas déjà sélectionnée, et son onglet « Général » pour en modifier les détails.

  13. Dans le volet « Général », spécifiez Appeler l’URL du webhook Teams pour le Nom de l’activité Web.

    Shows the "Web" activity general pane.

  14. Dans le volet « Paramètres », définissez les propriétés suivantes comme ceci :

    Propriété value
    URL @pipeline().parameters.teamWebhookUrl
    Méthode POST
    Corps @json(variables('messageCard'))

    Shows the "Web" activity settings pane.

  15. Tout est prêt pour la validation, le débogage, puis la publication de votre pipeline NotifiyTeamsChannelPipeline.

    • Sélectionnez Valider dans la barre d’outils pour valider les paramètres du pipeline.
    • Pour déboguer le pipeline, sélectionnez Déboguer dans la barre d’outils. Vous pouvez voir l’état d’exécution du pipeline sous l’onglet « Sortie » dans le bas de la fenêtre.
    • Une fois que le pipeline peut s’exécuter correctement, sélectionnez Publier tout dans la barre d’outils supérieure. Cette action publie les entités que vous avez créées dans Data Factory. Patientez jusqu’à voir le message Publication réussie.

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

Exemple d’utilisation

Dans cet exemple de scénario d’utilisation, nous allons créer un pipeline maître avec trois activités Exécuter le pipeline. La première activité Exécuter le pipeline appellera notre pipeline ETL et les deux activités Exécuter le pipeline restantes appelleront le pipeline « NotifiyTeamsChannelPipeline » pour envoyer des notifications de réussite ou d’échec pertinentes au canal Teams, en fonction de l’état d’exécution de notre pipeline ETL.

  1. Sélectionnez l’onglet Auteur dans le volet gauche de l’onglet Data Factory ou Intégrer dans le volet gauche de Synapse Studio. Cliquez ensuite sur le bouton + (plus), puis sélectionnez Pipeline pour créer un pipeline.

  2. Dans le panneau « Général », sous Propriétés, spécifiez MasterPipeline pour Nom. Réduisez ensuite le panneau en cliquant sur l’icône Propriétés en haut à droite.

  3. Recherchez pipeline dans le volet « Activités » du pipeline, puis faites glisser trois activités Exécuter le pipeline vers le canevas du pipeline.

  4. Sélectionnez d’abord l’activité Exécuter le pipeline sur le canevas si elle n’est pas déjà sélectionnée, et son onglet volet « Général » pour en modifier les détails.

    • Pour la propriété Nom de l’activité Exécuter le pipeline, nous vous recommandons d’utiliser le nom de votre pipeline ETL appelé pour lequel vous voulez envoyer des notifications. Par exemple, nous avons utilisé LoadDataPipeline pour le Nom de notre activité Exécuter le pipeline, car il s’agit du nom de notre pipeline appelé.
    • Dans le volet « Paramètres », sélectionnez un pipeline existant ou créez-en un en utilisant le bouton + Nouveau pour la propriété Pipeline appelé. Par exemple, dans notre cas, nous avons sélectionné le pipeline LoadDataPipeline pour la propriété « Pipeline appelé ». Sélectionnez d’autres options et configurez les paramètres du pipeline en fonction des besoins pour terminer votre configuration.

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

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

  5. Sélectionnez la deuxième activité Exécuter le pipeline sur le canevas et son volet « Général » pour modifier ses détails.

    • Spécifiez OnSuccess Notification pour le Nom de l’activité Exécuter le pipeline.

    • Dans le volet « Paramètres », sélectionnez le pipeline NotifiyTeamsChannelPipeline que nous avons créé précédemment pour la propriété Pipeline appelé. Personnalisez les paramètres selon les besoins en fonction du type d’activité. Par exemple, j’ai personnalisé les paramètres comme suit :

      Nom Valeur
      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
    • Créez une condition de dépendance pour la deuxième activité Exécuter le pipeline afin qu’elle s’exécute seulement si la première activité Exécuter le pipeline réussit. Pour créer cette dépendance, sélectionnez la poignée verte sur le côté droit de la première activité Exécuter le pipeline, faites-la glisser et connectez-la à la deuxième activité Exécuter le pipeline.

    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. Sélectionnez la troisième activité Exécuter le pipeline sur le canevas et son volet « Général » pour modifier ses détails.

    • Spécifiez OnFailure Notification pour le Nom de l’activité Exécuter le pipeline.

    • Dans le volet « Paramètres », sélectionnez le pipeline NotifiyTeamsChannelPipeline pour la propriété Pipeline appelé. Personnalisez les paramètres selon les besoins en fonction du type d’activité. Par exemple cette fois, j’ai personnalisé les paramètres comme suit :

      Nom Valeur
      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
    • Créez une condition de dépendance pour la troisième activité Exécuter le pipeline afin qu’elle s’exécute seulement si la première activité Exécuter le pipeline échoue. Pour créer cette dépendance, sélectionnez la poignée rouge sur le côté droit de la première activité Exécuter le pipeline, faites-la glisser et connectez-la à la troisième activité Exécuter le pipeline.

    • Validez, déboguez, puis publiez votre pipeline 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. Exécutez le pipeline pour recevoir des notifications dans Teams. Par exemple, voici des exemples de notifications quand mon pipeline s’est exécuté avec succès et quand il a échoué.

    Shows on success pipeline notifications in a Teams channel.

    Shows on failure pipeline notifications in a Teams channel.

  8. Sélectionnez le bouton « Voir l’exécution du pipeline » pour voir l’exécution du pipeline.

Ajouter des messages dynamiques avec des variables système et des expressions

Vous pouvez utiliser des variables système et des expressions pour rendre vos messages dynamiques. Par exemple :

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

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

Les expressions ci-dessus renvoient les messages d’erreur pertinents en cas d’échec, qui peuvent être envoyés sous forme de notification sur un canal Teams. Pour plus d’informations sur ce sujet, consultez l’article Propriétés de la sortie de l’activité de copie.

Nous vous encourageons également à consulter le schéma des charges utiles de notification prises en charge par Microsoft Teams et à personnaliser davantage le modèle ci-dessus en fonction de vos besoins.

Envoyer un e-mail depuis un pipeline