Teams チャネルへメッセージ送信する方法

Webhook と curl コマンドを使って Teams チャネルへメッセージ送信する方法について紹介します。

 

 

 

1. Microsoft Teams チャネルのポスト Webhook URL を生成する

[概要]

最初に、Microsoft Teams チャネルのポスト Webhook URL を生成する手順、について記載します。

 

NOTE

Workflows アプリが Microsoft Teams 組織に追加されていない場合は、[アプリ]セクションで見つけ(またはリンクをたどって)、[追加]をクリックします。

 

 

[手順]

Microsoft Teams で Webhook URL を生成するには、次の手順に従います。

 

1. Microsoft Teams を開き、通知を受信するチャネルに移動します。

2. チャネル名の横にある 3 つのドット メニュー (...) をクリックし、ドロップダウン メニューから [ワークフロー] を選択します。

Create workflow

 

3. [ワークフロー] ウィンドウで、「Webhook リクエストを受信したときにチャネルに投稿する」テンプレートを検索してクリックします。

Create workflow

 

4. ワークフローを初めて作成する場合は、必要な権限を受け入れてます。

Create workflow

 

5. 必要に応じて、ワークフローの名前を変更して、他のユーザーが理解を深められるように、明確でわかりやすい名前を付けることができます。その後、[次へ] をクリックします。

Create workflow

 

6. 適切な Microsoft Teams チームとチャネルが選択されていることを確認します。

Create workflow

 

7. 「ワークフローを追加」ボタンをクリックして、新しいワークフローの作成を送信します。

8. 生成された Webhook URL をコピーします。このURLはWebhookに固有であり、特定のチャネルにメッセージを送信するために使用されます。

Create workflow

 

9. Webhook URLがコピーされたら、[完了]ボタンをクリックしてワークフローの作成を終了します。

 

 

2. 最初のサンプル - "Hello World"

[概要]

最初のサンプルとして "Hello World" というテキストを Teams 上に表示する例を紹介します。

bash のシェルスクリプトで curl コマンドを使って実現します。

 

[環境]

OS : Ubuntu24.04, WSL version 2.2.4.0

 

[サンプルコード]

サンプルソースコードを以下に記載します。

メッセージ送信先の Teams チャネルで作成したワークフローの "Webhook URL" を下記ソースコードの WEBHOOK_URL 内容に張り付けて実行するだけです。

 

["webhook_test1.sh"]

#!/usr/bin/bash

# 変数設定(適宜書き換え)
WEBHOOK_URL="https://prod-29.japaneast.logic.azure.com:443/workflows/4f8b************************d787/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=9OPr****************rE5vGEIHsT_in9W****L3I0"

# 投稿テスト
curl -s -i -H "Content-Type: application/json" --data-binary @- "$WEBHOOK_URL" << '__EOF__'
   {
      "type":"message",
      "attachments":[
         {
            "contentType":"application/vnd.microsoft.card.adaptive",
            "contentUrl":null,
            "content":{
               "$schema":"http://adaptivecards.io/schemas/adaptive-card.json",
               "type":"AdaptiveCard",
               "version":"1.4",
               "body":[
                  {
                     "type": "TextBlock",
                     "text": "Hello World"
                  }
               ]
            }
         }
      ]
   }
__EOF__

 

 [実行結果]

"Hello World" 実行結果

 

注意

この文書を表記時点、version を "1.4" にする必要がありました。

例えば "1.5" にするとエラーになりましたのでご注意ください。

 

 

 

3. 表示を全幅にする

[概要]

最初のサンプルでは画面左側のみへの表示となりました。メッセージ送信する情報量が増えてきた場合は全幅で表示したくなりますので、この辺を修正していきます。

 

[環境]

OS : Ubuntu24.04, WSL version 2.2.4.0

 

[サンプルコード]

"msTeams" 専用のプロパティ指定を使って "width" を "full" に指定するだけで対応できます。

 

["webhook_test2.sh"]

#!/usr/bin/bash

# 変数設定(適宜書き換え)
WEBHOOK_URL="https://prod-29.japaneast.logic.azure.com:443/workflows/4f8b************************d787/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=9OPr****************rE5vGEIHsT_in9W****L3I0"

