You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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

火山引擎 最新活动