OpenClaw

OpenClaw Microsoft Teams 頻道

企業
中等

透過 Azure Bot Resource 使用 Bot Framework 將 OpenClaw 連接到 Microsoft Teams。此基於外掛的整合讓您的 AI 助手可以在 Teams 中運作 — 處理個人私訊、群組聊天和頻道對話。OpenClaw 透過 /api/messages 接收來自 Bot Framework 的 Webhook 事件,並透過 Teams 訊息 API 回覆,支援串接式回覆、Adaptive Cards、表情回應、透過 SharePoint 分享檔案,以及針對個別團隊或頻道的設定覆寫。

快速資訊
難度中等
分類企業
支援功能數5 / 6

Microsoft Teams 支援功能

文字訊息

支援

媒體與檔案

支援

表情回應

支援

討論串

支援

語音訊息

不支援

群組聊天

支援

Microsoft Teams 前置條件

  • 具有建立 Azure Bot 資源權限的 Azure 帳號
  • 已註冊的 Azure Bot,包含 App ID、App Password(用戶端密碼)和 Tenant ID(建議使用單一租用戶)
  • Teams App Manifest(manifest.json),包含機器人設定、範圍和圖示(outline.png 32×32、color.png 192×192)
  • OpenClaw Gateway 已執行,且可透過公開 HTTPS URL 或通道存取(預設 Webhook 連接埠 3978)
  • 已安裝 Teams 外掛:openclaw plugins install @openclaw/msteams

Microsoft Teams 快速設定

1

建立 Azure Bot 資源

前往 Azure Portal → 建立資源 → 搜尋「Azure Bot」。以 Single Tenant 類型建立。在 App Registration 中產生用戶端密碼。複製 App ID、用戶端密碼和 Tenant ID — 這三個都是 OpenClaw 設定所需的。

2

安裝 Teams 外掛並進行設定

執行 'openclaw plugins install @openclaw/msteams' 以安裝外掛。在 openclaw.json 中新增 Teams 頻道設定,填入 appId、appPassword 和 tenantId。也可以使用環境變數 MSTEAMS_APP_ID、MSTEAMS_APP_PASSWORD 和 MSTEAMS_TENANT_ID。

3

設定訊息端點並啟用 Teams 頻道

在 Azure Portal 中,導覽至您的 Bot 資源 → Configuration。將訊息端點設為 'https://<your-domain>/api/messages'。然後前往 Channels → Add Microsoft Teams → Configure。如需本機開發,請使用通道(ngrok 或 Tailscale Funnel)以公開連接埠 3978。

4

建立並安裝 Teams App

建立 manifest.json,將機器人的 App ID 設為 botId,設定 scopes(personal、team、groupChat)和 RSC 權限。與 outline.png 和 color.png 一起壓縮成 zip 檔。透過 Teams Developer Portal 或 Teams Admin Center 上傳。如需測試,可側載應用程式套件。

5

測試機器人

在 Teams 中找到您的機器人,傳送一則私訊。如果使用預設的 pairing 策略,請在終端機中透過 'openclaw pairing approve msteams <code>' 核准發送者。機器人應該會以 AI 產生的回覆進行回應。

Microsoft Teams 設定範例

config.json
{
  "channels": {
    "msteams": {
      "enabled": true,
      "appId": "YOUR_APP_ID",
      "appPassword": "YOUR_APP_PASSWORD",
      "tenantId": "YOUR_TENANT_ID",
      "webhook": {
        "port": 3978,
        "path": "/api/messages"
      }
    }
  }
}

Microsoft Teams 深入了解

架構概述

