前幾天我在wechat的moments里看到以為朋友發了騰迅會議的對用戶個人的年度數據統計,看上去很有大數據感。
?
?
?
?
?
實際上 Teams 也具備的類似的能力,只是它把這個能力開放給了開發人員,我們可以通過強大的 Graph API,獲取大量的數據信息(當然,為了保證數據安全,你的app必須獲得 tenant 管理員的同意)。
我接下來的幾篇文章就集中介紹一下如何獲取這些信息,有興趣的開發者可以輕松使用這些 api 來提供用戶的數據統計功能。
我們這篇文章先來介紹一下用戶在線離線狀態 presence。
獲取某一個用戶的狀態
GET /users/{id}/presence
獲取多個用戶的狀態
POST /communications/getPresencesByUserIdRequest body:
{"ids": ["fa8bf3dc-eca7-46b7-bad1-db199b62afc3", "66825e03-7ef5-42da-9069-724602c31f6b", ... ]
}
這兩個 api 都需要一個權限?Presence.Read.All
。下面是api的返回內容:
{"value": [{"id": "fa8bf3dc-eca7-46b7-bad1-db199b62afc3","availability": "Busy","activity": "InAMeeting"},{"id": "66825e03-7ef5-42da-9069-724602c31f6b","availability": "Away","activity": "Away"}]
}
可以看到 teams 把用戶的狀態做的很細,有兩個字段?availability
?和?activity
。
availability
?可能的值有:Available, AvailableIdle, Away, BeRightBack, Busy, BusyIdle, DoNotDisturb, Offline, PresenceUnknownactivity
?可能的值有:Available, Away, BeRightBack, Busy, DoNotDisturb, InACall, InAConferenceCall, Inactive, InAMeeting, Offline, OffWork, OutOfOffice, PresenceUnknown, Presenting, UrgentInterruptionsOnly
這么多值,分別代表什么意思呢?在Teams里這些狀態如下表:
User configured | App configured | |
---|---|---|
Available | Available | |
Available, Out of Office. (當用戶設置了自動回復功能,Teams就會設置成Out of office狀態) | ||
Busy | Busy | |
In a call | ||
In a meeting | ||
On a call, out of office | ||
Do not disturb | ||
Presenting | ||
Focusing. 當用戶在我們的日歷里設置了focus時間,Teams 就會顯示這個狀態 | ||
Away | Away | |
Away Last Seen?time | ||
Be right back | ||
Appear offline | Offline. 當用戶沒有在任何設備登入,幾分鐘后就會顯示這個狀態 | |
Status unknown | ||
Out of Office | ||
知道了這些,各位是不是已經在心里有這個統計 app 的想法了?比如可以弄一個 Azure Function,并且使用 timer trigger,每隔幾分鐘或者幾小時,就調用上面的 api,來獲取公司里用戶的狀態,然后保存到數據庫中,后面的統計就可以從數據庫里 query 了,當然為了統計的效率,可能需要對數據存儲做一些優化,比如某個用戶的狀態如果沒有變化,就不重復記錄。統計時也可能需要一些復雜的 sql 語句。不過一旦你有了用戶在線離線的數據,統計則是水到渠成的事情了。