Inviare notifiche a un canale di Microsoft Teams da una pipeline di Azure Data Factory o Synapse Analytics

Spesso è necessario inviare notifiche durante o dopo l'esecuzione di una pipeline. La notifica fornisce avvisi proattivi e riduce la necessità di un monitoraggio reattivo per individuare i problemi.  È possibile ottenere informazioni su come inviare notifiche tramite posta elettronica usando app per la logica che una data factory o una pipeline di Synapse può richiamare. Molte aziende usano sempre più Microsoft Teams per la collaborazione. Questo articolo illustra come configurare le notifiche dagli avvisi della pipeline in Microsoft Teams. 

Prerequisiti

Prima di poter inviare notifiche a Teams dalle pipeline, è necessario creare un webhook in ingresso per il canale teams. Se è necessario creare un nuovo canale di Teams a questo scopo, vedere la documentazione di Teams.  

  1. Aprire Microsoft Teams e passare alla scheda App. Cercare "Webhook in ingresso" e selezionare il connettore Webhook in ingresso.

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

  2. Selezionare il pulsante "Aggiungi a un team" per aggiungere il connettore al sito del nome del canale team o team in cui si vogliono inviare notifiche.

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

  3. Digitare o selezionare Team o Nome canale team in cui si desidera inviare le notifiche.

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

  4. Selezionare il pulsante "Configura un connettore" per configurare il webhook in ingresso per il nome del canale Team o Team selezionato nel passaggio precedente.

    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. Assegnare al webhook il nome appropriato e, facoltativamente, caricare un'icona per identificare i messaggi. Successivamente, selezionare il pulsante "Crea" per creare il webhook in ingresso.

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

  6. Copiare l'URL del webhook generato alla creazione e salvarlo per usarlo in un secondo momento nella pipeline. Successivamente, selezionare il pulsante "Fine" per completare l'installazione.

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

  7. È possibile visualizzare la notifica nel canale in cui si aggiunge il connettore webhook.

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