OpenClaw 透過 Azure Bot Framework 與 Microsoft Teams 整合 — 這是一種基於 Webhook 的架構,Teams 將訊息路由到您的 Gateway 的 /api/messages 端點,OpenClaw 則透過 Bot Framework REST API 進行回覆。 流程如下:使用者在 Teams 中傳送訊息 → Bot Framework Service → Webhook POST 到您的 Gateway(連接埠 3978)→ OpenClaw 使用 AI 處理 → 透過 Bot Framework API 回覆 → Teams 傳遞回應。 Teams 外掛透過 'openclaw plugins install @openclaw/msteams' 單獨安裝。此模組化架構保持核心 Gateway 輕量,同時允許 Teams 特定功能(Adaptive Cards、SharePoint 檔案上傳、RSC 權限)獨立維護。 驗證使用 Azure AD:Bot Framework 會驗證傳入 Webhook 請求的 JWT Token,而 OpenClaw 使用您的 App ID 和 App Password 對外送 API 呼叫進行驗證。建議使用單一租用戶設定以提高安全性,將機器人限制在您組織的 Azure AD 目錄中。
您的 Gateway 必須可透過公開 HTTPS URL 存取。如需本機開發,請使用 ngrok 或 Tailscale Funnel 建立通道至連接埠 3978。
建議使用單一租用戶機器人而非多租用戶,以提升組織安全性 — 它們只接受來自您 Azure AD 目錄的 Token。

Azure Bot 設定與 App Registration

設定 Teams 機器人需要在 Azure Portal 中建立資源: 1. 建立 Azure Bot 資源 — 在 marketplace 中搜尋「Azure Bot」。選擇 Single Tenant 作為機器人類型。這會同時建立 Bot 資源和 App Registration。 2. 產生用戶端密碼 — 在 App Registrations → 您的機器人應用程式 → Certificates & secrets 中,建立新的用戶端密碼。立即複製該值(它只會顯示一次)。 3. 記錄憑證 — Overview 頁面中的 App (client) ID、用戶端密碼值和 Directory (tenant) ID。這三個值就是您機器人的驗證憑證。 4. 設定訊息端點 — 在 Bot 資源 → Configuration 中,將端點設為 'https://<your-domain>/api/messages'。這是 Teams 傳送 Webhook 事件的位置。 5. 啟用 Teams 頻道 — 前往 Channels → Add channel → Microsoft Teams。設定並儲存。 環境變數可以替代設定檔中的值:MSTEAMS_APP_ID、MSTEAMS_APP_PASSWORD、MSTEAMS_TENANT_ID。
openclaw.json
{
  "channels": {
    "msteams": {
      "appId": "<APP_ID>",
      "appPassword": "<APP_PASSWORD>",
      "tenantId": "<TENANT_ID>"
    }
  }
}
請妥善保管您的 App Password。切勿提交到版本控制。正式部署時請使用環境變數(MSTEAMS_APP_PASSWORD)。定期在 Azure Portal 中輪替用戶端密碼。

Teams App Manifest 與 RSC 權限

Teams App Manifest(manifest.json)定義了您機器人的身分識別、範圍和權限。它與兩個圖示一起封裝成 .zip 檔案以供安裝。 Manifest 基本要素: • botId — 您 Azure Bot 的 App ID • Scopes — personal(私訊)、team(頻道)、groupChat(群組對話) • supportsFiles: true — 在個人聊天中啟用檔案同意卡片 • Resource-Specific Consent (RSC) 權限 — 允許機器人在不被 @mention 的情況下接收訊息 頻道的 RSC 權限(team 範圍): • ChannelMessage.Read.Group — 無需 @mention 即可接收頻道訊息 • ChannelMessage.Send.Group — 傳送訊息至頻道 • TeamMember.Read.Group、TeamSettings.Read.Group — 讀取團隊中繼資料 群組聊天的 RSC 權限: • ChatMessage.Read.Chat — 無需 @mention 即可接收群組聊天訊息 所需圖示: • outline.png — 32×32 像素,透明背景 • color.png — 192×192 像素,全彩應用程式圖示 將 manifest.json 與兩個圖示一起壓縮成 zip 檔,然後透過 Teams Developer Portal、Teams Admin Center 上傳,或側載進行測試。
更新已安裝的應用程式時(例如新增 RSC 權限),請遞增 manifest.json 中的 version 欄位,重新壓縮、重新上傳,並在每個團隊中重新安裝。
安裝或更新應用程式後,請完全關閉並重新啟動 Teams 用戶端,以確保新權限生效。

私訊政策

