












赫耳墨斯代理(GitHub 164k star)非仅终端编码之助。通其消息之门,代理可接二十四平台——Telegram、Discord、Slack、微信、飞书、钉钉、Microsoft Teams 等。于一平台所设代理之能(Skills、工具调用、审批之序),诸平台皆通。
此篇专论Microsoft Teams之接入法:六步使AI代理机器人现于Teams群聊。
Teams 群聊 ←── HTTPS Webhook ──→ Hermes Gateway (端口 3978) ←──→ Agent + LLM
与 Slack 之 Socket Mode 异,Teams 乃以公共 HTTPS Webhook 推送讯息。汝之 Hermes 实例,需一可由公网达之端点——本地开发则用隧道工具,生产环境则用真实名域。
| 场景 | 行为 |
|---|---|
| 私聊(1:1) | 每讯皆触发 Agent 回复,无需 @ |
| 群聊(Group Chat) | 惟 @机器人 时方回复 |
| 频道(Channel) | 惟 @机器人 时方回复 |
隊伍以 @提及為 <at>BotName</at> 标記傳遞,Hermes 自動剝離後處理。
微軟的 @microsoft/teams.cli 自動化 Bot 註冊,無需 Azure Portal:
npm install -g @microsoft/teams.cli@preview
teams login
驗證登錄並獲取你的 AAD Object ID(後續配置白名單要用):
teams status --verbose
隊伍不能向 localhost 推送消息。本地開發需要隧道工具:
# Microsoft devtunnel(推荐,URL 持久)
devtunnel create hermes-bot --allow-anonymous
devtunnel port create hermes-bot -p 3978 --protocol https
devtunnel host hermes-bot
# 或 ngrok
ngrok http 3978
# 或 cloudflared
cloudflared tunnel --url http://localhost:3978
記下輸出https://之URL,次当用之。开发生计时,恒使隧道行。
teams app create \
--name "Hermes" \
--endpoint "https://<your-tunnel-url>/api/messages"
CLI出CLIENT_ID、CLIENT_SECRET及TENANT_ID。亟存Client Secret——不复再显。
加于~/.hermes/.env:
# 必填
TEAMS_CLIENT_ID=<your-client-id>
TEAMS_CLIENT_SECRET=<your-client-secret>
TEAMS_TENANT_ID=<your-tenant-id>
# 限制访问用户(强烈建议)
# 用 teams status --verbose 获取 AAD Object ID
TEAMS_ALLOWED_USERS=<your-aad-object-id>
亦可用config.yaml设之:
platforms:
teams:
enabled: true
extra:
client_id: "your-client-id"
client_secret: "your-secret"
tenant_id: "your-tenant-id"
port: 3978
HERMES_UID=$(id -u) HERMES_GID=$(id -g) docker compose up -d gateway
验其行否:
curl http://localhost:3978/health
# 应返回: ok
docker logs -f hermes
# 看到: [teams] Webhook server listening on 0.0.0.0:3978/api/messages
teams app get <teamsAppId> --install-link
启输出之链,于Teams客户端中植之。植毕,致机器人一讯——彼已备矣。
此乃Teams集成至要之能。当Agent欲行危令(删文件、施shell命等),彼不令汝手输/approve,乃发一张Adaptive Card,具四钮:
| 钮 | 行 |
|---|---|
| 允一遭 | 准此令 |
| 允会话 | 本会话内同类命自允 |
| 常允 | 永允此模 |
| 拒 | 拒行 |
按此钮,卡即新为决,Agent 继行或止
赫尔墨斯 Agent 之 Teams 集非惟聊,亦自推会纪。启 Teams Meeting Pipeline 插件,会终自生纪并推至指 Teams 频或聊
二推模
| 模 | 适于何境 | 所限 |
|---|---|---|
incoming_webhook |
简推于频道 | 不支线程、无应答之能 |
graph |
以 Bot 之形发帖,可支线程 | 需 Microsoft Graph 之权 |
graph式之设:
platforms:
teams:
enabled: true
extra:
client_id: "..."
client_secret: "..."
tenant_id: "..."
delivery_mode: "graph"
chat_id: "19:meeting_..." # 推送到聊天
# 或
# team_id: "..."
# channel_id: "..." # 推送到频道
本境开用隧道,产境用真域:
# 创建 Bot 时直接用生产域名
teams app create \
--name "Hermes" \
--endpoint "https://your-domain.com/api/messages"
# 已有 Bot 更新端点
teams app update --id <teamsAppId> --endpoint "https://your-domain.com/api/messages"
求:
- 端口 3978(或 TEAMS_PORT 所定之口)可自外得之
- TLS 之证有效(Teams 拒自签之证)
⚠️ 必须设置TEAMS_ALLOWED_USERS不然,凡能得汝 Bot 者皆可与之交。
安危之至要也:
TEAMS_ALLOWED_USERS填入授权者之AAD Object ID,未授权之讯,默然弃之。TEAMS_CLIENT_SECRET视若密钥,时更其用~/.hermes/.env文件權限設為600:chmod 600 ~/.hermes/.env/api/messages由 Teams Bot Framework 认可——无有效 JWT 之请,必拒之| 变量者,变易之量也。 | 释之 |
|---|---|
TEAMS_CLIENT_ID |
Azure AD 应用(客户端)ID |
TEAMS_CLIENT_SECRET |
Azure AD客户端密钥 |
TEAMS_TENANT_ID |
Azure AD 租户 ID |
TEAMS_ALLOWED_USERS |
逗号分隔之AAD对象ID白名单 |
TEAMS_ALLOW_ALL_USERS |
设也true越白名单(非所宜) |
TEAMS_HOME_CHANNEL |
定时/主动消息之对话标识 |
TEAMS_PORT |
Webhook 端口(預設3978) |
| 惑也 | 解之方也 |
|---|---|
| 康健之端点无碍,然 Bot 不应。 | 察隧道之运行,验 Bot 端点,是否与隧道 URL 相合。 |
KeyError: 'teams'日志之谬 |
容器重启之 |
| 認證有誤 | 验核客户端标识、客户端密钥、租户标识 |
| 機收信而忽之 | AAD对象ID非ALLOWED_USERS之列 |
| 隧道URL重启后异变 | devtunnel 以命名隧道 URL 持久;ngrok 免费版每变需用teams app update更迭 |
No inference provider configured |
审之ANTHROPIC_API_KEY(或其他 LLM key)已配置 |
Teams亦其一耳。Hermes Agent复支持:
Telegram、Discord、Slack、WhatsApp、Signal、Email、SMS(Twilio)、Home Assistant、Mattermost、Matrix、钉钉、飞书/Lark、企业微信、企业微信回调、微信、iMessage(BlueBubbles)、QQ Bot、元宝、Microsoft Teams、Teams Meetings、LINE、SimpleX Chat、ntfy、Open WebUI、Webhooks。
同一 Agent,一套 Skills 与工具配置,悉平台通用。
作者ITech001
来处公众号:AI人工智能时代
之网:https://www.theaiera.cn/
日日分亨最前沿之AI新闻资讯与技术研究所。
本文首发于AI人工智能时代,转载须注明出处。
此內容由慣性聚合(RSS閱讀器)自動聚合整理,僅供閱讀參考。 原文來自 — 版權歸原作者所有。