Wysyłanie powiadomień do kanału usługi Microsoft Teams z potoku usługi Azure Data Factory lub Synapse Analytics

Często konieczne jest wysyłanie powiadomień podczas lub po wykonaniu potoku. Powiadomienie zapewnia proaktywne alerty i zmniejsza potrzebę reaktywnego monitorowania w celu wykrycia problemów.  Dowiesz się, jak wysyłać powiadomienia e-mail przy użyciu aplikacji logiki, które mogą wywoływać potok fabryki danych lub usługi Synapse. Wiele przedsiębiorstw coraz częściej używa usługi Microsoft Teams do współpracy. W tym artykule pokazano, jak skonfigurować powiadomienia z alertów potoku do usługi Microsoft Teams. 

Wymagania wstępne

Aby można było wysyłać powiadomienia do usługi Teams z potoków, musisz utworzyć przychodzący element webhook dla kanału usługi Teams. Jeśli chcesz utworzyć nowy kanał usługi Teams w tym celu, zapoznaj się z dokumentacją usługi Teams.  

  1. Otwórz aplikację Microsoft Teams i przejdź do karty Aplikacje. Wyszukaj ciąg "Przychodzący element webhook" i wybierz łącznik przychodzącego elementu webhook.

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

  2. Wybierz przycisk "Dodaj do zespołu", aby dodać łącznik do witryny Nazwy kanału zespołu lub zespołu, w której chcesz wysyłać powiadomienia.

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

  3. Wpisz lub wybierz nazwę kanału Team lub Team, w którym chcesz wysłać powiadomienia.

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

  4. Wybierz przycisk "Skonfiguruj łącznik", aby skonfigurować element webhook przychodzący dla nazwy kanału zespołu lub zespołu wybranej w poprzednim kroku.

    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. Nazwij element webhook odpowiednio i opcjonalnie przekaż ikonę, aby zidentyfikować wiadomości. Następnie wybierz przycisk "Utwórz", aby utworzyć przychodzący element webhook.

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

  6. Skopiuj adres URL elementu webhook wygenerowany podczas tworzenia i zapisz go do późniejszego użycia w potoku. Następnie wybierz przycisk "Gotowe", aby ukończyć konfigurację.

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

  7. Powiadomienie jest widoczne w kanale, w którym dodajesz łącznik elementu webhook.

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

