大家如果看teams的 graph api 開發文檔,可能會把 app id, installation id 和 external id 搞混,我自己一開始的時候就有點被搞暈了,再加上app manifest里面的 id 和 bot id,基本就徹底暈掉了。
那我們今天這篇文章就來講講這幾種 id 。
首先當我們開發一個 team app 的時候,都需要編寫一個 manifest json 文件,在這個文件里就有必須要指定一個 id,還有一個 bot id,bot id就是你創建的 microsoft app id,我們通常把這兩個id 使用一樣的值,但是實際上一個 teams app里面可以有多個 bot,也就是說你可以在manifest json文件里指定多個 bot id。
當我們把我們的 teams app提交到teams里后(提交一個zip文件,zip里含有manifest json文件),teams系統就會自動生成一個 app id,這個就是teams文檔里提到的 app id,要注意的是這個app id和我們在manifest 文件里寫的id 不是一個東西。同時 teams 把 manifest 里的 id 也保存下來,叫做了 external id。
我們看一下微軟文檔里的寫法:?https://docs.microsoft.com/en-us/graph/api/resources/teamsapp?view=graph-rest-1.0&preserve-view=true#properties
TeamsApp Resource Type Properties
Property | Type | Description |
---|---|---|
id | string | The catalog app’s generated app ID (different from the developer-provided ID in the?Microsoft Teams zip app package. |
externalId | string | The ID of the catalog provided by the app developer in the?Microsoft Teams zip app package. |
搞清楚了 app id 和 external id 的區別后,我們再來看一下 installation id 就簡單了。
一個 app 可以被安裝到不同的 tenant 下的不同的 team 里,每一次安裝,就會對應的生成一個 installtion id。也就是說一個 app id 會對應到多個 installation id,他們是一對多的關系。
我們來看一個實際的例子。
GET https://graph.microsoft.com/v1.0/teams/{team-id}/installedApps?$expand=teamsAppResponse:
HTTP/1.1 200 OK
Content-type: application/json
{"@odata.count": 1,"value": [{"id": "NjkwM2Z....", // installation id"teamsApp": {"id": "11111111-25e0-4569-8ebe-13601cb55a18", // app id"externalId": "22222222-f94e-4d80-ba90-5594b641a8ee", // external id (在manifest里指定的 id)"displayName": "YPA","distributionMethod": "sideloaded"}}]
}
通過上面的例子,大家應該都清楚他們的關系了,當然,如果你能自己動手調用一下graph api,看一下在你自己的tenant里各個 id 的情況,那肯定理解更加深刻。