私訊(Direct Message)政策控制誰可以在個人聊天中與您的機器人互動。OpenClaw 支援四種政策: • pairing(預設)— 傳送訊息給機器人的新使用者會收到一個隨機配對碼。在終端機中透過 'openclaw pairing approve msteams <code>' 核准。核准後即可自由聊天。 • allowlist — 只有列在 allowFrom 中的使用者可以傳訊息給機器人。支援 AAD 物件 ID、UPN(user@org.com)或顯示名稱。 • open — 您租用戶中的任何 Teams 使用者都可以傳訊息給機器人。需要將 '*' 新增至 allowFrom 作為安全確認。 • disabled — 完全關閉私訊功能。 Teams 透過 AAD(Azure AD)物件 ID、UPN 或顯示名稱識別使用者。您可以在 Gateway 日誌中(使用者傳送訊息時)找到這些資訊,或在 Azure Portal 的 Azure Active Directory → Users 中查詢。
openclaw.json
{
  "channels": {
    "msteams": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "user@org.com",
        "40a1a0ed-4ff2-4164-a219-55518990c197"
      ]
    }
  }
}
UPN 格式(user@org.com)通常是允許清單最方便的方式。如果使用者可能會變更電子郵件地址,AAD 物件 ID 則更為穩定。
使用 'openclaw pairing list msteams' 查看所有待處理的配對請求及其代碼。

群組聊天與頻道管理

OpenClaw 支援 Teams 頻道(團隊內)和群組聊天,各有可設定的存取控制: • disabled(群組預設)— 忽略所有群組/頻道訊息 • allowlist — 只有核准的發送者(透過 groupAllowFrom)可以觸發機器人 • open — 回應來自所有群組成員或頻道參與者的訊息 預設情況下,機器人在頻道和群組聊天中需要 @mention(requireMention: true)。將 requireMention 設為 false 可讓機器人回應所有訊息,或設定 RSC 權限以在不被提及的情況下接收訊息。 Teams 頻道和群組聊天維護各自獨立的對話脈絡。每個對話都有自己的工作階段和歷史記錄,與私訊和其他對話隔離。 透過針對個別團隊和頻道的覆寫設定,可以進行精細控制。您可以為每個團隊甚至團隊內的個別頻道設定不同的 replyStyle、requireMention 和工具設定。
openclaw.json
{
  "channels": {
    "msteams": {
      "groupPolicy": "allowlist",
      "groupAllowFrom": ["user@org.com"],
      "teams": {
        "My Team": {
          "channels": {
            "General": {
              "requireMention": true
            }
          }
        }
      }
    }
  }
}
在 teams 設定中可使用團隊和頻道的顯示名稱或對話 ID(19:...@thread.tacv2)作為鍵值。
個別頻道的覆寫設定會繼承自上層團隊設定,而團隊設定則繼承自全域 msteams 設定。

回覆樣式與串接

Teams 為頻道提供兩種不同的 UI 版面配置,OpenClaw 的回覆行為應與之匹配: • Posts(傳統版面配置)— 使用根訊息下的串接式回覆。將 replyStyle 設為 'thread'(預設)。機器人的回應會以回覆的形式出現在原始訊息卡片下方。 • Threads(類似 Slack 的版面配置)— 使用線性訊息流。將 replyStyle 設為 'top-level'。機器人傳送新的頂層訊息,而非串接回覆。 Teams API 不會公開頻道使用的版面配置,因此您必須手動設定 replyStyle 以匹配。設定不匹配不會造成錯誤,但可能導致對話流程不佳。 回覆樣式可以在全域、團隊或頻道層級進行設定。這讓您可以在同一 Teams 組織的不同頻道中匹配不同的版面配置。
openclaw.json
{
  "channels": {
    "msteams": {
      "replyStyle": "thread",
      "teams": {
        "19:abc...@thread.tacv2": {
          "channels": {
            "19:xyz...@thread.tacv2": {
              "replyStyle": "top-level"
            }
          }
        }
      }
    }
  }
}

檔案處理與 SharePoint

