前幾天我在wechat的moments裡看到以為朋友發了騰迅會議的對使用者個人的年度資料統計,看上去很有大資料感。
實際上 Teams 也具備的類似的能力,隻是它把這個能力開放給了開發人員,我們可以通過強大的 Graph API,擷取大量的資料資訊(當然,為了保證資料安全,你的app必須獲得 tenant 管理者的同意)。
我接下來的幾篇文章就集中介紹一下如何擷取這些資訊,有興趣的開發者可以輕松使用這些 api 來提供使用者的資料統計功能。
我們這篇文章先來介紹一下使用者線上離線狀态 presence。
擷取某一個使用者的狀态
GET /users/{id}/presence
擷取多個使用者的狀态
POST /communications/getPresencesByUserId
Request 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
。
-
可能的值有:Available, AvailableIdle, Away, BeRightBack, Busy, BusyIdle, DoNotDisturb, Offline, PresenceUnknownavailability
-
可能的值有:Available, Away, BeRightBack, Busy, DoNotDisturb, InACall, InAConferenceCall, Inactive, InAMeeting, Offline, OffWork, OutOfOffice, PresenceUnknown, Presenting, UrgentInterruptionsOnlyactivity
這麼多值,分别代表什麼意思呢?在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 語句。不過一旦你有了使用者線上離線的資料,統計則是水到渠成的事情了。