创建配置页
配置页是一种特殊类型的内容页。 用户将使用配置页配置 Microsoft Teams 应用的某些方面,并使用该配置作为以下内容的一部分:
- 频道或群组聊天选项卡:从用户收集信息,并设置要显示的内容页的
contentUrl
。 - 消息扩展。
- Microsoft 365 组的连接器。
注意
本主题反映 2.0.x 版的 Microsoft Teams JavaScript 客户端库 (TeamsJS) 。 如果使用的是早期版本,请参阅 TeamsJS 库概述 ,获取有关最新 TeamsJS 与早期版本之间的差异的指导。
选项卡的配置页
应用程序必须引用 TeamsJS 库 并调用 app.initialize()
。 使用的 URL 必须是安全的 HTTPS 终结点,并且可从云中获取。
示例
下图显示了配置页的示例:
下面的代码是配置页的相应代码示例:
<head>
<script src="https://res.cdn.office.net/teams-js/2.2.0/js/MicrosoftTeams.min.js"
integrity="sha384yBjE++eHeBPzIg+IKl9OHFqMbSdrzY2S/LW3qeitc5vqXewEYRWegByWzBN/chRh"
crossorigin="anonymous" >
</script>
<body>
<button onclick="(document.getElementById('icon').src = '/images/iconGray.png'); colorClickGray()">Select Gray</button>
<img id="icon" src="/images/teamsIcon.png" alt="icon" style="width:100px" />
<button onclick="(document.getElementById('icon').src = '/images/iconRed.png'); colorClickRed()">Select Red</button>
<script>
await microsoftTeams.app.initialize();
let saveGray = () => {
microsoftTeams.pages.config.registerOnSaveHandler((saveEvent) => {
const configPromise = pages.config.setConfig({
websiteUrl: "https://example.com",
contentUrl: "https://example.com/gray",
entityId: "grayIconTab",
suggestedDisplayName: "MyNewTab"
});
configPromise.
then((result) => {saveEvent.notifySuccess()}).
catch((error) => {saveEvent.notifyFailure("failure message")});
});
}
let saveRed = () => {
microsoftTeams.pages.config.registerOnSaveHandler((saveEvent) => {
const configPromise = pages.config.setConfig({
websiteUrl: "https://example.com",
contentUrl: "https://example.com/red",
entityId: "redIconTab",
suggestedDisplayName: "MyNewTab"
});
configPromise.
then((result) => {saveEvent.notifySuccess();}).
catch((error) => {saveEvent.notifyFailure("failure message")});
});
}
let gr = document.getElementById("gray").style;
let rd = document.getElementById("red").style;
const colorClickGray = () => {
gr.display = "block";
rd.display = "none";
microsoftTeams.pages.config.setValidityState(true);
saveGray()
}
const colorClickRed = () => {
rd.display = "block";
gr.display = "none";
microsoftTeams.pages.config.setValidityState(true);
saveRed();
}
</script>
...
</body>
选择配置页中的“选择灰色”或“选择红色”按钮,以显示带有灰色或红色图标的选项卡内容。
下图显示了选中灰色图标的选项卡内容:
下图显示了选中红色图标的选项卡内容:
选择适当的按钮会触发 saveGray()
或 saveRed()
,并调用以下命令:
- 将
pages.config.setValidityState(true)
设置为 true。 - 触发
pages.config.registerOnSaveHandler()
事件处理程序。 - 在应用的配置页上启用“保存”。
配置页代码会通知 Teams 满足配置要求,并且可以继续安装。 当用户选择“保存”时,将根据 Config
接口的定义设置 pages.config.setConfig()
的参数。 有关详细信息,请参阅 配置接口。 调用 saveEvent.notifySuccess()
以指示已成功解析内容 URL。
注意
- 你有 30 秒的时间来完成保存操作, (超时前回调到
registerOnSaveHandler
) 。 超时后,将显示一般错误消息。 - 如果使用
registerOnSaveHandler()
注册保存处理程序,则回调必须调用saveEvent.notifySuccess()
或saveEvent.notifyFailure()
以指示配置的结果。 - 如果未注册保存处理程序,则当用户选择“保存”时,将自动进行
saveEvent.notifySuccess()
调用。 - 确保具有唯一
entityId
的 。 重复entityId
重定向到选项卡的第一个实例。
获取选项卡设置的上下文数据
选项卡需要上下文信息才能显示相关内容。 上下文信息通过提供更加个性化的用户体验,进一步增强了选项卡的吸引力。
有关用于选项卡配置的属性的详细信息,请参阅上下文接口。 通过以下两种方式收集上下文数据变量的值:
在 configurationUrl
中插入占位符
将上下文接口占位符添加到基 configurationUrl
。 例如:
基 URL
...
"configurationUrl": "https://yourWebsite/config",
...
包含查询字符串的基 URL
...
"configurationUrl": "https://yourWebsite/config?team={teamId}&channel={channelId}&{locale}"
...
页面上传后,Teams 会使用相关值更新查询字符串占位符。 请在配置页中包括逻辑以检索和使用这些值。 有关使用 URL 查询字符串的详细信息,请参阅 MDN Web Docs 中 URLSearchParams。下面的代码示例提供了从 configurationUrl
属性中提取值的方法:
<script>
await microsoftTeams.app.initialize();
const getId = () => {
let urlParams = new URLSearchParams(document.location.search.substring(1));
let blueTeamId = urlParams.get('team');
return blueTeamId
}
//For testing, you can invoke the following to view the pertinent value:
document.write(getId());
</script>
使用 getContext()
函数检索上下文
函数 app.getContext()
返回一个通过 上下文接口 对象解析的 promise。
以下代码提供了将此函数添加到配置页以检索上下文值的示例:
<!-- `userPrincipalName` will render in the span with the id "user". -->
<span id="user"></span>
...
<script type="module">
import {app} from 'https://res.cdn.office.net/teams-js/2.0.0/js/MicrosoftTeams.min.js';
const contextPromise = app.getContext();
contextPromise.
then((context) => {
let userId = document.getElementById('user');
userId.innerHTML = context.user.userPrincipalName;
}).
catch((error) => {/*Unsuccessful operation*/});
</script>
...
上下文和身份验证
在允许用户配置应用之前进行身份验证。 否则,内容可能包含具有其身份验证协议的源。 有关详细信息,请参阅在 Microsoft Teams 选项卡中对用户进行身份验证。请使用上下文信息构造身份验证请求和授权页面 URL。 确保选项卡页中使用的所有域都列在 manifest.json
和 validDomains
数组中。
修改或删除选项卡
将清单的 canUpdateConfiguration
属性设置为 true
。 它使用户能够修改或重新配置频道或组选项卡。只能通过 Teams 用户界面重命名选项卡。 在删除选项卡时通知用户对内容的影响。 为此,请在应用中包括删除选项页,并在以前 setSettings()
) 配置 (中设置 removeUrl
属性setConfig()
的值。 用户可以卸载静态选项卡,但无法修改它们。 有关详细信息,请参阅为选项卡创建删除页。
Microsoft Teams setConfig()
(以前 setSettings()
) 删除配置页面:
import { pages } from "@microsoft/teams-js";
const configPromise = pages.config.setConfig({
contentUrl: "add content page URL here",
entityId: "add a unique identifier here",
suggestedDisplayName: "add name to display on tab here",
websiteUrl: "add website URL here //Required field for configurable tabs on Mobile Clients",
removeUrl: "add removal page URL here"
});
configPromise.
then((result) => {/*Successful operation*/}).
catch((error) => {/*Unsuccessful operation*/});
移动客户端
如果选择让频道或群组选项卡显示在 Teams 移动客户端上,则 setConfig()
配置必须具有 websiteUrl
的值。 有关详细信息,请参阅移动设备上的选项卡指南。