Slackに通知を行うAzure FunctionsのOutputBindingのサンプルがあるので、これを利用してMSTeams用のOutputBinding作れないかなと思って試してみました。
※本記事の情報は2018年3月24日時点の情報となります。
事前準備
MS TeamsのコネクタからIncoming WebhookのURLを取得します。
MS Teamsを起動して対象のチャンネルからチャンネル名の隣にある設定ボタンを選択します。
次にコネクタの種類からIncoming Webhookを選択してください。
コネクタの名前を入力して作成を選択します。イメージは任意で変更してください。
WebhookのURLを取得して保存しておきます。あとは完了を選択して終了してください。
これで事前準備は完了です。
実装
ソースは下記にあげました。興味があればご参照してください。
Slackに通知する方法と大体一緒で差異があるとすればIncoming WebhookのURLと通知に使うためのモデルくらいです。
ネームスペースやクラス名はTeams用に変更しましたが、実際に弄ったのはモデルクラスのTeamsMessage.csとそれをBindするTeamsAttribute.csとTeamsAsyncCollector.csのMergeMessagePropertyメソッドの中で値をバインドするところです。タイトルと本文のシンプルな情報を通知する分には問題ないのですがTeamsは結構表現度が高いメッセージを送れるのでそういったメッセージを送ろうとすると難易度が高くなりそうです。
プロジェクトを取得したらlocal.setting.jsonのTeamsWebHookに先に入手したURLを記載して実行してください。実行後にFunctionsのURLを叩けばTeamsに通知が飛ぶはずです。
はまりポイント
本プロジェクトは.NetFrameworkの4.6.1を利用しています。WebJobsのバージョンは現時点で2.1を利用します。2.2にアップデートするとCore対応されているようで依存性に問題が発生するのでアップデートはしないようにしましょう。
あと、バージョンの問題でAttributeの[AutoResolve]や[AutoSetting]等が古い形式になっているためBindの部分で複雑なことができないくなっています。全てCore対応すればうまく動くのかもしれませんが今回はそこまで追っていないのでいずれ探求してみようと思います。
コメント