# 投稿テスト
curl -s -i -H "Content-Type: application/json" --data-binary @- "$WEBHOOK_URL" << '__EOF__'
   {
      "type":"message",
      "attachments":[
         {
            "contentType":"application/vnd.microsoft.card.adaptive",
            "contentUrl":null,
            "content":{
               "$schema":"http://adaptivecards.io/schemas/adaptive-card.json",
               "type":"AdaptiveCard",
               "version":"1.4",
               "msTeams": {
                  "width": "full"
               },
               "body":[
                  {
                     "type": "TextBlock",
                     "text": "Hello World"
                  }
               ]
            }
         }
      ]
   }
__EOF__

 

 [実行結果]

"width": "full"

 

期待通りに表示してくれるようになりました。

 

 

4. 文字に色・太さを追加、ボタン追加、など

[概要]

実際に活用することを想定したサンプルを例示したいと思います。

ここでは下記のような要素を追加してみます。

 

[環境]

OS : Ubuntu24.04, WSL version 2.2.4.0

 

[サンプルコード]

詳細はサンプルコードを参照ください。

 

["webhook_test3.sh"]

#!/usr/bin/bash

# 変数設定(適宜書き換え)
WEBHOOK_URL="https://prod-29.japaneast.logic.azure.com:443/workflows/4f8b************************d787/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=9OPr****************rE5vGEIHsT_in9W****L3I0"

# 投稿テスト
curl -s -i -H "Content-Type: application/json" --data-binary @- "$WEBHOOK_URL" << '__EOF__'
    {
        "type": "Application/JSON",
        "attachments": [
            {
                "contentType": "object",
                "content": {
                    "type": "AdaptiveCard",
                    "version": "1.4",
                    "msTeams": {
                        "width": "full"
                    },
                    "body": [
                        {
                            "type": "TextBlock",
                            "text": "【通知】新しい記事を公開",
                            "size": "Large",
                            "isSubtle": false,
                            "wrap": true,
                            "weight": "Bolder",
                            "spacing": "None",
                            "color":"Warning" 
                        },
                        {
                            "type": "TextBlock",
                            "text": "新しい記事を公開しました。",
                            "isSubtle": false,
                            "wrap": true,
                            "weight": "Lighter",
                            "spacing": "None",
                            "color":"default"
                        },

                        {
                            "type": "ColumnSet",
                            "columns": [
                                {
                                    "type": "Column",
                                    "width": "100px",
                                    "items": [
                                        {
                                            "type": "TextBlock",
                                            "text": "**概要**",
                                            "wrap": true,
                                            "weight": "Bolder"
                                        }
                                    ],
                                    "separator": true
                                },
                                {
                                    "type": "Column",
                                    "width": "stretch",
                                    "items": [
                                        {
                                            "type": "TextBlock",
                                            "text": "Teams チャネルへメッセージ送信する方法",
                                            "wrap": true
                                        }
                                    ]
                                }
                            ]
                        },

                        {
                            "type": "ColumnSet",
                            "columns": [
                                {
                                    "type": "Column",
                                    "width": "100px",
                                    "items": [
                                        {
                                            "type": "TextBlock",
                                            "text": "**説明**",
                                            "wrap": true,
                                            "weight": "Bolder"
                                        }
                                    ],
                                    "separator": true
                                },
                                {
                                    "type": "Column",
                                    "width": "stretch",
                                    "items": [
                                        {
                                            "type": "TextBlock",
                                            "text": "Webhook と curl コマンドを使って Teams チャネルへメッセージ送信する方法について紹介します。",
                                            "wrap": true
                                        }
                                    ]
                                }
                            ]
                        },

                        {
                            "type": "TextBlock",
                            "text": "💡 詳細は [**記事を表示**] ボタンをクリックしてください",
                            "wrap": true,
                            "size": "Small",
                            "weight": "Lighter",
                            "color": "Attention"
                        }
                    ],

                    "actions": [
                        {
                            "type": "Action.OpenUrl",
                            "title": "記事を表示",
                            "url": "https://kinoshita-hidetoshi.github.io/Programing-Items/Etc/Bash/send_message_to_teams_with_webhook.html"
                        }
                    ]
                }
            }
        ]
    }
__EOF__

 

 [実行結果]

実行結果

 

 

 

 

ライセンス

本ページの情報は、特記無い限り下記 MIT ライセンスで提供されます。

The MIT License (MIT)

  Copyright 2024 Kinoshita Hidetoshi

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

 

参考

 


 

変更履歴

2024-09-30 - 新規作成

 

Programming Items トップページ

プライバシーポリシー