noxi雑記

.NET、Angularまわりの小ネタブログ

Microsoft TeamsにシンプルなWebhookを送信する

Microsoft TeamsはMicrosoftが開発しているチームコラボレーションツールです。SlackのMicrosoft版です。
Teamsにはいくつかの拡張機能(コネクタ)が存在し、Webhook機能もコネクタとして提供されています。みんな大好きWebhook。Webhookを利用してTeamsにメッセージを投稿する必要性に駆られたため、試してみます。


WebhookコネクタをTeamsに追加する

TeamsにWebhookコネクタを追加するには、チャネルの右にある「…」をクリックし、コネクタを選択します。追加可能なコネクタ一覧が表示されるので、「Incoming Webhook」を選択すると初回はインストール画面になります。ためらわずにインストールしましょう。

f:id:noxi515:20190623171719p:plain
コネクタの選択

f:id:noxi515:20190623172114p:plain
コネクタのインストール

インストールまたは追加をクリックするとWebhookの設定画面になります。Webhookの名前と画像が設定できます(名前も画像も後から変更可能)。

f:id:noxi515:20190623172438p:plain
Incoming Webhookコネクタ追加

名前を入力して作成を押すとWebhookを送信するためのURLが表示されます。

f:id:noxi515:20190623172908p:plain
Webhook作成後にURLが表示される

テキストを送信する

TeamsのWebhookにはシンプルにテキストのみのものとリッチなカード形式のものと、二種類の形式があります。まずはシンプルなテキストのみのパターンを送信してみます。

。。。といってもシンプルな形式のものは text プロパティを含めたJSONを送信するだけです。PowerShellから送信するサンプルです。

Invoke-WebRequest `
  -Method POST `
  -ContentType "application/json" `
  -Body "{""text"": ""sample""}" `
  -Uri https://outlook.office.com/webhook/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

StatusCode        : 200
StatusDescription : OK
Content           : 1
RawContent        : HTTP/1.1 200 OK
                    Cache-Control: no-cache
                    Pragma: no-cache
                    request-id: 0f6153f8-fe77-4147-bbe3-e5367317b80c
                    X-CalculatedBETarget: OSAPR01MB2033.jpnprd01.prod.outlook.com
                    X-BackEndHttpStatus: 200
                    X…
Headers           : {[Cache-Control, System.String[]], [Pragma, System.String[]], [request-id, System.String[]], [X-Cal
                    culatedBETarget, System.String[]]…}
Images            : {}
InputFields       : {}
Links             : {}
RawContentLength  : 1
RelationLink      : {}

f:id:noxi515:20190623174228p:plain
シンプルなテキストの結果

Markdown形式を送信する

シンプルなテキスト形式はMarkdownがサポートされているため、太字や斜体といった表現ができます。

Invoke-WebRequest `
  -Method POST `
  -ContentType "application/json" `
  -Body "{""text"": ""This is message. **Bold** *Italic*""}" `
  -Uri https://outlook.office.com/webhook/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

f:id:noxi515:20190623175051p:plain
簡単なマークダウン結果

改行を送信する

テキストに改行を含めたい場合、ただ改行文字列の \n を送信しても改行されません。改行文字列の前にスペース二つを含めます。Markdownなので。

Invoke-WebRequest `
  -Method POST `
  -ContentType "application/json" `
  -Body "{""text"": ""This is message. **Bold** *Italic*  \nSecond line""}" `
  -Uri https://outlook.office.com/webhook/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

f:id:noxi515:20190623175440p:plain
改行を含むメッセージ

ちょっとリッチなマークダウンを送信する

最後にタイトルとリストを含むマークダウンを送信してみた例です。タイトル行の後ろにちゃんと改行を入れてあげないと、全てフォントサイズが大きくなるので注意が必要です。

Invoke-WebRequest `
  -Method POST `
  -ContentType "application/json" `
  -Body "{""text"": ""# Title  \nThis is message.  \n\n - List 1\n - list2\n - list3""}" `
  -Uri https://outlook.office.com/webhook/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

f:id:noxi515:20190623180531p:plain
ちょっとリッチなマークダウン