OpenClaw 支援在 Teams 中分享檔案,根據聊天類型有不同的行為: 個人聊天: • 內建的 FileConsentCard 流程 — 無需額外設定。機器人傳送檔案同意卡片,使用者核准後,檔案即上傳。 群組聊天和頻道: • 需要 Microsoft Graph 權限:Sites.ReadWrite.All • 選用:Chat.Read.All 可產生僅限聊天成員存取的分享連結 • 設定 sharePointSiteId 以指定檔案上傳的 SharePoint 網站 • 檔案儲存在 SharePoint 文件庫的 /OpenClawShared/ 資料夾中 若未授予 Chat.Read.All 權限,分享的檔案連結為全組織範圍。授予後,分享僅限於目前聊天的成員。 傳入的附件會由 Gateway 自動下載並處理。mediaAllowHosts 和 mediaAuthAllowHosts 設定可控制哪些網域受信任以下載附件。
openclaw.json
{
  "channels": {
    "msteams": {
      "sharePointSiteId": "YOUR_SHAREPOINT_SITE_ID",
      "mediaAllowHosts": ["*.microsoft.com", "*.sharepoint.com"],
      "mediaAuthAllowHosts": ["graph.microsoft.com"]
    }
  }
}
Graph API 權限(Sites.ReadWrite.All、Chat.Read.All)需要您 Azure AD 租用戶中的管理員同意。請與您的 IT 管理員合作以授予這些權限。

Adaptive Cards 與投票

Microsoft Teams 支援 Adaptive Cards — 豐富的互動式卡片版面配置,功能超越純文字。OpenClaw 利用這些功能增強機器人互動: 投票: • 透過 'openclaw message poll --channel msteams --target conversation:<id>' 建立投票 • 投票透過 Adaptive Card 動作收集,並儲存在本機的 ~/.openclaw/msteams-polls.json • Gateway 必須保持上線才能收集投票 自訂 Adaptive Cards: • 透過 CLI 傳送任意 Adaptive Cards:openclaw message send --channel msteams --target "conversation:<id>" --card '{...}' • 卡片支援 Adaptive Card schema version 1.5 • 可包含文字區塊、圖片、動作按鈕、輸入欄位等 格式化注意事項: • 一般訊息支援基本 markdown(粗體、斜體、程式碼、連結) • 複雜的表格和深層巢狀列表可能無法正確呈現 • 如需豐富的版面配置,請使用 Adaptive Cards 而非 markdown 格式化
使用 Adaptive Cards Designer(adaptivecards.io/designer)來建立和預覽自訂卡片版面配置後再傳送。
Adaptive Cards 的動作可觸發 postback 事件,OpenClaw 會將其作為使用者輸入進行處理。

Teams ID 擷取

Teams URL 包含多個 ID,但並非所有 ID 都是您設定所需的。以下說明如何擷取正確的 ID: Team ID — 位於 URL 路徑中(非 groupId 查詢參數): https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/... → 將 '19%3ABk4j...%40thread.tacv2' 進行 URL 解碼以取得 team ID Channel ID — 同樣位於 URL 路徑中: https://teams.microsoft.com/l/channel/19%3A15bc...%40thread.tacv2/... → 進行 URL 解碼以取得頻道對話 ID CLI 指令的使用者目標格式: • 依 AAD ID:user:40a1a0ed-4ff2-4164-a219-55518990c197 • 依顯示名稱:user:John Smith • 對話:conversation:19:abc...@thread.tacv2 • 原始格式(如包含 @thread):19:abc...@thread.tacv2
請勿使用 Teams URL 中的 'groupId' 查詢參數 — 那是 Microsoft 365 Group ID,而非 Teams 對話 ID。務必從 URL 路徑中擷取 ID 並進行 URL 解碼。

Microsoft Teams 設定參考

enabled
Type: booleanDefault: true

啟用或停用 Microsoft Teams 頻道

appId
Type: stringDefault: ""

Azure Bot App ID(Microsoft App ID)。也可使用 MSTEAMS_APP_ID 環境變數

appPassword
Type: stringDefault: ""

Azure Bot 用戶端密碼。也可使用 MSTEAMS_APP_PASSWORD 環境變數

tenantId
Type: stringDefault: ""

用於單一租用戶驗證的 Azure AD Tenant ID。也可使用 MSTEAMS_TENANT_ID 環境變數

webhook.port
Type: numberDefault: 3978

用於接收 Bot Framework 事件的 Webhook 監聽連接埠

webhook.path
Type: stringDefault: "/api/messages"

