ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Teams数据统计 - 聊天消息

2021-07-20 20:04:42  阅读:385  来源: 互联网

标签:channel graph GET Teams 聊天 team message id 统计


前两篇文章介绍了如何对用户的在线状态和通话记录进行数据统计。这篇文章我们来看看如何统计用户的聊天消息。

在介绍具体 api 如何调用前,我们可以先看一下 Teams 里对于 Message 的层级结构,在 Teams 里,message有两种,一种是 Team 的 Channel 的 message,一种是对一对聊天或者群聊里的 message。他们的层级设计是不同的。

Channel 里的消息

它的层次结构如下:

Team -> Channel -> Message -> Reply 一个 tenant 里有多个 Team,每个 Team 里可以有多个 Channel,每个 Channel 里有多个 Message,每个 Message 可以有 0 到 n 个 reply消息。

所以我们使用 graph api 来获取信息的时候,我们先获取 teams 列表,因为 graph api目前没有一个简单的获取 team 列表的接口,所以必须要用下面这个获取 group 列表的接口,再加上 filter。这是一个已知的问题,希望以后能被fix掉。

GET /groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')
Response:
{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#groups",
    "value": [
        {
            "id": "02bd9fd6-8f93-4758-87c3-1fb73740a315",
            "displayName": "HR Taskforce",
            "visibility": "Private"
            ...
        },
        ...
    ]
}

我们有了 team 列表后就可以开始获取每个 team 的 channel。使用如下接口:

GET https://graph.microsoft.com/beta/teams/{team-id}/channels
Response:
{
  "value": [
    {
      "description": "description-value",
      "displayName": "display-name-value",
      "id": "02bd9fd6-1111-4758-87c3-1fb73740a315",
      ....
    },
    ...
  ]
}

有了 channel 后,我们就可以获取 channel 里的 message 列表。

GET https://graph.microsoft.com/beta/teams/{team-id}/channels/{channel-id}/messages
Response:
{
    "value": [
        {
            "id": "1555375673184",
            "messageType": "message",
            "createdDateTime": "2019-04-16T00:47:53.184Z",
            "lastModifiedDateTime": "2019-05-04T19:58:15.511Z",
            "lastEditedDateTime": null,
            "deletedDateTime": null,
            "subject": "",
            "summary": null,
            "importance": "normal",
            "locale": "en-us",
            "from": {
                "user": {
                    "id": "bb8775a4-4d8c-42cf-a1d4-4d58c2bb668f",
                    "displayName": "Adele Vance",
                    "userIdentityType": "aadUser"
                }
            },
            "body": {
                "contentType": "html",
                "content": "<div><div>Nice to join this team. <at id=\"0\">Megan Bowen</at>, have we got the March report ready please?</div>\n</div>"
            },
            "attachments": [],
            "mentions": [
                {
                    "mentionText": "Megan Bowen",
                    "mentioned": {
                        "user": {
                            "id": "5d8d505c-864f-4804-88c7-4583c966cde8",
                            "displayName": "Megan Bowen",
                            "userIdentityType": "aadUser"
                        }
                    }
                }
            ],
            "reactions": []
        },
        ...
    ]
}

大家可以发现上面有用的信息非常多,比如:

  • createdDateTimelastModifiedDateTimelastEditedDateTime 和 deletedDateTime,各种时间
  • from:message是谁发的
  • mentions:消息里有没有 @ 其他人
  • reactions:消息有没有被点赞,谁在什么时候点了赞或者点了什么其他表情

由于一个channel里的 message 会很多,所以 graph api 还有一个分批获取 message 的接口,如果对这个接口感兴趣,可以参考这个文档:https://docs.microsoft.com/en-us/graph/api/chatmessage-delta?view=graph-rest-beta&tabs=http

GET /teams/{team-id}/channels/{channel-id}/messages/delta

有了 message 后就可以获取每个 message 的replies 了。

GET /teams/{team-id}/channels/{channel-id}/messages/{message-id}/replies

对一对聊天或者群聊里的 message

它的层次结构比较简单,如下:

User -> Chat -> Message

我们先需要枚举当前 tenant 下的所有的 user,然后对每一个 user 调用下面的接口来获取这个用户的聊天。

GET https://graph.microsoft.com/beta/users/{user-id}/chats
Response:
{
    "value": [
        {
            "id": "19:meeting_MjdhNjM4YzUtYzExZi00OTFkLTkzZTAtNTVlNmZmMDhkNGU2@thread.v2",
            "topic": "Meeting chat sample",
            "createdDateTime": "2020-12-08T23:53:05.801Z",
            "lastUpdatedDateTime": "2020-12-08T23:58:32.511Z",
            "chatType": "meeting"
        },
        {
            "id": "19:561082c0f3f847a58069deb8eb300807@thread.v2",
            "topic": "Group chat sample",
            "createdDateTime": "2020-12-03T19:41:07.054Z",
            "lastUpdatedDateTime": "2020-12-08T23:53:11.012Z",
            "chatType": "group"
        },
        {
            "id": "19:d74fc2ed-cb0e-4288-a219-b5c71abaf2aa_8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca@unq.gbl.spaces",
            "topic": null,
            "createdDateTime": "2020-12-04T23:10:28.51Z",
            "lastUpdatedDateTime": "2020-12-04T23:10:36.925Z",
            "chatType": "oneOnOne"
        }
    ]
}

可以看到,上面的接口返回了各种对话类型 (chatType):一对一聊天 oneOnOne ,群聊 group ,和会议里的聊天 meeting。有了chat列表后,我们就能对每一个chat来获取 message。

GET https://graph.microsoft.com/beta/users/{user-id}/chats/{chat-id}/messages

这个接口返回的内容和channel message返回的内容类似。

看到这里想必大家已经发现了 teams 的强大,和 graph api 的开放性,只要 app 有对应的权限,基本就能拿到任何数据,有了数据后,我们的统计报表就简单了。

标签:channel,graph,GET,Teams,聊天,team,message,id,统计
来源: https://blog.csdn.net/xxjjxx/article/details/118943256

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有