Kroki wysyłania powiadomień w kanale usługi Teams z potoku:

  1. Wybierz kartę Autor w okienku po lewej stronie.

  2. Wybierz przycisk + (plus), a następnie wybierz pozycję Nowy potok.

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

  3. W okienku "Właściwości" w obszarze "Ogólne" określ wartość NotifiyTeamsChannelPipeline w polu Nazwa. Następnie zwiń panel, klikając ikonę Właściwości w prawym górnym rogu.

    Shows the "Properties" panel.

    Shows the "Properties" panel hidden.

  4. W okienku "Konfiguracje" wybierz pozycję Parametry, a następnie wybierz przycisk + Nowy zdefiniuj następujące parametry dla potoku.

    Nazwisko Type Wartość domyślna
    subskrypcja 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
    wiadomość 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".

    Uwaga

    Te parametry służą do konstruowania adresu URL monitorowania. Załóżmy, że nie udostępniasz prawidłowej subskrypcji i grupy zasobów (tej samej fabryki danych, do której należą potoki). W takim przypadku powiadomienie nie będzie zawierać prawidłowego adresu URL monitorowania potoku, ale komunikaty będą nadal działać. Ponadto dodanie tych parametrów pomaga zapobiec konieczności zawsze przekazywania tych wartości z innego potoku. Jeśli zamierzasz kontrolować te wartości za pomocą podejścia opartego na metadanych, należy odpowiednio je zmodyfikować.

    Napiwek

    Zalecamy dodanie bieżącego identyfikatora subskrypcji usługi Data Factory, grupy zasobów i adresu URL elementu webhook usługi Teams (zapoznaj się z wymaganiami wstępnymi) dla wartości domyślnej odpowiednich parametrów.

  5. W okienku "Konfiguracje" wybierz pozycję Zmienne, a następnie wybierz przycisk + Nowy zdefiniuj następujące zmienne dla potoku.

    Nazwisko Type Wartość domyślna
    messageCard String

    Shows the "Pipeline variables".

  6. Wyszukaj ciąg "Ustaw zmienną" w okienku "Działania" potoku i przeciągnij działanie Ustaw zmienną na kanwę potoku.

  7. Wybierz działanie Ustaw zmienną na kanwie, jeśli nie zostało jeszcze wybrane, a jej karta "Ogólne", aby edytować jego szczegóły.

  8. Na karcie "Ogólne" określ wartość Ustaw schemat JSON dla pozycji Nazwadziałania Ustaw zmienną .

    Shows the "Set variable" activity general tab.

  9. Na karcie "Zmienne" wybierz zmienną messageCard dla właściwości Name i wprowadź następujący kod JSON dla właściwości 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. Wyszukaj ciąg "Web" w okienku "Działania" potoku i przeciągnij działanie internetowe na kanwę potoku.

  11. Utwórz warunek zależności dla działania sieci Web , aby był uruchamiany tylko wtedy, gdy działanie Ustaw zmienną powiedzie się. Aby utworzyć tę zależność, wybierz zielony uchwyt po prawej stronie działania Ustaw zmienną , przeciągnij ją i połącz z działaniem sieci Web .

  12. Wybierz nowe działanie sieci Web na kanwie, jeśli nie zostało jeszcze wybrane, a jej karta "Ogólne", aby edytować jego szczegóły.

  13. W okienku "Ogólne" określ wartość Invoke Teams Webhook Url (Wywołaj adres URL elementu webhook usługi Teams) jako Nazwę działania internetowego.

    Shows the "Web" activity general pane.

  14. W okienku "Ustawienia" ustaw następujące właściwości w następujący sposób:

    Właściwości wartość
    URL @pipeline().parameters.teamWebhookUrl
    Metoda POST
    Treść @json(variables('messageCard'))

    Shows the "Web" activity settings pane.

  15. Wszystko gotowe do zweryfikowania, debugowania, a następnie opublikowania potoku NotifiyTeamsChannelPipeline .

    • Wybierz na pasku narzędzi pozycję Weryfikuj, aby zweryfikować potok.
    • Aby debugować potok, wybierz na pasku narzędzi pozycję Debuguj. Stan uruchomienia potoku można zobaczyć na karcie "Dane wyjściowe" w dolnej części okna.
    • Po pomyślnym uruchomieniu potoku na górnym pasku narzędzi wybierz pozycję Opublikuj wszystko. Ta akcja publikuje jednostki utworzone w usłudze Data Factory. Poczekaj na wyświetlenie komunikatu Pomyślnie opublikowano.

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

Przykładowe zastosowanie

