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

如何通过编程方式使用委托权限调用Graph API发送Microsoft Teams频道消息?

如何通过编程方式使用委托权限调用Graph API发送Microsoft Teams频道消息?

我来帮你搞定这个问题!首先得明确:ChannelMessage.Send权限确实只有委托权限,没有应用权限,所以你不能用ClientSecretCredential(这是应用权限的认证方式),得换成支持委托权限的认证方法,比如设备码认证或者交互式浏览器认证。

你原来的代码里注释了DeviceCodeCredential,这个就是适合无UI环境的委托权限认证方式,我来给你修正并补全代码:

from azure.identity import DeviceCodeCredential
from msgraph import GraphServiceClient
from msgraph.generated.models.chat_message import ChatMessage
from msgraph.generated.models.item_body import ItemBody
from msgraph.generated.models.body_type import BodyType
import os
import asyncio

# 注意环境变量的拼写,你原来的"tenenatid"是拼写错误,要改成正确的名称
client_id = os.environ["clientid"]
tenant_id = os.environ["tenantid"]

# 使用DeviceCodeCredential进行委托权限认证
# 这个方式会生成一个设备码,你需要在浏览器访问指定网址输入该码,完成用户登录
credential = DeviceCodeCredential(
    client_id=client_id,
    tenant_id=tenant_id
)

# 初始化Graph客户端,指定需要的权限范围
scopes = ["ChannelMessage.Send"]
graph_client = GraphServiceClient(credential, scopes)

async def send_teams_channel_message():
    # 构造要发送的消息内容
    message_body = ItemBody(
        content_type=BodyType.Html,
        content="<h3>测试消息</h3><p>这是通过Graph API委托权限发送的Teams频道消息</p>"
    )
    chat_message = ChatMessage(body=message_body)

    # 替换为你的团队ID和频道ID
    team_id = "你的团队ID"
    channel_id = "你的频道ID"

    try:
        # 调用Graph API发送消息
        await graph_client.teams.by_team_id(team_id).channels.by_channel_id(channel_id).messages.post(chat_message)
        print("消息发送成功!")
    except Exception as e:
        print(f"发送失败:{e}")

if __name__ == "__main__":
    asyncio.run(send_teams_channel_message())

再给你划几个关键点:

  • 认证方式选择:
    • 如果是有UI的桌面应用,可以用InteractiveBrowserCredential,会自动弹出浏览器让用户登录。
    • 无UI的服务器环境就用DeviceCodeCredential,按照终端提示的网址和代码完成登录。
  • 权限配置:
    • 确保你的Azure AD应用已经添加了ChannelMessage.Send的委托权限,企业环境下可能需要管理员完成权限同意。
  • 代码细节修正:
    • 修正了环境变量的拼写错误(你原来写的tenenatid是笔误)。
    • 必须指定正确的权限范围scopes,这里就是["ChannelMessage.Send"],保证请求的令牌包含这个权限。
    • Graph SDK的方法都是异步的,所以要用asyncio.run来执行异步函数。

备注:内容来源于stack exchange,提问作者CloudEnthusiast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:59:32