Procedura per inviare notifiche sul canale di Teams da una pipeline:

  1. Selezionare la scheda Crea dal riquadro sinistro.

  2. Selezionare il pulsante + (più) e quindi selezionare Nuova pipeline.

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

  3. Nel riquadro "Proprietà" in "Generale" specificare NotifiyTeamsChannelPipeline per Name. Comprimere quindi il pannello facendo clic sull'icona Proprietà nell'angolo superiore destro.

    Shows the "Properties" panel.

    Shows the "Properties" panel hidden.

  4. Nel riquadro "Configurazioni" selezionare Parametri e quindi selezionare il pulsante + Nuovo per definire i parametri seguenti per la pipeline.

    Nome Type Valore predefinito
    sottoscrizione 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
    stato String @activity('Specify name of the calling pipeline').Status
    messaggio 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

    Questi parametri vengono usati per costruire l'URL di monitoraggio. Si supponga di non fornire una sottoscrizione e un gruppo di risorse validi (della stessa data factory a cui appartengono le pipeline). In tal caso, la notifica non conterrà un URL di monitoraggio della pipeline valido, ma i messaggi continueranno a funzionare. Inoltre, l'aggiunta di questi parametri consente di evitare la necessità di passare sempre tali valori da un'altra pipeline. Se si intende controllare tali valori tramite un approccio basato sui metadati, è necessario modificarli di conseguenza.

    Suggerimento

    È consigliabile aggiungere l'ID sottoscrizione di Data Factory corrente, il gruppo di risorse e l'URL del webhook di Teams (fare riferimento ai prerequisiti) per il valore predefinito dei parametri pertinenti.

  5. Nel riquadro "Configurazioni" selezionare Variabili e quindi selezionare il pulsante + Nuovo per definire le variabili seguenti per la pipeline.

    Nome Type Valore predefinito
    messageCard String

    Shows the "Pipeline variables".

  6. Cercare "Imposta variabile" nel riquadro "Attività" della pipeline e trascinare un'attività Imposta variabile nell'area di disegno della pipeline.

  7. Selezionare l'attività Imposta variabile nell'area di disegno se non è già selezionata e la relativa scheda "Generale" per modificarne i dettagli.

  8. Nella scheda "Generale" specificare Imposta schema JSON per Nome dell'attività Imposta variabile .

    Shows the "Set variable" activity general tab.

  9. Nella scheda "Variabili" selezionare messageCard variabile per la proprietà Name e immettere il codice JSON seguente per la relativa proprietà Value:

    {
        "@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. Cercare "Web" nel riquadro "Attività" della pipeline e trascinare un'attività Web nell'area di disegno della pipeline.

  11. Creare una condizione di dipendenza per l'attività Web in modo che venga eseguita solo se l'attività Imposta variabile ha esito positivo. Per creare questa dipendenza, selezionare l'handle verde sul lato destro dell'attività Imposta variabile , trascinarlo e connetterlo all'attività Web .

  12. Selezionare la nuova attività Web nell'area di disegno se non è già selezionata e la scheda "Generale" per modificarne i dettagli.

  13. Nel riquadro "Generale" specificare Invoke Teams Webhook URL (Richiama URL webhook teams) per Nome dell'attività Web .

    Shows the "Web" activity general pane.

  14. Nel riquadro "Impostazioni", impostare le proprietà seguenti come indicato di seguito:

    Proprietà value
    URL @pipeline().parameters.teamWebhookUrl
    metodo POST
    Corpo @json(variables('messageCard'))

    Shows the "Web" activity settings pane.

  15. Tutto impostato e ora si è pronti per convalidare, eseguire il debug e quindi pubblicare la pipeline NotifiyTeamsChannelPipeline .

    • Per convalidare la pipeline, selezionare Convalida dalla barra degli strumenti.
    • Per eseguire il debug della pipeline, selezionare Debug sulla barra degli strumenti. È possibile visualizzare lo stato dell'esecuzione della pipeline nella scheda "Output" nella parte inferiore della finestra.
    • Quando è possibile eseguire correttamente la pipeline, nella barra degli strumenti superiore selezionare Pubblica tutto. Questa azione pubblica le entità create in Data Factory. Attendere fino alla visualizzazione del messaggio Pubblicazione riuscita.

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

Esempio di utilizzo

In questo scenario di utilizzo di esempio si creerà una pipeline master con tre attività Execute Pipeline . La prima attività Execute Pipeline richiamerà la pipeline ETL e le altre due attività Execute Pipeline richiameranno la pipeline "NotifiyTeamsChannelPipeline" per inviare notifiche di esito positivo o negativo pertinenti al canale di Teams a seconda dello stato di esecuzione della pipeline ETL.

  1. Selezionare la scheda Autore nel riquadro sinistro in Data Factory o nella scheda Integrazione nel riquadro sinistro in Synapse Studio. Selezionare quindi il pulsante + (più) e quindi selezionare Pipeline per creare una nuova pipeline.

  2. Nel pannello "Generale" in Proprietà specificare MasterPipeline per Nome. Comprimere quindi il pannello facendo clic sull'icona Proprietà nell'angolo superiore destro.

  3. Cercare la pipeline nel riquadro "Attività" della pipeline e trascinare tre attività Execute Pipeline nell'area di disegno della pipeline.

  4. Selezionare la prima attività Esegui pipeline nell'area di disegno se non è già selezionata e il riquadro "Generale" per modificarne i dettagli.

    • Per la proprietà Name dell'attività Esegui pipeline , è consigliabile usare il nome della pipeline ETL richiamata per cui si desidera inviare notifiche. Ad esempio, è stato usato LoadDataPipeline come Nome dell'attività Execute Pipeline perché è il nome della pipeline richiamata.
    • Nel riquadro "Impostazioni" selezionare una pipeline esistente o crearne una nuova usando il pulsante + Nuovo per la proprietà della pipeline richiamata. In questo caso, ad esempio, è stata selezionata la pipeline LoadDataPipeline per la proprietà "Pipeline richiamata". Selezionare altre opzioni e configurare i parametri per la pipeline in base alle esigenze per completare la configurazione.

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

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

  5. Selezionare la seconda attività Esegui pipeline nell'area di disegno ed è "Generale" per modificarne i dettagli.

    • Specificare La notifica OnSuccess per Nome dell'attività Esegui pipeline .

    • Nel riquadro "Impostazioni" selezionare NotafiyTeamsChannelPipeline pipeline, creata in precedenza, per la proprietà Della pipeline richiamata. Personalizzare i parametri in base al tipo di attività richiesto. Ad esempio, ho personalizzato i parametri come segue:

      Nome Valore
      sottoscrizione 11111111-0000-aaaa-bbbb-0000000000
      resourceGroup contosorg
      runId @activity('LoadDataPipeline').output['pipelineRunId']
      name @activity('LoadDataPipeline').output['pipelineName']
      triggerTime @activity('LoadDataPipeline').ExecutionStartTime
      stato @activity('LoadDataPipeline').Status
      messaggio 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
    • Creare una condizione di dipendenza per la seconda attività Execute Pipeline in modo che venga eseguita solo se la prima attività Execute Pipeline ha esito positivo. Per creare questa dipendenza, selezionare l'handle verde a destra della prima attività Esegui pipeline , trascinarlo e connetterlo alla seconda attività Esegui 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. Selezionare la terza attività Esegui pipeline nell'area di disegno ed è "Generale" per modificarne i dettagli.

    • Specificare La notifica OnFailure per Nome dell'attività Esegui pipeline .

    • Nel riquadro "Impostazioni" selezionare NotafiyTeamsChannelPipeline pipeline per la proprietà Della pipeline richiamata. Personalizzare i parametri in base al tipo di attività richiesto. Ad esempio, ho personalizzato i parametri questa volta come indicato di seguito:

      Nome Valore
      sottoscrizione 11111111-0000-aaaa-bbbb-0000000000
      resourceGroup contosorg
      runId @activity('LoadDataPipeline').output['pipelineRunId']
      name @activity('LoadDataPipeline').output['pipelineName']
      triggerTime @activity('LoadDataPipeline').ExecutionStartTime
      stato @activity('LoadDataPipeline').Status
      messaggio @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
    • Creare una condizione di dipendenza per la terza attività Execute Pipeline in modo che venga eseguita solo se la prima attività Execute Pipeline ha esito negativo. Per creare questa dipendenza, selezionare l'handle rosso sul lato destro della prima attività Esegui pipeline , trascinarlo e connetterlo alla terza attività Esegui pipeline .

    • Convalidare, eseguire il debug e quindi pubblicare la 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. Eseguire la pipeline per ricevere notifiche in Teams. Ad esempio, di seguito sono riportate le notifiche di esempio, quando la pipeline è stata eseguita correttamente e quando non è riuscita.

    Shows on success pipeline notifications in a Teams channel.

    Shows on failure pipeline notifications in a Teams channel.

  8. Selezionare il pulsante "Visualizza esecuzione pipeline" per visualizzare l'esecuzione della pipeline.

Aggiungere messaggi dinamici con variabili di sistema ed espressioni

È possibile usare le variabili di sistema e le espressioni per rendere dinamici i messaggi. Ad esempio:

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

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

Le espressioni precedenti restituiranno i messaggi di errore pertinenti da un errore, che può essere inviato come notifica in un canale di Teams. Per altre informazioni su questo argomento, vedere l'articolo sulle proprietà di output attività Copy.

È anche consigliabile esaminare lo schema del payload di notifica supportato da Microsoft Teams e personalizzare ulteriormente il modello precedente in base alle proprie esigenze.

Come inviare messaggi di posta elettronica da una pipeline