天天看點

Teams資料統計 - 使用者線上離線狀态

前幾天我在wechat的moments裡看到以為朋友發了騰迅會議的對使用者個人的年度資料統計,看上去很有大資料感。

Teams資料統計 - 使用者線上離線狀态
Teams資料統計 - 使用者線上離線狀态
Teams資料統計 - 使用者線上離線狀态

實際上 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

  • availability

     可能的值有:Available, AvailableIdle, Away, BeRightBack, Busy, BusyIdle, DoNotDisturb, Offline, PresenceUnknown
  • activity

     可能的值有: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 語句。不過一旦你有了使用者線上離線的資料,統計則是水到渠成的事情了。

繼續閱讀