W tym przykładowym scenariuszu użycia utworzymy potok główny z trzema działaniami Wykonywania potoku . Pierwsze działanie Execute Pipeline (Wykonywanie potoku) spowoduje wywołanie potoku ETL, a pozostałe dwa działania potoku Execute Pipeline wywoła potok "NotifiyTeamsChannelPipeline", aby wysłać odpowiednie powiadomienia o powodzeniu lub niepowodzeniu do kanału usługi Teams w zależności od stanu wykonania potoku ETL.

  1. Wybierz kartę Tworzenie w okienku po lewej stronie w usłudze Data Factory lub kartę Integracja w okienku po lewej stronie w programie Synapse Studio. Następnie wybierz przycisk + (plus), a następnie wybierz pozycję Potok , aby utworzyć nowy potok.

  2. W panelu "Ogólne" w obszarze Właściwości określ wartość MasterPipeline w polu Nazwa. Następnie zwiń panel, klikając ikonę Właściwości w prawym górnym rogu.

  3. Wyszukaj potok w okienku "Działania" potoku i przeciągnij trzy działania Execute Pipeline na kanwę potoku.

  4. Wybierz pierwsze działanie Wykonaj potok na kanwie, jeśli nie zostało jeszcze wybrane, a jego okienko "Ogólne", aby edytować jego szczegóły.

    • W polu Nazwa właściwości działania Execute Pipeline (Wykonywanie potoku ) zalecamy użycie nazwy wywoływanego potoku ETL, dla którego chcesz wysyłać powiadomienia. Na przykład użyliśmy parametru LoadDataPipeline jako nazwydziałania Execute Pipeline , ponieważ jest to nazwa wywoływanego potoku.
    • W okienku "Ustawienia" wybierz istniejący potok lub utwórz nowy przy użyciu przycisku + Nowy dla właściwości wywoływanego potoku. Na przykład w naszym przypadku wybrano potok LoadDataPipeline dla właściwości "Wywoływany potok". Wybierz inne opcje i skonfiguruj wszystkie parametry potoku zgodnie z wymaganiami, aby ukończyć konfigurację.

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

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

  5. Wybierz drugie działanie Wykonaj potok na kanwie i jest to okienko "Ogólne", aby edytować jego szczegóły.

    • Określ wartość OnSuccess Notification w polu Nazwa działania Execute Pipeline (Wykonywanie potoku).

    • W okienku "Ustawienia" wybierz pozycję NotifiyTeamsChannelPipeline potoku, który został utworzony wcześniej dla właściwości Wywoływany potok. Dostosuj parametry zgodnie z wymaganiami na podstawie typu działania. Na przykład parametry zostały dostosowane w następujący sposób:

      Nazwa/nazwisko Wartość
      subskrypcja 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
      wiadomość 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
    • Utwórz warunek zależności dla drugiego działania Wykonaj potok , tak aby był uruchamiany tylko wtedy, gdy pierwsze działanie Execute Pipeline powiedzie się. Aby utworzyć tę zależność, wybierz zielony uchwyt po prawej stronie pierwszego działania Wykonaj potok, przeciągnij go i połącz go z drugim działaniem Wykonaj potok .

    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. Wybierz trzecie działanie Wykonaj potok na kanwie i jest to okienko "Ogólne", aby edytować jego szczegóły.

    • Określ wartość OnFailure Notification w polu Nazwa działania Execute Pipeline (Wykonywanie potoku).

    • W okienku "Ustawienia" wybierz pozycję NotifiyTeamsChannelPipeline potoku dla właściwości Wywoływany potok. Dostosuj parametry zgodnie z wymaganiami na podstawie typu działania. Na przykład dostosowaliśmy parametry tym razem w następujący sposób:

      Nazwa/nazwisko Wartość
      subskrypcja 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
      wiadomość @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
    • Utwórz warunek zależności dla trzeciego działania Wykonaj potok , aby był uruchamiany tylko wtedy, gdy pierwsze działanie Execute Pipeline zakończy się niepowodzeniem. Aby utworzyć tę zależność, wybierz czerwony uchwyt po prawej stronie pierwszego działania Wykonaj potok, przeciągnij go i połącz go z trzecim działaniem Wykonaj potok .

    • Zweryfikuj, debuguj, a następnie opublikuj potok 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. Uruchom potok, aby otrzymywać powiadomienia w usłudze Teams. Na przykład poniżej przedstawiono przykładowe powiadomienia, gdy mój potok został uruchomiony pomyślnie i kiedy zakończył się niepowodzeniem.

    Shows on success pipeline notifications in a Teams channel.

    Shows on failure pipeline notifications in a Teams channel.

  8. Wybierz przycisk "Wyświetl uruchomienie potoku", aby wyświetlić przebieg potoku.

Dodawanie komunikatów dynamicznych ze zmiennymi systemowymi i wyrażeniami

Możesz użyć zmiennych systemowych i wyrażeń, aby komunikaty są dynamiczne. Na przykład: .

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

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

Powyższe wyrażenia zwracają odpowiednie komunikaty o błędach z błędu, które można wysłać jako powiadomienie w kanale usługi Teams. Aby uzyskać więcej informacji na temat tego tematu, zobacz artykuł działanie Kopiuj właściwości danych wyjściowych.

Zachęcamy również do przejrzenia schematu ładunku powiadomień obsługiwanych przez usługę Microsoft Teams i dalszego dostosowywania powyższego szablonu do Twoich potrzeb.

Jak wysyłać wiadomość e-mail z potoku