使用Graph API向团队中的特定用户发送消息

时间:2020-03-03 20:43:54

标签: microsoft-graph-api microsoft-teams microsoft-graph-teams

通过Graph API向团队中的特定用户发送消息的端点吗?

2 个答案:

答案 0 :(得分:2)

(为清晰起见进行了编辑,并添加了自定义请求)

您可以通过Graph API将消息发送给私人用户,存在一个问题,您无法通过Graph API在两个用户之间创建新的聊天。这意味着,如果要从用户向用户发送消息,则聊天必须已经存在。 (必须先通过MSTeams客户端交换消息,才能存在聊天记录)

所以请确保您有一个开放的聊天室!

如果是这样,请查看此MSDoc(此文档说明了如何列出用户的聊天记录): https://docs.microsoft.com/en-us/graph/api/chat-list?view=graph-rest-beta&tabs=http

列出所有聊天记录后,您可以查看此MSDoc(此文档说明了如何向用户发送消息): https://docs.microsoft.com/en-us/graph/api/chat-post-messages?view=graph-rest-beta&tabs=http

请注意权限!对于发送消息和列出聊天,到目前为止,只有 AND 拥有委派权限,这些呼叫仅在 BETA 中可用,因此请当心。 / p>


我只能为您提供Java代码作为示例。

(对于我所做的所有事情,我都使用ScribeJava获得Auth-Token) 对于委派权限,您需要具有“ User-Auth-Token”。这意味着您必须像这样使用“密码凭证授予”:

private void _initOAuth2Service() 
{
    oAuth2Service = new ServiceBuilder(clientId)
            .apiSecret(clientSecret)
            .defaultScope(GRAPH_SCOPE)
            .build(MicrosoftAzureActiveDirectory20Api.custom(tenantId));


    //PASSWORD CREDENTIALS FLOW
    try 
    {
        oAuth2Token = oAuth2Service.getAccessTokenPasswordGrant(username, password);
    }
    catch (IOException e) { e.printStackTrace();  }
    catch (InterruptedException e) { e.printStackTrace(); }
    catch (ExecutionException e) {  e.printStackTrace(); }
}

用户名和密码是您要发送消息的用户(发件人)的凭据。


初始情况

这是我的TeamsClient:

My Teams Chat Section

ScribeJava


获取所有公开聊天

(URL中的“我”是上方(发送者)的用户。)

private Response _executeGetRequest()
{
final OAuthRequest request = new OAuthRequest(Verb.GET, "https://graph.microsoft.com/beta/me/chats");
        oAuth2Service.signRequest(oAuth2Token, request);
        return oAuth2Service.execute(request);
}

我从此请求获得的响应如下:

{"@odata.context":"https://graph.microsoft.com/beta/$metadata#chats","value":[{"id":"{PartOfTheID}_{firstHalfOfUserID}-e52a55572b49@unq.gbl.spaces","topic":null,"createdDateTime":"2020-04-25T09:22:19.86Z","lastUpdatedDateTime":"2020-04-25T09:22:20.46Z"},{"id":"{secondUserChatID}@unq.gbl.spaces","topic":null,"createdDateTime":"2020-03-27T08:19:29.257Z","lastUpdatedDateTime":"2020-03-27T08:19:30.255Z"}]}

您可以看到我有两个打开的聊天室,并从请求中获得了两个条目。

获取正确的conversatonID

您必须知道ID可以分为三部分。 {JustAPartOfTheId} _ {userId} @ {EndOfTheId}。 {userId}是您的聊天伙伴(收件人)的ID。

这是GraphExplorer响应,它为我提供了所有用户以及有关他们的所有信息。

User Franz Bauer

现在您可以看到第一个ID: “ id”:“ {PartOfTheID} _ {firstHalfOfUserID}-e52a55572b49@unq.gbl.spaces”

与“ _”后面的UserID匹配。

您可以在“ _”过滤器中拆分ID,然后找到所需的ID。

发送消息给用户

现在您知道正确的ID,并且可以发送新请求,例如:

final OAuthRequest request = new OAuthRequest(Verb.POST, "https://graph.microsoft.com/beta/chats/{PartOfTheID}_{firstHalfOfUserID}-e52a55572b49@unq.gbl.spaces/messages");
        oAuth2Service.signRequest(oAuth2Token, request);
        request.addHeader("Accept", "application/json, text/plain, */*");
        request.addHeader("Content-Type", "application/json");
        request.setPayload("{\"body\":{\"content\":\" " + "Hi Hi Daniel Adu-Djan" + "\"}}");
        oAuth2Service.execute(request);

GraphAPI自定义请求

在Graph-SDK中,除了自定义请求外,没有机会使用beta端点。 (对于这些请求,我还使用ScribeJava获得Auth-Token)

设置BETA端点

当您要使用BETA端点时,必须使用setEndpoint()函数,如下所示:

IGraphServiceClient graphUserClient = _initGraphServiceUserClient();
//Set Beta-Endpoint 
graphUserClient.setServiceRoot("https://graph.microsoft.com/beta");

获取所有聊天记录

try
    {
      JsonObject allChats = graphUserClient.customRequest("/me/chats").buildRequest().get();
    }
catch(ClientException ex) { ex.printStacktrace(); }

与上述回复相同

与userId =>拆分并过滤的情况相同

发送消息

IGraphServiceClient graphUserClient = _initGraphServiceUserClient();
//Set Beta-Endpoint again
graphUserClient.setServiceRoot("https://graph.microsoft.com/beta"); 
try
    {
      JsonObject allChats = graphUserClient.customRequest("/chats/{PartOfTheID}_{firstHalfOfUserID}-e52a55572b49@unq.gbl.spaces/messages").buildRequest().post({yourMessageAsJsonObject});
    }
catch(ClientException ex) { ex.printStacktrace(); 
}

这是一个小GIF,您可以在其中看到我没有输入任何内容。我刚刚启动了我的小应用程序,它会自动发送消息。

Send Message Gif

希望这对您有所帮助。如果您不了解,请随时发表评论! :)

最诚挚的问候!

答案 1 :(得分:0)

到目前为止,我们没有任何端点可以通过Graph API向特定用户发送消息。

您可以在UserVoice中提交/投票功能请求,或者只是等待产品团队的更新。

您可以为已经创建的以下功能请求投票。您要做的就是输入您的电子邮件ID并投票。

https://microsoftteams.uservoice.com/forums/555103-public/suggestions/40642198-create-new-1-1-chat-using-graph-api

https://microsoftteams.uservoice.com/forums/555103-public/suggestions/39139705-is-there-any-way-to-generate-chat-id-by-using-grap

更新

请在下面找到另外一个为Microsoft Graph用户语音中的相同用户语音创建的语音并对其进行投票。

https://microsoftgraph.uservoice.com/forums/920506-microsoft-graph-feature-requests/suggestions/37802836-add-support-for-creating-chat-messages-on-the-user