接收 Bot Framework 訊息的 Webhook 端點路徑

dmPolicy
Type: stringDefault: "pairing"

控制誰可以私訊機器人。選項:pairing、allowlist、open、disabled

allowFrom
Type: string[]Default: []

允許私訊機器人的 AAD 物件 ID、UPN 或顯示名稱(當 dmPolicy 為 allowlist 時)

groupPolicy
Type: stringDefault: "allowlist"

群組/頻道存取控制。選項:allowlist、open、disabled

groupAllowFrom
Type: string[]Default: []

群組聊天中允許的發送者。若未設定則回退至 allowFrom

teams
Type: objectDefault: {}

針對個別團隊和頻道的設定覆寫(replyStyle、requireMention、tools)

requireMention
Type: booleanDefault: true

在頻道和群組聊天中要求 @mention。搭配 RSC 權限設為 false 可回應所有訊息

replyStyle
Type: stringDefault: "thread"

回覆版面配置樣式。選項:thread(傳統 Posts)、top-level(類似 Slack 的 Threads)

configWrites
Type: booleanDefault: true

允許 /config set|unset 命令在執行時修改頻道設定

textChunkLimit
Type: numberDefault:

外送訊息在分段前的最大字元數

chunkMode
Type: stringDefault: "length"

文字分段策略。選項:length(硬性分割)、newline(段落感知)

sharePointSiteId
Type: stringDefault: ""

用於群組聊天/頻道檔案上傳的 SharePoint 網站 ID

mediaAllowHosts
Type: string[]Default: MS/Teams domains

允許下載媒體附件的主機

mediaAuthAllowHosts
Type: string[]Default: Graph + Bot Framework

下載媒體時接收 Authorization 標頭的主機

dmHistoryLimit
Type: numberDefault: 50

每個對話中作為 AI 脈絡包含的近期私訊數量

historyLimit
Type: numberDefault: 50

作為 AI 脈絡包含的最大頻道/群組訊息數

Microsoft Teams 常見問題

Microsoft Teams 故障排除

頻道訊息中的圖片和附件遺失

Graph API 權限未授予或缺少管理員同意。機器人收到的是內容摘要而非實際檔案。

確認您的 App Registration 具有 ChannelMessage.Read.All 和 Chat.Read.All Graph 權限,且已取得管理員同意。更新權限後請重新安裝 Teams 應用程式。完全關閉並重新開啟 Teams 用戶端以重新整理快取的權限。
機器人在頻道中不回應(僅在私訊中有效)

機器人預設在頻道和群組聊天中需要 @mention,或 RSC 權限未設定。

在頻道訊息中 @mention 機器人,或在設定中將 requireMention 設為 false,並在應用程式 manifest 中新增 RSC 權限 ChannelMessage.Read.Group。更新 manifest 後,在每個團隊中重新安裝應用程式。
變更後 Teams App manifest 未更新

Teams 會積極快取應用程式中繼資料。仍在使用舊的 manifest。

遞增 manifest.json 中的 version 欄位(例如 1.0.0 → 1.1.0),重新壓縮套件,從 Teams 移除舊的應用程式,安裝更新的套件,然後強制關閉並重新啟動 Teams 用戶端。
Webhook 端點出現 401 Unauthorized 錯誤

OpenClaw 設定中的 appId、appPassword 或 tenantId 與 Azure Bot 註冊不符,或在未使用正確 Azure JWT Token 的情況下手動測試。

驗證三個憑證是否與 Azure Portal 中的值完全一致。使用 Azure 內建的 Web Chat(Bot 資源 → Test in Web Chat)測試您的機器人,確認機器人運作正常後再排除 Teams 特定的問題。確保您的 tenantId 與機器人註冊所在的目錄一致。
機器人在私人頻道中無法運作

Microsoft Teams 過去對私人頻道的機器人支援有限。自 2026 年初起,微軟正在逐步推出私人頻道的完整應用程式支援,但可能尚未在所有租戶中可用。

請檢查您的租戶是否已收到私人頻道應用程式支援更新。如果尚未可用,請改用標準(公開)頻道、群組聊天或私訊。應用程式必須單獨新增至每個私人頻道——在團隊層級安裝不會自動套用至私人頻道。