當我們要在 Microsoft Teams 中提到某個人或頻道時,可以用 @ 來標註某個人或頻道,更直接的提醒某人這裡有屬於他的訊息。然而我們要如何在透過 Teams Webhook 發送訊息時達成這樣的提醒呢?這篇來解決這個問題。

這是一個相當多人敲碗的功能。在自動化的驅動之下,我們很多系統的運作訊息會透過通訊軟體 Microsoft Teams 來發送及時訊息,為了能更容易的被特定人士察覺,用 @ 來標註特定人是通訊軟體常見且方便的功能。

要在 Teams Webhook 訊息中標註某個人或頻道,需要基於使用 Adaptive Cards 發送訊息到 Microsoft Teams Webhook的基礎之下做延伸,如此一來,我們可以產生出像是下面這樣的 JSON 內容:

{
    "type": "message",
    "attachments": [
        {
            "contentType": "application/vnd.microsoft.card.adaptive",
            "content": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.2",
                "body": [
                    {
                        "type": "TextBlock",
                        "text": "Hi <at>mention</at> in Teams Webhook",
                    }
                ]
            }
        }
    ]
}

在訊息的內容中,可以注意到 <at>mention</at> 這個用 <at> 標籤包住的內容,這個關鍵字串很重要(裡面 mention 字串可以自行修改),接下來的操作會需要搭配這串做對應,讓標註的人能被標註在指定的位置中。

接著,要在 content 這個屬性之中,附加上 msteams 屬性,這個屬性是專屬給 Microsoft Teams 解析的,而裡面的 entities 則是要標註的人有哪些,每個人都需要對應到一組 <at> 標籤內容。因此如果你要標註多人的時候,要加入多組 <at> 標籤,不然會標註失敗。

至於標註誰的關鍵,則是在於 id 的設定值,這個值必須要是當前 Teams 組織內的成員的 Emailname 則是要標註的人的顯示名稱(對!可以修改標註的顯示名稱),效果如下:

修改標註的顯示名稱

msteams 這個屬性的 JSON 內容大致上會是像下面這樣:

{
    // 略...
    "msteams": {
        "width": "Full",
        "entities": [
            {
                "type": "mention",
                "text": "<at>mention</at>",
                "mentioned": {
                    "id": "poychang@YOUR_ORG_DOMAIN.com",
                    "name": "poychang"
                }
            }
        ]
    }
    // 略...
}

如果你想要標註的是某個頻道,則需要在該頻道右邊的 ... 選項中,點選 Get email address 取得頻道的專用 Email,再將頻道的專用 Email 填入 id 值中,這樣就可以標註頻道了。

取得頻道的專用 Email

最後來看一下完整的 JSON 內容會長的怎樣:

{
    "type": "message",
    "attachments": [
        {
            "contentType": "application/vnd.microsoft.card.adaptive",
            "content": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.2",
                "body": [
                    {
                        "type": "TextBlock",
                        "text": "Hi <at>mention</at> in Teams Webhook",
                    }
                ],
                "msteams": {
                    "width": "Full",
                    "entities": [
                        {
                            "type": "mention",
                            "text": "<at>mention</at>",
                            "mentioned": {
                                "id": "poychang@YOUR_ORG_DOMAIN.com",
                                "name": "poychang"
                            }
                        }
                    ]
                }
            }
        }
    ]
}

標註 poychang 的訊息效果

後記

眼尖的你,可能會注意到 msteams 屬性中,我多加了一個 width 並設定成 Full,這個屬性是讓 Webhook 訊息能把內容區域撐大,不然預設會是行動裝置適合的大小,而在電腦上看該訊息的時候,就會感覺很奇怪。


參考資料:


Poy Chang

Trial and Error