Teams个人选项卡应用URL占位符展开异常问题排查
我正在开发Microsoft Teams个人选项卡应用,初始页面加载正常,但希望在首次GET请求中获取tenant id。根据微软官方文档,TeamsJS 2.0.0及以上版本应使用{user.tenant.id}占位符,早期版本使用{tid}。
我的manifest版本为1.15,该版本支持TeamsJS 2.0.0及以上,但测试发现{tid}可正常展开,{user.tenant.id}却无法展开。我的选项卡contentUrl为:https://teams.test.dev/Home/Debug?tenant1={tid}&tenant2={user.tenant.id}
Teams实际发送的请求为:https://teams.test.dev/Home/Debug?tenant1=ACTUAL-TENANT-GUID&tenant2=%7buser.tenant.id%7d
而我预期的请求应为:https://teams.test.dev/Home/Debug?tenant1=%7btid%7d&tenant2=ACTUAL-TENANT-GUID
请问是文档存在错误,还是我遗漏了某些配置?
以下是我的manifest(已替换GUID和域名):
{ "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.15/MicrosoftTeams.schema.json", "version": "1.0.0", "manifestVersion": "1.15", "id": "11111111-1111-1111-1111-111111111111", "packageName": "dev.test.teams", "name": { "short": "Test Dev", "full": "Test development app" }, "developer": { "name": "Dev", "mpnId": "", "websiteUrl": "https://teams.test.dev", "privacyUrl": "https://teams.test.dev/privacy", "termsOfUseUrl": "https://teams.test.dev/termsofuse" }, "description": { "short": "Short description", "full": "This is a long description..." }, "icons": { "outline": "outline.png", "color": "color.png" }, "accentColor": "#FFFFFF", "staticTabs": [ { "entityId": "22222222-2222-2222-2222-222222222222", "name": "Debug", "contentUrl": "https://teams.test.dev/Home/Debug?tenant1={tid}&tenant2={user.tenant.id}", "websiteUrl": "https://teams.test.dev/Home/Debug", "scopes": [ "personal" ] }, { "entityId": "about", "scopes": [ "personal" ] } ], "validDomains": [ "*.test.dev" ], "webApplicationInfo": { "id": "33333333-3333-3333-3333-333333333333", "resource": "api://teams.test.dev/33333333-3333-3333-3333-333333333333" } }
核心原因
虽然manifest 1.15理论上兼容TeamsJS 2.x,但{user.tenant.id}这类嵌套占位符的解析支持,实际上是从manifest版本1.16才开始正式引入的。你当前使用的1.15版本并不支持该占位符,这就是它无法被展开的原因;而{tid}作为传统占位符,在所有高版本manifest中都能保持兼容解析。
解决步骤
- 升级manifest版本到1.16或更高
修改manifest中的manifestVersion字段为1.16,同时更新对应的schema链接为https://developer.microsoft.com/en-us/json-schemas/teams/v1.16/MicrosoftTeams.schema.json。 - 重新打包并上传应用
确保更新后的manifest没有语法错误,重新打包成zip文件后上传到Teams进行测试,此时{user.tenant.id}应该能正常解析为租户ID。 - 临时替代方案(若无法升级manifest)
如果暂时无法升级manifest版本,继续使用{tid}占位符即可,它在个人选项卡场景下能稳定获取租户ID,功能上与{user.tenant.id}完全等价。
内容的提问来源于stack exchange,提问作者Arek Dygas

