如何使用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。 - 实现逻辑:
- 用
msal库获取Graph API的访问令牌 - 定时调用接口拉取目标聊天/频道的最新消息列表
- 过滤出发件人为指定用户、且你尚未添加过爱心反应的消息
- 调用消息反应添加接口提交
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客户端运行。
- 实现逻辑:
- 提前截取目标用户的头像/名称标识、Teams爱心反应按钮的截图作为匹配模板
- 用
pyautogui+opencv-python定时对Teams窗口区域截图,识别是否有目标用户的新消息 - 识别到新消息后模拟鼠标hover消息区域,匹配到爱心反应按钮后模拟点击即可
- 优势:无需任何接口权限,只要本地登录了Teams客户端就可以用
- 限制:稳定性差,受窗口大小、分辨率、Teams界面更新影响大,无法后台静默运行,不能最小化Teams窗口
内容的提问来源于stack exchange,提问作者dpretzel
相关产品推荐
相关产品推荐

