Teams數據統計 - 聊天消息

前兩篇文章介紹了如何對用戶的在線狀態和通話記錄進行數據統計。這篇文章我們來看看如何統計用戶的聊天消息。

在介紹具體 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": []},...]
}

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

  • createdDateTime,?lastModifiedDateTime,?lastEditedDateTime?和?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 有對應的權限,基本就能拿到任何數據,有了數據后,我們的統計報表就簡單了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277881.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277881.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277881.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vis.js

1、官網&#xff1a;http://visjs.org/docs/network/ 2、示例&#xff1a; <!doctype html>  <html>     <head>     <title>vis.js</title>     <script type"text/javascript" src"vis.js"></scri…

暑期實習面試——艾锝科技,Python實習生

遠程筆試過&#xff0c;拒絕現場面轉載于:https://www.cnblogs.com/qinziang/p/9123339.html

Teams App 如何使用設備的能力

我們以前講到過&#xff0c;Teams有很多中可以擴展的方面&#xff0c;其中有一種是Tab&#xff0c;開發者可以開發一個web page/app&#xff0c;然后以tab的方式嵌入到teams里面。 除了基本的功能&#xff0c;這種tab也可以使用teams客戶端設備所帶的一些能力&#xff0c;比如…

實驗室3

實驗3.1 1 #include<stdio.h>2 int main()3 { long int sum,i;4 sum0;5 for(i22;i<1003;i20){6 sumsumi;7 }8 printf("sum%ld",sum);9 return 0; 10 } 11 1 #include<stdio.h>2 int main()3 { 4 long int…

寫出整潔的高效的js代碼

Variables:變量 使用有意義的可發音的變量名 Bad: var yyyymmdstr moment().format(YYYY/MM/DD);Good: var yearMonthDay moment().format(YYYY/MM/DD);使用可搜索的命名 在開發過程中&#xff0c;我們閱讀代碼的時間會遠遠超過編寫代碼的時間&#xff0c;因此保證代碼的可讀…

Teams App自定義

當我們開發的 app 被企業安裝后&#xff0c;有些企業挺希望能做一些自定義&#xff0c;如果把app的圖標改的更加符合企業風格一點&#xff0c;或者把app的名字改成讓本企業員工更容易理解一些&#xff0c;或者把app界面的主題色改成個企業風格更加搭配一些&#xff0c;或者對于…

實驗四:xl命令的常見子命令以及操作

實驗名稱&#xff1a; xl命令的常見子命令以及操作 實驗環境&#xff1a; 這里我們需要正常安裝一臺虛擬機&#xff0c;如下圖&#xff1a; 我們這里以一臺busybox為例&#xff0c;來進行這些簡單的常見的操作&#xff1b; 實驗要求&#xff1a; 這里我們準備了5個常見操作&…

Teams App 掃描二維碼

上篇文章我們講了如何在app的manifest里設置設備的權限&#xff0c;這篇文章我們來實際操作開發一個可以掃描二維碼的teams app。 首先&#xff0c;我們先到app studio里&#xff0c;創建一個teams app&#xff0c;然后創建tab&#xff0c;重要的一點是&#xff0c;我們確保ma…

關于我的知識星球服務

2019獨角獸企業重金招聘Python工程師標準>>> 今天剛開通了我的知識星球-攻城師在路上&#xff0c;歡迎大家加入&#xff0c;目前前50名按最低費用收費50元一年&#xff0c;后面會根據人數情況調整。 希望通過這么一個圈子&#xff0c;讓大家信息資源共享&#xff0c…

mysql8用戶管理

查看當前登錄用戶&#xff1a; 創建用戶&#xff1a; create user 用戶名主機地址 identified with mysql_native_password by 密碼; 修改密碼&#xff1a; alter user 用戶名主機地址 identified with mysql_native_password by 新密碼; 原因是&#xff1a;在mysql 5.7.9版本以…

Teams App設備的地理位置能力

我們上一篇文章講了如何在Teams app里掃描二維碼&#xff0c;這篇文章我們來看一下如何獲取當前設備的地理位置&#xff0c;并且在地圖上顯示地理位置。 首先&#xff0c;我們先到app studio里&#xff0c;創建一個teams app&#xff0c;然后創建tab&#xff0c;并且確保我們勾…

第4章 變量、作用域和內存問題

JavaScript高級程序設計第四章知識點梳理 1、基本類型值和引用類型值 基本類型值包括&#xff1a;Boolean、String、undefined、Number、Null 引用類型值&#xff1a;Object 注意&#xff1a;ECMAScript中所有函數的參數都是按值傳遞的。 2、延長作用域鏈 當執行流進入下列任何…

Teams App如何選擇用戶

當我們在開發app的時候&#xff0c;很多時候需要選擇一個用戶&#xff0c;比如我們開發一個審批的app&#xff0c;就要選擇審批人&#xff0c;所以這個app就需要實現選擇人的界面&#xff0c;而且需要獲取完整的用戶列表&#xff0c;但是要獲取完整的用戶列表又需要app擁有較高…

Python終端如何輸出彩色字體

Python終端如何輸出彩色字體 Python終端如何輸出彩色字體 實現過程&#xff1a;終端的字符顏色是用轉義序列控制的&#xff0c;是文本模式下的系統顯示功能&#xff0c;和具體的語言無關。轉義序列是以ESC開頭,即用\033來完成&#xff08;ESC的ASCII碼用十進制表示是27&#xf…

ID4收藏

IdentityServer4.Admin https://github.com/skoruba/IdentityServer4.Admin轉載于:https://www.cnblogs.com/superstar/p/10757886.html

Teams Bot庫的JSON

如果你和我一樣&#xff0c;一直使用最新的 asp.net core 來開發teams bot的應用&#xff0c;那么你就會發現當你使用最新的 LTS 3.1版本或者 5.0 版本或者最新的 6.0 版本&#xff0c;asp.net core 默認使用System.Text.Json庫&#xff0c;所以當你在處理 Teams 發送來的請求的…

碼云如何上傳代碼

1.在碼云上創建一個項目&#xff0c;具體操作很簡單就不多說了 2.創建本地倉庫 在本地創建一個test文件夾&#xff0c;文件夾里右鍵Git Bash Here, 進入git。 git init初始化本地倉庫 git add . 把所有文件添加到暫存區 git commit -m “推送備注” 這里是每次推送時候寫的…

v-if v-else-if v-else

1.代碼 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>測試</title><script src"https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script> </head> <body><div id"ap…

Teams Bot如何解析和發送 at 用戶

之前有好些看博客的開發者問我有什么較好的方法來解析 at 信息。用戶在channel里發消息給 bot 的時候&#xff0c;通常需要 at bot的名字&#xff0c;當然在消息文字中可能還會 at 其他用戶&#xff0c;比如 bot的名字是 MyBot&#xff0c;那 bot 收到的 Activity 里的 Text 值…