如何用Python向Teams用户发送私信?
如何用Python向Teams用户发送私信?
嗨,这个问题我刚好研究过!首先得告诉你,之前用来发频道消息的Incoming Webhook是没法发私信的,它只支持频道/团队消息。要给单个用户发私信,官方推荐的方式是用Microsoft Graph API,这也是目前唯一可靠的方法。
下面我给你一步步拆解怎么实现:
第一步:准备Azure AD应用和权限
你得先在Azure Active Directory里注册一个应用,这是调用Graph API的前提:
- 登录Azure门户,找到Azure AD,注册一个新的"单租户"应用
- 获取三个关键信息:客户端ID(Client ID)、客户端密钥(Client Secret)、租户ID(Tenant ID)
- 给应用添加权限:搜索并添加
Chat.Send(应用权限,适合后台自动发送,不需要用户登录)或者ChatMessage.Send(委托权限,需要用户授权),然后记得点击"授予管理员同意",否则权限不会生效
第二步:用Python调用Graph API实现私信发送
我们可以用requests库来完成API调用,分两个核心步骤:获取访问令牌,然后创建聊天并发送消息(如果已经和目标用户有过聊天,也可以直接复用聊天ID)
1. 获取访问令牌
import requests # 替换成你的信息 tenant_id = "你的租户ID" client_id = "你的客户端ID" client_secret = "你的客户端密钥" token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token" token_payload = { "grant_type": "client_credentials", "client_id": client_id, "client_secret": client_secret, "scope": "https://graph.microsoft.com/.default" } token_response = requests.post(token_url, data=token_payload) access_token = token_response.json()["access_token"]
2. 创建一对一聊天并发送消息
如果还没和目标用户建立过聊天,得先创建聊天会话,再发消息:
# 目标用户的ID(可以通过Graph API的/users端点,根据邮箱查询用户ID) target_user_id = "目标用户的ID" # 创建聊天会话 create_chat_url = "https://graph.microsoft.com/v1.0/chats" create_chat_headers = { "Authorization": f"Bearer {access_token}", "Content-Type": "application/json" } create_chat_payload = { "chatType": "oneOnOne", "members": [ { "@odata.type": "#microsoft.graph.aadUserConversationMember", "roles": ["owner"], "user@odata.bind": f"https://graph.microsoft.com/v1.0/users('{target_user_id}')" } ] } chat_response = requests.post(create_chat_url, headers=create_chat_headers, json=create_chat_payload) chat_id = chat_response.json()["id"] # 发送私信 send_message_url = f"https://graph.microsoft.com/v1.0/chats/{chat_id}/messages" send_message_payload = { "body": { "content": "这是用Python发送的Teams私信!" } } requests.post(send_message_url, headers=create_chat_headers, json=send_message_payload)
一些关键提示
- 怎么获取目标用户ID? 可以调用
https://graph.microsoft.com/v1.0/users?$filter=mail eq '目标用户邮箱',返回结果里的id就是用户ID - 如果已经和用户有过聊天,可以直接通过
https://graph.microsoft.com/v1.0/users/me/chats(委托权限)或者https://graph.microsoft.com/v1.0/chats(应用权限)查询已有的聊天ID,跳过创建聊天的步骤 - 应用权限需要管理员同意,如果你是个人测试,用委托权限(authorization code flow)会更方便,但需要用户登录授权
我知道刚开始找相关信息确实有点绕,不过按上面的步骤来应该能搞定!
备注:内容来源于stack exchange,提问作者Pedrioni




