Enviar notificações para um canal do Microsoft Teams a partir de um pipeline do Azure Data Factory ou do Synapse Analytics

Muitas vezes, é necessário enviar notificações durante ou após a execução de um pipeline. A notificação fornece alertas proativos e reduz a necessidade de monitoramento reativo para descobrir problemas.  Você pode aprender sobre como enviar notificações por e-mail usando aplicativos lógicos que um pipeline de fábrica de dados ou Synapse pode invocar. Muitas empresas também estão usando cada vez mais o Microsoft Teams para colaboração. Este artigo mostra como configurar notificações de alertas de pipeline para o Microsoft Teams. 

Pré-requisitos

Antes de enviar notificações para o Teams a partir de seus pipelines, você deve criar um Webhook de entrada para seu canal do Teams. Se você precisar criar um novo canal do Teams para essa finalidade, consulte a documentação do Teams.  

  1. Abra o Microsoft Teams e vá para a guia Aplicativos. Procure por "Incoming Webhook" e selecione o conector Incoming Webhook.

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

  2. Selecione o botão "Adicionar a uma equipe" para adicionar o conector ao site de nome do canal de equipe ou equipe para o qual você deseja enviar notificações.

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

  3. Digite ou selecione Nome do canal da Equipe ou da Equipe para onde deseja enviar as notificações.

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

  4. Selecione o botão "Configurar um conector" para configurar o Webhook de entrada para o nome do canal de equipe ou equipe que você selecionou na etapa 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. Nomeie o Webhook conforme apropriado e, opcionalmente, carregue um ícone para identificar suas mensagens. Depois disso, selecione o botão "Criar" para criar o Webhook de entrada.

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

  6. Copie o URL do Webhook gerado na criação e salve-o para uso posterior no pipeline. Depois disso, selecione o botão "Concluído" para concluir a configuração.

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

  7. Você pode ver a notificação no canal onde você adiciona o conector webhook.

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

Etapas para enviar notificações no canal do Teams a partir de um pipeline:

  1. Selecione a guia Autor no painel esquerdo.

  2. Selecione o botão + (mais) e, em seguida, selecione Novo pipeline.

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

  3. No painel "Propriedades" em "Geral", especifique NotifiyTeamsChannelPipeline para Name. Em seguida, feche o painel clicando no ícone Propriedades no canto superior direito.

    Shows the "Properties" panel.

    Shows the "Properties" panel hidden.

  4. No painel "Configurações", selecione Parâmetros e, em seguida, selecione o botão + Novo para definir os seguintes parâmetros para o pipeline.

    Nome Type Valor Predefinido
    subscrição 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']
    nome String @activity('Specify name of the calling pipeline').output['pipelineName']
    Tempo de gatilho String @activity('Specify name of the calling pipeline').ExecutionStartTime
    estado String @activity('Specify name of the calling pipeline').Status
    mensagem 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

    Esses parâmetros são usados para construir a URL de monitoramento. Suponha que você não forneça uma assinatura válida e um grupo de recursos (da mesma fábrica de dados a que os pipelines pertencem). Nesse caso, a notificação não conterá uma URL de monitoramento de pipeline válida, mas as mensagens ainda funcionarão. Além disso, adicionar esses parâmetros ajuda a evitar a necessidade de sempre passar esses valores de outro pipeline. Se você pretende controlar esses valores por meio de uma abordagem orientada por metadados, deve modificá-los de acordo.

    Gorjeta

    Recomendamos adicionar a ID de Assinatura do Data Factory atual, o Grupo de Recursos e a URL do webhook do Teams (consulte os pré-requisitos) para o valor padrão dos parâmetros relevantes.

  5. No painel "Configurações", selecione Variáveis e, em seguida, selecione o botão + Novo para definir as seguintes variáveis para o seu pipeline.

    Nome Type Valor Predefinido
    Cartão de mensagem String

    Shows the "Pipeline variables".

  6. Procure por "Definir variável" no painel "Atividades" do pipeline e arraste uma atividade Definir variável para a tela do pipeline.

  7. Selecione a atividade Definir variável na tela, se ainda não estiver selecionada, e a guia "Geral" para editar seus detalhes.

  8. Na guia "Geral", especifique Definir esquema JSON para Nome da atividade Definir variável .

    Shows the "Set variable" activity general tab.

  9. Na guia "Variáveis", selecione a variável messageCard para a propriedade Name e insira o seguinte JSON para sua propriedade 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. Procure "Web" no painel "Atividades" do pipeline e arraste uma atividade da Web para a tela do pipeline.

  11. Crie uma condição de dependência para a atividade da Web para que ela só seja executada se a atividade Definir variável for bem-sucedida. Para criar essa dependência, selecione a alça verde no lado direito da atividade Definir variável, arraste-a e conecte-a à atividade da Web.

  12. Selecione a nova atividade da Web na tela, se ainda não estiver selecionada, e a guia "Geral" para editar seus detalhes.

  13. No painel "Geral", especifique Invoke Teams Webhook Url para Nome da atividade da Web .

    Shows the "Web" activity general pane.

  14. No painel "Configurações", defina as seguintes propriedades da seguinte maneira:

    Property valor
    URL @pipeline().parameters.teamWebhookUrl
    Método POST
    Corpo @json(variables('messageCard'))

    Shows the "Web" activity settings pane.

  15. Tudo pronto e agora você está pronto para validar, depurar e publicar seu pipeline NotifiyTeamsChannelPipeline .

    • Para validar o pipeline, selecione Validar na barra de ferramentas.
    • Para depurar o pipeline, selecione Depurar na barra de ferramentas. Você pode ver o status da execução do pipeline na guia "Saída" na parte inferior da janela.
    • Quando o pipeline puder ser executado com êxito, na barra de ferramentas superior, selecione Publicar tudo. Esta ação publica entidades que você criou no Data Factory. Aguarde até ver a mensagem Publicação com êxito.

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

