HOW TO TD(User Engagement)Treasure Data User Engagement

WorkflowからMicrosoft Teamsにエラー通知を送信する方法

ホーム » WorkflowからMicrosoft Teamsにエラー通知を送信する方法

データマネジメントチームの金野 浩之です。
以前のブログでWorkflowの成否をメールに通知する方法をご紹介させていただきました。普段の業務ではメールではなく、SlackやMicrosoft Teamsなどのチャットツールを利用されている方も多いかと思います。

今回は、Workflowのエラー通知をメールではなくMicrosoft Teamsのチャネルへ送信する方法についてご紹介いたします。TreasureDataのWorkflowエンジンであるDigdagではHTTPオペレータをサポートしていますので、WorkflowからTeamsに通知を送信するには、Teams APIはPOST形式のHTTPリクエストでメッセージを送信することができるTeams APIを利用します。

※2021年9月時点のTeams APIの仕様によります。

WorkflowでのHTTPオペレータの利用方法

WorkflowにてHTTPオペレータを使用する場合のサンプルコードは以下の通りです。
Teamsにメッセージを送信する処理はそれ単体でdigファイルを作成しおき、queryなどを実行する大本のWorkflowでエラーが発生した場合にcallオペレータで呼び出すようにします。


2行目がWorkflowのHTTPオペレータになり、リクエスト送信先のURLを記載します。
3行目はHTTPリクエストのメソッドを記載します。今回はPOSTメソッドを利用します。(HTTPオペレータではGETメソッドもサポートしており、その場合はオプションの指定方法が異なります)
4行目にはPOSTするコンテンツの本文を、5行目と6行目ではコンテンツのフォーマットと、コンテンツタイプを指定します。

こちらでWorkflowを実行すると2行目で指定したURLに対してリクエストを送信することができます。Teams API経由でメッセージを送信する場合、httpオペレータで指定するリクエストの投げ先となるURLと、実際に送信するメッセージを上記フォーマットに併せて定義します。

Microsoft Teamsの事前準備

Workflowに定義するHTTPリクエストの投げ先は、Microsoft Teamsで作成できる受信Webhook URLを使用します。
受信Webhook URLの作成はMicrosoft社のDocsをご参照ください。

Workflowの実装方法

ここで取得した受信用Webhook URLをWorkflowのhttpオペレータの引数に指定します。

例えば、https://zzzzzzz.webhook.office.com/XXXXXXXXXX/
のようなWebhook URLが発行された場合、下記図の2行目のようにWorkflowへ定義します。

また、Teamsへ送信するメッセージは下記5行目のようにJSON形式でcontentに定義する必要があります。併せてcontent_format: text、content_type: application/jsonと指定します。


これのWorkflowを実行すると、contentに指定した値がTeamsのチャットに送信されます。

よりリッチなメッセージの配信について

アダプティブカードという形式にすることで、送信するコンテンツのレイアウトを整えたり、太字にするなどの装飾も可能です。

以下はアダプティブカードに則って作成したメッセージの例です。${session_id}や$(attempt_id}などのWorkflow実行時に得られる情報を動的にメッセージへ埋め込むことで、エラーの発生したjobにすぐアクセスできるようなリンクも生成することができます。

{"type":"message","attachments":[
 {"contentType":"application/vnd.microsoft.card.adaptive","contentUrl":null,"content":
   {
     "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
     "type": "AdaptiveCard",
     "version": "1.0",
     "body": [
       {
         "type": "Container",
         "items": [
           {
             "type": "TextBlock",
             "text": "Workflow Failure Alert",
             "weight": "bolder",
             "size": "medium"
           },
         ]
       },
       {
         "type": "Container",
         "items": [
           {
             "type": "TextBlock",
             "text": "please re run teams_api_test",
             "wrap": true
           },
           {
"type": "FactSet",
             "facts": [
               {
                 "title": "workflow_name:",
                 "value": "teams_api_test"
               },
               {
                 "title": "session_time:",
                 "value": "${session_local_time}"
               },
               {
                 "title": "Console Access:",
                 "value": "[https://console.treasuredata.com/app/workflows/sessions/${session_id}](https://console.treasuredata.com/app/workflows/sessions/${session_id})"
               },
               {
                 "title": "Command for Rerun:",
                 "value": "`td wf retry ${attempt_id} --latest-revision --resume`"
               }
             ]
           }
         ]
       }
     ]
   }
   }
   ]
}

こちらのアダプティブメッセージを使った場合、Teams側でメッセージを受信するとこのように表示されます。

見出しが太字で強調され、TDコンソールへのリンクURLもハイパーリンクが張られていることがおわかりいただけるかと思います。


エラー発生時にTeamsへメッセージを送信する際は、あらかじめTeamsにメッセージを送信する処理のみのdigファイルを作成していただき、以下のようにerrorタスクからcallオペレータで呼び出すような形で実装します。

おわりに

今回はWorkflowのエラー発生時にMicrosoft Teamsへエラー通知を行う場合の実装方法をご紹介させていただきました。プロジェクトが大きくなるとTreasureDataへアクセスする人数も増え、運用負荷がかかってくることも多いかと思います。
プロジェクトチーム全体でWorkflowの実行結果を確認できるような仕組みを入れることでメンバー間で情報共有しやすくなりますので、ぜひお役立てください。

金野 浩之

Data Managementチーム

新卒入社したITベンチャーではASPサービスの運用サポート業務に従事。前職のSaaSベンダーではエンジニアとしてレコメンドエンジン、プライベートDMP、MAツールの新規導入と導入後の技術サポートに約6年従事。プライベートDMPのデータアーキテクト構築、バッチ集計プログラムの作成、レポート画面の構築、MAのシナリオ設計・運用サポートから、SaaSのインフラ基盤構築・運用保守など幅広い業務領域を担当。特に、旅行代理店・化粧品・健康食品通販会社・人材サービス・アパレル・EC通販などBtoC業種での導入・サポートに携わる。2019年よりトレジャーデータに参画。データマネジメントチームの一員として技術的側面からTreasure Data CDPの導入、運用支援を行う。

得意領域 : データアーキテクト、Workflow、SQL、RDBMS、Javascript、MA・レコメンド・WEB接客の設計・実装

Back to top button