You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Microsoft Teams与Java集成技术问询:如何通过Java发送私人消息及使用Microsoft Graph API类机器人账号

嘿,我来帮你一步步搞定用Java给Teams用户发私人消息的需求——结合Microsoft Graph API和类机器人账号的方案,我分成账号创建和代码实现两部分来讲,保证你能落地:

一、先搞定类机器人账号(Azure AD应用注册)

其实所谓的“类机器人账号”本质是一个Azure AD后台应用,它可以以应用身份而非用户身份调用Graph API,步骤如下:

  • 登录Azure门户,找到「Azure Active Directory」,进入左侧菜单的「应用注册」,点击「新注册」
  • 填写应用名称(比如“Teams消息机器人”),账户类型根据需求选:如果只给自家租户用户发消息,选「此组织目录中的账户」;如果要支持外部用户,选「任何组织目录中的账户和个人Microsoft账户」,重定向URI暂时填http://localhost(后续如果不需要可以修改),然后点击注册
  • 注册完成后,立刻记下页面上的应用程序(客户端)ID目录(租户)ID,这俩是后续认证的核心参数
  • 创建客户端密码:进入「证书和密码」选项卡,点击「新客户端密码」,设置过期时间,点击添加后,复制生成的密码值(敲黑板:这个密码只会显示一次,一定要保存好,丢了就得重新创建)
  • 添加API权限:进入「API权限」选项卡,点击「添加权限」→ 选「Microsoft Graph」→ 选「应用权限」,搜索并勾选ChatMessage.Send权限(这个是应用级权限,允许后台发送消息),最后点击「授予管理员同意」(必须租户管理员操作,否则权限不生效)
二、Java代码实现(用Microsoft Graph SDK)

我直接给你可运行的代码示例,基于官方的Graph Java SDK:

1. 添加Maven依赖

先在你的pom.xml里加入SDK和身份认证的依赖:

<dependency>
    <groupId>com.microsoft.graph</groupId>
    <artifactId>microsoft-graph</artifactId>
    <version>6.3.0</version> <!-- 建议用最新稳定版 -->
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.10.4</version>
</dependency>

2. 编写发送消息的代码

这段代码用客户端凭据流完成认证,直接给指定用户发送一对一私人消息:

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.microsoft.graph.models.ChatMessage;
import com.microsoft.graph.models.ItemBody;
import com.microsoft.graph.models.BodyType;
import com.microsoft.graph.requests.GraphServiceClient;
import okhttp3.Request;

public class TeamsPrivateMessageSender {
    public static void main(String[] args) {
        // 替换成你自己的参数
        String clientId = "你的应用客户端ID";
        String clientSecret = "你的应用客户端密码";
        String tenantId = "你的租户ID";
        String targetUserId = "目标用户的Object ID"; // 从Azure AD用户详情页获取

        // 构建身份凭据
        ClientSecretCredential credential = new ClientSecretCredentialBuilder()
                .clientId(clientId)
                .clientSecret(clientSecret)
                .tenantId(tenantId)
                .build();

        // 初始化Graph客户端
        GraphServiceClient<Request> graphClient = GraphServiceClient.builder()
                .authenticationProvider(request -> {
                    String accessToken = credential.getToken("https://graph.microsoft.com/.default").block().getToken();
                    request.addHeader("Authorization", "Bearer " + accessToken);
                    return request;
                })
                .buildClient();

        // 构建消息内容
        ChatMessage message = new ChatMessage();
        ItemBody body = new ItemBody();
        body.content = "嘿,这是来自类机器人账号的私人消息!😉";
        body.contentType = BodyType.TEXT; // 要发富文本可以改成HTML,content里写HTML代码
        message.body = body;

        try {
            // 直接发送消息(如果是第一次和该用户聊天,会自动创建一对一会话)
            graphClient.users(targetUserId)
                    .sendChatMessage(message)
                    .buildRequest()
                    .post();

            System.out.println("消息发送成功!");
        } catch (Exception e) {
            System.err.println("发送失败:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

3. 关键注意事项

  • 目标用户的Object ID:在Azure AD的「用户」列表里找到对应用户,进入详情页就能看到这个ID
  • 权限问题:如果遇到403错误,先检查ChatMessage.Send权限是不是应用权限,有没有完成「授予管理员同意」
  • 富文本消息:把BodyType改成HTML,然后在content里写HTML代码就行,比如<h3>标题</h3><p>段落内容</p>

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

火山引擎 最新活动