Teams incoming webhook で使う JSON Markdown

Teams チャネルは、Incoming webhook と呼ばれる仕組みを利用して外部からメッセージを投稿することが出来る。例えばシステムでエラーが発生した際の通知なども、簡単に行うことが出来る。投稿するメッセージには Markdown が使用できるが、その使用方法の簡単な説明。

Teams incoming webhook (チャネル) への通知の飛ばし方

通知先対象の Teams チャネルで予めコネクタを作成しておく。チャネルの右側に表示されている三点メニューから、コネクタの作成や既存コネクタの管理が出来る。

受信 web フックを使用して Microsoft Teams に外部要求を投稿する - Teams | Microsoft Docs

コネクタ作成すると Webhook の URL が取得できるので、その URL に対して通知内容を含んだ JSON を POST するだけ。メッセージカード形式と言うらしいが、HTTP POST 出来る環境であれば良いので、例えば Curl でも送ることが出来て汎用性が高い (他にもっとリッチな表現が可能なメッセージ形式もあるらしいが、ここでは触れない)。

Teams incoming webhook で使用する、超簡単な JSON

タイトルと本文のシンプルな構成で良ければ、以下のような JSON を Body に指定すれば OK。

{
  "title": "タイトル",
  "text": "本文"
}

Markdown 注意事項

JSON では Markdown が使用可能。使用可能な Markdown の例は、下記ドキュメントの「テキストの書式設定」を参照。

従来のアクション可能メッセージ カード リファレンス - Outlook Developer | Microsoft Docs

ただ、上記の説明が全てではないので、最終的には自分で色々と試行錯誤する必要がある (例えば「`」を使ったインラインコードとかも使える)。また、カードのプレイグラウンドサイトでの確認は、ここで対象としている JSON についてはあまり役に立たないので、最初からテスト用のチャネルでも作ってそちらに実際に投げてレイアウト確認した方が良い。

その他注意事項
  • title フィールドでは、Markdown (改行含む) は使えない様子
  • ** によるボールドなどは、コンテンツとの間にスペースは挟まないこと
  • 改行は、半角スペース 2 つ+\n。もしくは
    (Markdown じゃないけど・・・)
  • 空行は全角スペースなどを入れる必要がある (全角スペース+半角スペース 2 つ+\n)。<br /> であれば普通に空行入れられる
  • 改行、空行については上記のような状況のため、Markdown に拘らずに <br /> タグを使った方が良いかも

サンプル

{
  "title": "タイトル改行不可",
  "text": "**発生した例外:** `xxxException`<br /><br />以下のページを参照し、状況確認してください。  \n[**poke_dev's blog**](https://poke-dev.hatenablog.com/)"
}