You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在MS Teams中自动给特定用户的消息点赞

实现MS Teams特定用户消息自动加爱心反应的可行方案

首先明确:pymsteams 库原生仅支持对接Teams入站Webhook实现消息推送,没有封装读取消息、添加消息反应的相关接口,无法单独完成需求,可搭配以下两种方案实现目标功能,pymsteams可用来做脚本运行日志的推送通知。

方案1:结合Microsoft Graph API实现(推荐)

这是官方支持的稳定方案,可后台静默运行,不依赖本地Teams客户端。

  • 前置准备:在Azure平台注册应用,开通 ChatMessage.Read.All、ChatMessage.React.All 两种应用权限,获得租户ID、客户端ID、客户端密钥三个参数,同时提前获取目标用户的AAD ID、目标聊天/频道的ID。
  • 实现逻辑:
    1. 用msal库获取Graph API的访问令牌
    2. 定时调用接口拉取目标聊天/频道的最新消息列表
    3. 过滤出发件人为指定用户、且你尚未添加过爱心反应的消息
    4. 调用消息反应添加接口提交heart类型的反应即可
  • 参考代码片段:
import requests
import msal
import pymsteams

# 配置参数
AZURE_CONFIG = {
    "client_id": "你的Azure应用客户端ID",
    "client_secret": "你的Azure应用客户端密钥",
    "tenant_id": "你的租户ID",
    "target_user_id": "目标用户的AAD ID",
    "chat_id": "目标聊天/频道ID",
    "my_user_id": "你的AAD ID"
}
WEBHOOK_URL = "你的Teams通知频道Webhook地址"
SCOPE = ["https://graph.microsoft.com/.default"]

# 获取Graph访问令牌
app = msal.ConfidentialClientApplication(
    client_id=AZURE_CONFIG["client_id"],
    client_credential=AZURE_CONFIG["client_secret"],
    authority=f"https://login.microsoftonline.com/{AZURE_CONFIG['tenant_id']}"
)
token_result = app.acquire_token_for_client(scopes=SCOPE)
if "access_token" not in token_result:
    # 用pymsteams推送错误日志
    notify_card = pymsteams.connectorcard(WEBHOOK_URL)
    notify_card.text("获取Graph令牌失败,脚本终止运行")
    notify_card.send()
    exit()
headers = {"Authorization": f"Bearer {token_result['access_token']}"}

# 拉取最新10条消息过滤处理
msg_resp = requests.get(
    f"https://graph.microsoft.com/v1.0/chats/{AZURE_CONFIG['chat_id']}/messages?$top=10",
    headers=headers
)
messages = msg_resp.json().get("value", [])
processed_count = 0

for msg in messages:
    sender_id = msg.get("from", {}).get("user", {}).get("id")
    if sender_id != AZURE_CONFIG["target_user_id"]:
        continue
    # 检查是否已加过爱心反应
    has_reacted = any(
        r.get("reactionType") == "heart" and r.get("user", {}).get("id") == AZURE_CONFIG["my_user_id"]
        for r in msg.get("reactions", [])
    )
    if not has_reacted:
        # 提交爱心反应
        requests.post(
            f"https://graph.microsoft.com/v1.0/chats/{AZURE_CONFIG['chat_id']}/messages/{msg['id']}/reactions",
            headers=headers,
            json={"reactionType": "heart"}
        )
        processed_count += 1

# 用pymsteams推送运行日志
if processed_count > 0:
    notify_card = pymsteams.connectorcard(WEBHOOK_URL)
    notify_card.text(f"本次共为目标用户的{processed_count}条新消息添加了爱心反应")
    notify_card.send()
  • 优势:运行稳定、无前端依赖、支持多场景适配,适合长期后台部署
  • 限制:需要Azure应用注册权限,部分企业租户可能限制普通用户注册应用

方案2:桌面自动化实现

适合无法申请Azure应用权限的个人使用,完全依赖本地Teams客户端运行。

  • 实现逻辑:
    1. 提前截取目标用户的头像/名称标识、Teams爱心反应按钮的截图作为匹配模板
    2. 用pyautogui+opencv-python定时对Teams窗口区域截图,识别是否有目标用户的新消息
    3. 识别到新消息后模拟鼠标hover消息区域,匹配到爱心反应按钮后模拟点击即可
  • 优势:无需任何接口权限,只要本地登录了Teams客户端就可以用
  • 限制:稳定性差,受窗口大小、分辨率、Teams界面更新影响大,无法后台静默运行,不能最小化Teams窗口

内容的提问来源于stack exchange,提问作者dpretzel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:24:05