Uso da amostra

Neste cenário de uso de exemplo, criaremos um pipeline mestre com três atividades de Executar Pipeline . A primeira atividade de Pipeline de Execução invocará nosso pipeline de ETL e as duas atividades restantes de Pipeline de Execução invocarão o pipeline "NotifiyTeamsChannelPipeline" para enviar notificações relevantes de sucesso ou falha para o canal do Teams, dependendo do estado de execução de nosso pipeline de ETL.

  1. Selecione a guia Autor no painel esquerdo no Data Factory ou a guia Integrar no painel esquerdo no Synapse Studio. Em seguida, selecione o botão + (mais) e, em seguida, selecione Pipeline para criar um novo pipeline.

  2. No painel "Geral" em Propriedades, especifique MasterPipeline para Name. Em seguida, feche o painel clicando no ícone Propriedades no canto superior direito.

  3. Procure pipeline no painel "Atividades" do pipeline e arraste três atividades do Executar pipeline para a tela do pipeline .

  4. Selecione primeiro a atividade Executar pipeline na tela, se ainda não estiver selecionada, e seu painel "Geral" para editar seus detalhes.

    • Para a propriedade Name da atividade Executar Pipeline, recomendamos usar o nome do pipeline ETL invocado para o qual você deseja enviar notificações. Por exemplo, usamos LoadDataPipeline para o Nome de nossa atividade de Pipeline de Execução porque é o nome do nosso pipeline invocado.
    • No painel "Configurações", selecione um pipeline existente ou crie um novo usando o botão + Novo para a propriedade Invoked pipeline . Por exemplo, em nosso caso, selecionamos o pipeline LoadDataPipeline para a propriedade "Invoked pipeline". Selecione outras opções e configure quaisquer parâmetros para o pipeline conforme necessário para concluir sua configuração.

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

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

  5. Selecione a segunda atividade Executar pipeline na tela e no painel "Geral" para editar seus detalhes.

    • Especifique OnSuccess Notification para Nome da atividade Executar Pipeline .

    • No painel "Configurações", selecione o pipeline NotifiyTeamsChannelPipeline , que criamos anteriormente, para a propriedade Invoked pipeline . Personalize os parâmetros conforme necessário com base no tipo de atividade. Por exemplo, personalizei os parâmetros da seguinte forma:

      Nome Valor
      subscrição 11111111-0000-aaaa-bbbb-0000000000
      resourceGroup contosorg
      runId @activity('LoadDataPipeline').output['pipelineRunId']
      nome @activity('LoadDataPipeline').output['pipelineName']
      Tempo de gatilho @activity('LoadDataPipeline').ExecutionStartTime
      estado @activity('LoadDataPipeline').Status
      mensagem 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
    • Crie uma condição de dependência para a segunda atividade de Pipeline de Execução para que ela só seja executada se a primeira atividade de Pipeline de Execução for bem-sucedida. Para criar essa dependência, selecione a alça verde no lado direito da primeira atividade do Pipeline de Execução, arraste-a e conecte-a à segunda atividade do Pipeline de Execução.

    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. Selecione a terceira atividade Executar pipeline na tela e no painel "Geral" para editar seus detalhes.

    • Especifique OnFailure Notification para Nome da atividade Executar Pipeline .

    • No painel "Configurações", selecione NotifiyTeamsChannelPipeline pipeline para a propriedade Invoked pipeline . Personalize os parâmetros conforme necessário com base no tipo de atividade. Por exemplo, personalizei os parâmetros desta vez da seguinte forma:

      Nome Valor
      subscrição 11111111-0000-aaaa-bbbb-0000000000
      resourceGroup contosorg
      runId @activity('LoadDataPipeline').output['pipelineRunId']
      nome @activity('LoadDataPipeline').output['pipelineName']
      Tempo de gatilho @activity('LoadDataPipeline').ExecutionStartTime
      estado @activity('LoadDataPipeline').Status
      mensagem @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
    • Crie uma condição de dependência para a terceira atividade do Pipeline de Execução para que ela só seja executada se a primeira atividade do Pipeline de Execução falhar. Para criar essa dependência, selecione a alça vermelha no lado direito da primeira atividade do Pipeline de Execução, arraste-a e conecte-a à terceira atividade do Pipeline de Execução.

    • Valide, depure e publique seu 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. Execute o pipeline para receber notificações no Teams. Por exemplo, abaixo estão exemplos de notificações, quando meu pipeline foi executado com êxito e quando falhou.

    Shows on success pipeline notifications in a Teams channel.

    Shows on failure pipeline notifications in a Teams channel.

  8. Selecione o botão "View pipeline run" para visualizar a execução do pipeline.

Adicionar mensagens dinâmicas com variáveis e expressões do sistema

Você pode usar variáveis e expressões do sistema para tornar suas mensagens dinâmicas. Por exemplo:

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

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

As expressões acima retornarão as mensagens de erro relevantes de uma falha, que podem ser enviadas como notificação em um canal do Teams. Para obter mais informações sobre este tópico, consulte o artigo Copiar propriedades de saída da atividade.

Também recomendamos que você analise o esquema de carga útil de notificação suportado pelo Microsoft Teams e personalize ainda mais o modelo acima de acordo com suas necessidades.

Como enviar e-mails de um pipeline