Microsoft Teams API (Incoming Webhook) で投稿

<details><summary>最終動作確認日: 2023/07/11</summary><div>
内容が古くなっていた場合、「内容が古くなっています」だけでいいのでコメント頂けると幸いです。
twitterで「[@wata_ash](https://twitter.com/wata_ash) 内容が古くなっています https://qiita.com/wataash/items/72b49509c3964294dd67 」とメンション頂いても大丈夫です。
</div></details>

MS公式ドキュメント

- [Microsoft Teams /  Developer platform  / Concepts /  Connectors /  Using connectors](https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/connectors/connectors-using)
- [Outlook  / Actionable Messages/ MessageCard Reference (Legacy)](https://docs.microsoft.com/en-us/outlook/actionable-messages/message-card-reference)

を、スクショを多めにして単純化した内容です。簡単なメッセージを送信したいだけの人にとっては上のドキュメントの内容はオーバーワークです。（より複雑なことをしたい場合も、まずはこの記事の内容から試してみるのがオススメです）

- この記事の内容でできること：
  - Channelに「新しい会話」(New conversation) としてメッセージを投稿する（マークダウンによる装飾が可能）
- この記事の内容ではできないこと：
  - 既にある会話にに返信する（「新しい会話」を作らずにメッセージを投稿する）
  - 他のメッセージを読み取る
  - メンションを飛ばす (`@person` / `@channel`)

チャンネルの右の <kbd>…</kbd> から <kbd>Connectors</kbd> を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/b745fd2b-4993-2fdc-e13d-011ee77121fe.png)

"Incoming Webhook" を <kbd>Add</kbd> または <kbd>Configure</kbd>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/68ef98fb-7ac5-a91d-1343-6f224eee06ba.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/68b1db77-ea25-0ebb-3f80-1e46ce01aca8.png)

適当な名前（ここではwebhook0）を入力して <kbd>Create</kbd>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/eaeabf6a-3938-2c2d-d916-fad761553056.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/35c3969c-1928-833a-4922-9c3fe78a94ec.png)
webhook用のURLが得られるのでコピーします。

ちなみに再設定したい場合は "Configured" から <kbd>Manage</kbd>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/72dabe5a-c78c-6aba-ac9a-64788c1143ee.png)
しばらく（数日？）経つとURLは見れなくなり、新しく作り直しとなります。

テスト投稿してみましょう。

```sh
curl -H "Content-type: application/json" -X POST -d '{"text": "foo"}' https://outlook.office.com/webhook/4fae0905-...
```

"foo" というメッセージが飛べばOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/dc34f53f-7003-9dce-2fd6-a58aa53013fb.png)

## Markdownによる装飾

Markdown記法が使えます。[こちらのサンプル](https://gist.github.com/wataash/abf1adbfcb48b521003ae6dcbf8c7de7)をJSON文字列としてシリアライズしてPOSTしてみます。JSON文字列のシリアライズはwebアプリでやるのがお手軽です。

- https://codebeautify.org/json-escape-unescape
- https://jsonformatter.org/json-escape

```sh
curl -H "Content-type: application/json" -X POST https://outlook.office.com/webhook/4fae0905-... \
  -d '{"text": "# Heading\n\n- list 1\n  - list 1.1\n- *Italic*\n- **Bold**\n- ~~Strike-through~~ (not work)\n- [link](http://example.com)\n- `inline code`\n\nenumarate\n\n1. a\n1. b\n1. c\n\nquote\n\n> quote\n> quote\n\ncode blocks\n\n```\ndef fn():\n    pass\n```\n\nimage\n\n![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/dc34f53f-7003-9dce-2fd6-a58aa53013fb.png)\n\n[Mention (@General) doesn\'t work yet](https://microsoftteams.uservoice.com/forums/555103-public/suggestions/17153099-webhook-needs-to-support-forced-notification-a-la)\n"}'
```

![image](https://user-images.githubusercontent.com/4846670/68099676-8c6ffe00-febb-11e9-948c-caf4a9b4f6c1.png)

改行を入れるには `line 1\n\nline 2` と空行を入れるようにして下さい。`line 1\nline2` は

> line 1 line 2

とレンダリングされてしまいます（[CommonMarkの仕様](https://spec.commonmark.org/0.29/#paragraphs)）。

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />この 作品 は <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">クリエイティブ・コモンズ 表示 4.0 国際 ライセンス</a>の下に提供されています。