Схема манифеста для Teams
В манифесте приложения Microsoft Teams описывается, как ваше приложение интегрируется с продуктом Microsoft Teams. Манифест приложения должен соответствовать схеме, размещенной по адресу https://developer.microsoft.com/json-schemas/teams/v1.16/MicrosoftTeams.schema.json
. Поддерживаются предыдущие версии 1.0, 1.1,...,1.15 и текущая версия 1.16 (в URL-адресе используется "v1.x").
Дополнительные сведения об изменениях в каждой версии, см. в разделе журнал изменений манифеста.
В следующей таблице перечислены версии TeamsJS и манифеста приложения в соответствии с различными сценариями приложений.
Версия TeamsJS | Версия манифеста приложения | Дальнейшие действия | |
---|---|---|---|
Приложения Teams, расширенные до Microsoft 365 или Outlook | TeamsJS начиная с версии 2.0 | 1.13 или более поздней версии | Придайте приложению Teams возможность запуска в Microsoft 365 или создайте новое приложение для Microsoft 365 |
Существующие приложения только для Teams | По возможности обновите TeamsJS до версии 2.0 (версия 1.12 все еще поддерживается*) | 1.12 | Изучите обратную совместимость TeamsJS и обновите TeamsJS до версии 2.0 |
Новые приложения только для Teams | TeamsJS начиная с версии 2.0 | 1.12 | Создание нового приложения Teams с помощью "Инструментов Teams" |
*Используйте последнюю версию TeamsJS (версии 2.0 или более поздней версии), когда это возможно, чтобы использовать последние улучшения и поддержку новых функций, включая приложения только для Teams. TeamsJS версии 1.12 по-прежнему поддерживается, однако новые функции или улучшения не будут добавлены. Схемы 1.12 и 1.13 в противном случае одинаковы. Дополнительные сведения см. в статье Библиотека TeamsJS.
Ниже приведен пример схемы манифеста.
Пример манифеста
{
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.16/MicrosoftTeams.schema.json",
"manifestVersion": "1.16",
"version": "1.0.0",
"id": "%MICROSOFT-APP-ID%",
"localizationInfo": {
"defaultLanguageTag": "en-us",
"additionalLanguages": [
{
"languageTag": "es-es",
"file": "en-us.json"
}
]
},
"developer": {
"name": "Publisher Name",
"websiteUrl": "https://example.com/",
"privacyUrl": "https://example.com/privacy",
"termsOfUseUrl": "https://example.com/app-tos",
"mpnId": "1234567890"
},
"name": {
"short": "Name of your app (<=30 chars)",
"full": "Full name of app, if longer than 30 characters (<=100 chars)"
},
"description": {
"short": "Short description of your app (<= 80 chars)",
"full": "Full description of your app (<= 4000 chars)"
},
"icons": {
"outline": "A relative path to a transparent .png icon — 32px X 32px",
"color": "A relative path to a full color .png icon — 192px X 192px"
},
"accentColor": "A valid HTML color code.",
"configurableTabs": [
{
"configurationUrl": "https://contoso.com/teamstab/configure",
"scopes": [
"team",
"groupChat"
],
"canUpdateConfiguration": true,
"context": [
"channelTab",
"privateChatTab",
"meetingChatTab",
"meetingDetailsTab",
"meetingSidePanel",
"meetingStage"
],
"sharePointPreviewImage": "Relative path to a tab preview image for use in SharePoint — 1024px X 768",
"supportedSharePointHosts": [
"sharePointFullPage",
"sharePointWebPart"
]
}
],
"staticTabs": [
{
"entityId": "unique Id for the page entity",
"scopes": [
"personal"
],
"context": [
"personalTab",
"channelTab"
],
"name": "Display name of tab",
"contentUrl": "https://contoso.com/content (displayed in Teams canvas)",
"websiteUrl": "https://contoso.com/content (displayed in web browser)",
"searchUrl": "https://contoso.com/content (displayed in web browser)"
}
],
"bots": [
{
"botId": "%MICROSOFT-APP-ID-REGISTERED-WITH-BOT-FRAMEWORK%",
"scopes": [
"team",
"personal",
"groupChat"
],
"needsChannelSelector": false,
"isNotificationOnly": false,
"supportsFiles": true,
"supportsCalling": false,
"supportsVideo": true,
"commandLists": [
{
"scopes": [
"team",
"groupChat"
],
"commands": [
{
"title": "Command 1",
"description": "Description of Command 1"
},
{
"title": "Command 2",
"description": "Description of Command 2"
}
]
},
{
"scopes": [
"personal",
"groupChat"
],
"commands": [
{
"title": "Personal command 1",
"description": "Description of Personal command 1"
},
{
"title": "Personal command N",
"description": "Description of Personal command N"
}
]
}
]
}
],
"connectors": [
{
"connectorId": "GUID-FROM-CONNECTOR-DEV-PORTAL%",
"scopes": [
"team"
],
"configurationUrl": "https://contoso.com/teamsconnector/configure"
}
],
"composeExtensions": [
{
"canUpdateConfiguration": true,
"botId": "%MICROSOFT-APP-ID-REGISTERED-WITH-BOT-FRAMEWORK%",
"commands": [
{
"id": "exampleCmd1",
"title": "Example Command",
"type": "query",
"context": [
"compose",
"commandBox"
],
"description": "Command Description; e.g., Search on the web",
"initialRun": true,
"fetchTask": false,
"parameters": [
{
"name": "keyword",
"title": "Search keywords",
"inputType": "text",
"description": "Enter the keywords to search for",
"value": "Initial value for the parameter",
"choices": [
{
"title": "Title of the choice",
"value": "Value of the choice"
}
]
}
]
},
{
"id": "exampleCmd2",
"title": "Example Command 2",
"type": "action",
"context": [
"message"
],
"description": "Command Description; e.g., Add a customer",
"initialRun": true,
"fetchTask": false ,
"parameters": [
{
"name": "custinfo",
"title": "Customer name",
"description": "Enter a customer name",
"inputType": "text"
}
]
},
{
"id": "exampleCmd3",
"title": "Example Command 3",
"type": "action",
"context": [
"compose",
"commandBox",
"message"
],
"description": "Command Description; e.g., Add a customer",
"fetchTask": false,
"taskInfo": {
"title": "Initial dialog title",
"width": "Dialog width",
"height": "Dialog height",
"url": "Initial webview URL"
}
}
],
"messageHandlers": [
{
"type": "link",
"value": {
"domains": [
"mysite.someplace.com",
"othersite.someplace.com"
],
"supportsAnonymizedPayloads": false
}
}
]
}
],
"permissions": [
"identity",
"messageTeamMembers"
],
"devicePermissions": [
"geolocation",
"media",
"notifications",
"midi",
"openExternal"
],
"validDomains": [
"contoso.com",
"mysite.someplace.com",
"othersite.someplace.com"
],
"webApplicationInfo": {
"id": "AAD App ID",
"resource": "Resource URL for acquiring auth token for SSO"
},
"authorization": {
"permissions": {
"resourceSpecific": [
{
"type": "Application",
"name": "ChannelSettings.Read.Group"
},
{
"type": "Delegated",
"name": "ChannelMeetingParticipant.Read.Group"
}
]
}
},
"showLoadingIndicator": false,
"isFullScreen": false,
"activities": {
"activityTypes": [
{
"type": "taskCreated",
"description": "Task created activity",
"templateText": "<team member> created task <taskId> for you"
},
{
"type": "userMention",
"description": "Personal mention activity",
"templateText": "<team member> mentioned you"
}
]
},
"defaultBlockUntilAdminAction": true,
"publisherDocsUrl": "https://website.com/app-info",
"defaultInstallScope": "meetings",
"defaultGroupCapability": {
"meetings": "tab",
"team": "bot",
"groupChat": "bot"
},
"configurableProperties": [
"name",
"shortDescription",
"longDescription",
"smallImageUrl",
"largeImageUrl",
"accentColor",
"developerUrl",
"privacyUrl",
"termsOfUseUrl"
],
"subscriptionOffer": {
"offerId": "publisherId.offerId"
},
"meetingExtensionDefinition": {
"scenes": [
{
"id": "9082c811-7e6a-4174-8173-6ccd57d377e6",
"name": "Getting started sample",
"file": "scenes/sceneMetadata.json",
"preview": "scenes/scenePreview.png",
"maxAudience": 15,
"seatsReservedForOrganizersOrPresenters": 0
},
{
"id": "afeaed22-f89b-48e1-98b4-46a514344e4a",
"name": "Sample-1",
"file": "scenes/sceneMetadata.json",
"preview": "scenes/scenePreview.png",
"maxAudience": 15,
"seatsReservedForOrganizersOrPresenters": 3
}
]
}
}
Схема определяет следующие свойства:
$schema
Необязательно, но рекомендуется — строка
URL-адрес со ссылкой на схему JSON для манифеста (https://).
manifestVersion
Обязательно — строка
Версия схемы манифеста, используемая этим манифестом. Используйте 1.13
, чтобы включить поддержку приложений Teams в Outlook и приложении Microsoft 365; используйте 1.12
(или более ранние версии) для приложений, доступных только для Teams.
version
Обязательно — строка
Версия определенного приложения. При обновлении каких-либо данных в манифесте необходимо также увеличить номер версии. За счет этого при установке нового манифеста он заменит прежний, а пользователь получит новую функциональность. При отправке этого приложения в магазин необходимо повторно отправить и проверить новый манифест. Приложение автоматически получит новый обновленный манифест через несколько часов после утверждения манифеста.
Если приложение запрашивает изменение разрешений, пользователям будет предложено обновить приложение и заново предоставить ему согласие.
Строка версии должна соответствовать стандарту semver(ОСНОВНАЯ_ВЕРСИЯ.ДОПОЛНИТЕЛЬНАЯ_ВЕРСИЯ.ИСПРАВЛЕНИЕ).
Идентификатор
Обязательно — идентификатор приложения Майкрософт
Это уникальный идентификатор, сформированный для приложения корпорацией Майкрософт. У вас есть идентификатор, если бот зарегистрирован с помощью Microsoft Bot Framework. У вас есть идентификатор, если веб-приложение вашей вкладке уже входит в систему с учетной записью Майкрософт. Здесь необходимо ввести этот идентификатор. В противном случае необходимо создать новый идентификатор на портале регистрации приложений Майкрософт. При добавлении бота используйте этот же идентификатор.
Идентификатор, хранящийся в Teams Администратор Center, является идентификатором внешнего приложения и отображается в трассировках как ExternalID.
Примечание.
Если вы отправляете обновление для существующего приложения в AppSource, то нельзя изменять идентификатор в манифесте.
developer
Обязательно — объект
Указывает сведения о вашей компании. Для приложений, отправленных в магазин Teams, эти значения должны совпадать с данными в описании в магазине. Дополнительные сведения см. в статье правила публикации в магазине Teams.
Имя | Максимальный размер | Обязательный | Описание |
---|---|---|---|
name |
32 символа | ✔️ | Отображаемое имя для разработчика. |
websiteUrl |
2048 символов | ✔️ | URL-адрес веб-сайта разработчика (https://). По этой ссылке пользователи должны переходить на целевую страницу вашей компании или конкретного продукта. |
privacyUrl |
2048 символов | ✔️ | URL-адрес политики конфиденциальности разработчика (https://). |
termsOfUseUrl |
2048 символов | ✔️ | URL-адрес условий использования разработчика (https://). |
mpnId |
10 символов | Необязательно — идентификатор партнерской организации, создавшей приложение, в Microsoft Partner Network. |
name
Обязательно — объект
Имя интерфейса приложения, отображаемое для пользователей в интерфейсе Teams. Для приложений, отправляемых в AppSource, эти значения должны совпадать с данными в записи AppSource. Значения short
и full
должны отличаться.
Имя | Максимальный размер | Обязательный | Описание |
---|---|---|---|
short |
30 символов | ✔️ | Краткое отображаемое имя приложения. |
full |
100 символов | ✔️ | Полное имя приложения. Используется, если длина полного имени приложения превышает 30 символов. |
description
Обязательно — объект
Описывает приложение для пользователей. Для приложений, отправляемых в AppSource, эти значения должны совпадать с данными в записи AppSource.
Убедитесь, что описание включает возможности приложения и его назначение для потенциальных клиентов. В полном описании также необходимо указать, нужно ли использовать внешнюю учетную запись. Значения short
и full
должны отличаться. Краткое описание не может повторяться в длинном описании и не должно содержать другое имя приложения.
Имя | Максимальный размер | Обязательный | Описание |
---|---|---|---|
short |
80 символов | ✔️ | Краткое описание возможностей приложения. Используется, когда доступно ограниченное пространство. |
full |
4000 символов | ✔️ | Полное описание приложения. |
localizationInfo
Необязательно — объект
Позволяет указать язык по умолчанию и указатели на другие языковые файлы. Дополнительные сведения см. в разделе локализация.
Имя | Максимальный размер | Обязательный | Описание |
---|---|---|---|
defaultLanguageTag |
✔️ | Тег язык строк в этом файле манифеста верхнего уровня. |
localizationInfo.additionalLanguages
Массив объектов, указывающих дополнительные переводы.
Имя | Максимальный размер | Обязательный | Описание |
---|---|---|---|
languageTag |
✔️ | Тег языка строк в предоставленном файле. | |
file |
✔️ | Относительный путь к файлу .JSON с переведенными строками. |
icons
Обязательно — объект
Значки, используемые в приложении Teams. Файлы значков должны быть включены в отправляемый пакет. Дополнительные сведения см. в статье Значки.
Имя | Максимальный размер | Обязательный | Описание |
---|---|---|---|
outline |
32 x 32 пикселя | ✔️ | Относительный путь к прозрачному значку контура размером 32x32 пикселя в формате PNG. |
color |
192 x 192 пикселя | ✔️ | Относительный путь к полноцветному значку размером 192x192 пикселя в формате PNG. |
accentColor
Обязательно — шестнадцатеричный код цвета HTML
Цвет для использования и в качестве фона для цветовых значков.
Значение должно быть допустимым шестнадцатеричным кодом цвета HTML и должно начинаться с "#". Пример: #4464ee
.
configurableTabs
Необязательно — массив
Используется, когда в интерфейсе приложения есть интерфейс вкладки канала команды, который требует дополнительной настройки перед добавлением. Настраиваемые вкладки поддерживаются только в областях team
и groupChat
. Одни и те же вкладки можно настраивать несколько раз. Но определить их в манифесте можно только один раз.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
configurationUrl |
string | 2048 символов | ✔️ | URL-адрес, используемый при настройке вкладки (https://). |
scopes |
массив элементов enum | 2 | ✔️ | В настоящее время настраиваемые вкладки поддерживают только области team и groupChat . |
canUpdateConfiguration |
Boolean | Значение, указывающее, может ли пользователь обновлять конфигурацию вкладки после ее создания. Значение по умолчанию: true. | ||
meetingSurfaces |
массив элементов enum | 2 | Набор областей meetingSurfaceItem , в которых поддерживается вкладка. По умолчанию: [sidepanel, stage]. |
|
context |
массив элементов enum | 8 | Набор областей contextItem , в которых поддерживается вкладка. По умолчанию: [personalTab, channelTab, privateChatTab, meetingChatTab, meetingDetailsTab, meetingStage, callingSidepanel]. |
|
sharePointPreviewImage |
string | 2048 | Относительный путь к изображению предварительного просмотра вкладок для использования в SharePoint. Размер: 1024x768. | |
supportedSharePointHosts |
массив элементов enum | 2 | Определяет, каким образом вкладка становится доступна в SharePoint. Параметры: sharePointFullPage и sharePointWebPart . |
staticTabs
Необязательно — массив
Это набор вкладок, который можно закрепить по умолчанию без добавления их вручную пользователем. Статические вкладки,объявляемые в области personal
, всегда закрепляются в личном интерфейсе приложения. Статические вкладки,объявляемые в области team
, сейчас не поддерживаются.
Этот элемент — массив (не более 16 элементов) со всеми элементами типа object
. Этот блок требуется только для решений со статическими вкладками.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
entityId |
string | 64 символа | ✔️ | Уникальный идентификатор сущности, отображаемый на вкладке. |
name |
string | 128 символов | Отображаемое имя вкладки в интерфейсе канала. | |
contentUrl |
string | URL-адрес, указывающий на пользовательский интерфейс объекта для отображения на холсте Microsoft Teams (https://). | ||
contentBotId |
string | Идентификатор приложения Майкрософт, указанный для бота на портале Bot Framework. | ||
websiteUrl |
string | URL-адрес, используемый, если пользователь выбирает просмотр в браузере (https://). | ||
searchUrl |
string | URL-адрес, используемый для поисковых запросов пользователя (https://). | ||
scopes |
массив элементов enum | 3 | ✔️ | В настоящее время статические вкладки поддерживаются только для области personal , поэтому их можно подготовить только в личном интерфейсе. |
context |
массив элементов enum | 8 | Набор областей contextItem , в которых поддерживается вкладка. По умолчанию: [personalTab, channelTab, privateChatTab, meetingChatTab, meetingDetailsTab, meetingStage, meetingSidepanel, teamLevelApp]. |
Примечание.
Функция searchUrl недоступна сторонним разработчикам. Если на вкладках требуется контекстно-зависимая информация для отображения соответствующего содержимого или для запуска потока проверки подлинности, см. статью Получение контекста для вкладок Microsoft Teams.
bots
Необязательно — массив
Определяет решение бота, а также дополнительные сведения, такие как свойства команды по умолчанию.
Элемент представляет собой массив (не более одного элемента— в настоящее время на приложение разрешен только один бот) со всеми элементами типа object
. Этот блок требуется только для решений, предоставляющих возможности бота.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
botId |
string | 64 символа | ✔️ | Уникальный идентификатор приложения Майкрософт для бота, зарегистрированный в Bot Framework. Этот идентификатор может совпадать с общим идентификатором приложения. |
scopes |
массив элементов enum | 3 | ✔️ | Указывает, предлагает ли бот функции в контексте канала в team , в групповом чате (groupChat ) или функции, ограниченные только отдельным пользователем (personal ). Эти параметры не являются исключающими. |
needsChannelSelector |
Boolean | Описывает, использует ли бот подсказки пользователя для добавления бота в определенный канал. По умолчанию: false |
||
isNotificationOnly |
Логический | Указывает, является ли бот односторонним и только для уведомлений, в отличие от бота для беседы. По умолчанию: false |
||
supportsFiles |
Логический | Указывает, поддерживает ли бот возможность отправки и скачивания файлов в личном чате. По умолчанию: false |
||
supportsCalling |
Boolean | Значение, указывающее, поддерживает ли бот голосовые звонки. ВАЖНО. Это свойство в настоящее время является экспериментальным. Экспериментальные свойства могут быть неполными, а также могут быть изменены до полной доступности. Это свойство предоставлено только для тестирования и исследования, его не следует использовать в рабочих приложениях. По умолчанию: false |
||
supportsVideo |
Boolean | Значение, указывающее, поддерживает ли бот видеозвонки. ВАЖНО. Это свойство в настоящее время является экспериментальным. Экспериментальные свойства могут быть неполными, а также могут быть изменены до полной доступности. Это свойство предоставлено только для тестирования и исследования, его не следует использовать в рабочих приложениях. По умолчанию: false |
bots.commandLists
Список команд, которые ваш бот может рекомендовать пользователям. Объект — массив (не более двух элементов) со всеми элементами типа object
; необходимо определить отдельный список команд для каждой области, поддерживаемой ботом. Подробнее см. в статье Меню ботов.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
items.scopes |
массив элементов enum | 3 | ✔️ | Указывает область, для которой действует список команд. Возможны значения team , personal и groupChat . |
items.commands |
массив объектов | 10 | ✔️ | Массив команд, поддерживаемых ботом:title : имя команды бота (строка, 32)description : простое описание или пример синтаксиса команды и ее аргументов (строка, 128). |
bots.commandLists.commands
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
title | string | 32 | ✔️ | Имя команды бота. |
description | string | 128 символов | ✔️ | Простое текстовое описание или пример синтаксиса команды и ее аргументов. |
connectors
Необязательно — массив
Блок connectors
определяет карта соединителя для Группы Microsoft 365 приложения.
Объект — массив (не более одного элемента) со всеми элементами типа object
. Этот блок необходим только для решений, предоставляющих соединители.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
configurationUrl |
string | 2048 символов | ✔️ | URL-адрес, используемый при настройке соединителя (https://). |
scopes |
массив элементов enum | 1 | ✔️ | Указывает, предоставляет ли соединитель возможности в контексте канала в team или только для отдельных пользователей (personal ). В настоящее время поддерживается только область team . |
connectorId |
string | 64 символа | ✔️ | Уникальный идентификатор соединителя, соответствующий его идентификатору на информационной панели разработчиков соединителей. |
composeExtensions
Необязательно — массив
Определяет расширение для обмена сообщениями для приложения.
Примечание.
Название функции было изменено с ''расширение для составления сообщений'' на ''расширение для обмена сообщениями'' в ноябре 2017 г., но имя в манифесте осталось прежним, чтобы существующие расширения продолжали работать.
Этот элемент — массив (не более одного элемента) со всеми элементами типа object
. Этот блок необходим только для решений, предоставляющих расширение для сообщений.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
botId |
string | 64 | ✔️ | Уникальный идентификатор приложения Microsoft для бота, поддерживающего расширение для обмена сообщениями, в соответствии с регистрацией в Bot Framework. Этот идентификатор может совпадать с общим идентификатором приложения. |
commands |
массив объектов | 10 | ✔️ | Массив команд, поддерживаемых расширением для обмена сообщениями. |
canUpdateConfiguration |
Логическое | Значение , указывающее, может ли пользователь обновить конфигурацию расширения сообщений. По умолчанию: false. | ||
messageHandlers |
массив объектов | 5 | Список обработчиков, которые позволяют вызывать приложение при выполнении определенных условий. | |
messageHandlers.type |
string | Тип обработчика сообщений. Должно быть задано значение "link" . |
||
messageHandlers.value.domains |
массив строк | 2048 символов | Массив доменов, на которые может зарегистрироваться обработчик сообщений ссылок. | |
messageHandlers.value.supportsAnonymizedPayloads |
Boolean | Логическое значение, указывающее, поддерживает ли обработчик сообщений связи приложения анонимный поток вызова. Значение по умолчанию: false. |
composeExtensions.commands
Расширение для обмена сообщениями должно объявить одну или несколько, но не более 10 команд. Каждая команда отображается в Microsoft Teams как потенциальное взаимодействие с точки входа на основе пользовательского интерфейса.
Каждый элемент команды представляет собой объект со следующей структурой:
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
id |
string | 64 символа | ✔️ | ИД команды. |
title |
string | 32 символа | ✔️ | Понятное имя команды. |
type |
string | 64 символа | Тип команды. Либо query , либо action . По умолчанию: query. |
|
description |
string | 128 символов | Описание назначения команды, которое отображается для пользователей. | |
initialRun |
Boolean | Логическое значение указывает, выполняется ли команда изначально без параметров. Значение по умолчанию: false. | ||
context |
массив строк | 3 | Определяет, откуда можно вызвать расширение сообщения. Любое сочетание compose , commandBox и message . Значение по умолчанию: ["compose","commandBox"] . |
|
fetchTask |
Boolean | Логическое значение, указывающее, должен ли он получать модуль задачи динамически. Значение по умолчанию: false. | ||
taskInfo |
объект | Укажите модуль задачи для предварительной загрузки при использовании команды расширения для обмена сообщениями. | ||
taskInfo.title |
string | 64 символа | Начальное название диалогового окна | |
taskInfo.width |
string | Ширина диалогового окна — количество пикселей или макет по умолчанию, например "large", "medium" или "small". | ||
taskInfo.height |
string | Высота диалогового окна — количество пикселей или макет по умолчанию, например "large", "medium" или "small". | ||
taskInfo.url |
string | Начальный URL-адрес веб-представления. | ||
parameters |
массив объекта | 5 элементов | ✔️ | Список параметров, которые принимает команда. Минимум: 1; максимум: 5. |
parameters.name |
string | 64 символа | ✔️ | Имя параметра в том виде, в каком оно отображается в клиенте. Имя параметра включено в запрос пользователя. |
parameters.title |
string | 32 символа | ✔️ | Понятное название параметра. |
parameters.description |
string | 128 символов | Понятное описание назначения параметра. | |
parameters.value |
string | 512 символов | Начальное значение параметра. В настоящее время значение не поддерживается. | |
parameters.inputType |
string | 128 символов | Определяет тип элемента управления, отображаемого в модуле задач для fetchTask: false . Один из text, textarea, number, date, time, toggle, choiceset . |
|
parameters.choices |
массив объектов | 10 элементов | Варианты для choiceset . Используйте, только parameter.inputType равно choiceset . |
|
parameters.choices.title |
string | 128 символов | ✔️ | Название выбора. |
parameters.choices.value |
string | 512 символов | ✔️ | Значение выбора. |
permissions
Необязательно — массив строк
Массив элементов string
, указывающий, какие разрешения запрашивает приложения, что дает возможность конечным пользователям определить, что именно делает расширение. Следующие параметры не являются взаимоисключающими:
identity
Требуются сведения удостоверения пользователя.messageTeamMembers
Требуется разрешение на отправку прямых сообщений участникам группы.
Если изменить эти разрешения при обновлении приложения, пользователям потребуется вновь согласиться на предоставление этих разрешений при запуске обновленного приложения. Дополнительные сведения см. в статье Обновление приложения.
Примечание.
Разрешения теперь являются нерекомендуемыми.
devicePermissions
Необязательно — массив строк
Предоставляет собственные функции на устройстве пользователя, к которому приложение запрашивает доступ. Доступные варианты:
geolocation
media
notifications
midi
openExternal
validDomains
Необязательно кроме случаев, когда указано Обязательно.
Список допустимых доменов для веб-сайтов, которые приложение может загружать в клиенте Teams. Списки доменов могут включать подстановочные знаки, например *.example.com
. Допустимый домен соответствует только одному сегменту домена. Если нужно соответствие a.b.example.com
, то используйте *.*.example.com
. Если конфигурация вкладки или пользовательский интерфейс контента переходит на любой другой домен, отличный от конфигурации вкладки, то этот домен нужно указать здесь.
Не включайте домены поставщиков удостоверений, которые необходимо поддерживать в приложении. Например, для проверки подлинности с помощью идентификатора Google необходимо перенаправить на accounts.google.com, однако не следует включать accounts.google.com в validDomains[]
.
Приложения Teams, которым для правильной работы требуются собственные URL-адреса SharePoint, включают "{teamsitedomain}" в список допустимых доменов.
Важно!
Не добавляйте домены, которые находятся вне вашего контроля, напрямую или с помощью подстановочных знаков (*). Например, *.yoursite.com является допустимым, но *.onmicrosoft.com является недопустимым, так как он не находится под вашим контролем.
При использовании подстановочных знаков применяются следующие правила:
- Если сегмент поддомена содержит подстановочный знак, он должен быть единственным символом в сегменте.
- Любой сегмент, предшествующий сегменту с подстановочными знаками, также должен быть подстановочным.
Например, *.*.domain.com является допустимым, но foo.*.myteam.domain.com недопустим.
Объект — массив со всеми элементами типа string
.
webApplicationInfo
Необязательно — объект
Укажите идентификатор приложения Azure Active Directory и сведения Microsoft Graph, чтобы помочь пользователям легко входить в приложение. Если приложение зарегистрировано в Microsoft Azure Active Directory (Azure AD), вы должны предоставить ID этого приложения. Администраторы могут проверять разрешения и предоставлять согласие в центре администрирования Teams.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
id |
string | 36 символов | ✔️ | Идентификатор приложения в Azure Active Directory. Этот идентификатор должен быть глобальным уникальным идентификатором. |
resource |
string | 2048 символов | ✔️ | URL-адрес ресурса приложения для получения маркера проверки подлинности для единого входа. ПРИМЕЧАНИЕ: Если вы не используете единый вход, введите фиктивное строковое значение в этом поле в манифест приложения, например, https://example чтобы избежать ответа об ошибке. |
graphConnector
Необязательно — объект
Укажите конфигурацию соединителя Graph приложения. Если он присутствует, необходимо также указать webApplicationInfo.id .
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
notificationUrl |
string | 2048 символов | ✔️ | URL-адрес, по которому должны отправляться уведомления Graph-соединителя для приложения. |
showLoadingIndicator
Необязательно — логическое значение
Указывает, следует ли отображать индикатор загрузки при загрузке приложения или вкладки. Значение по умолчанию: false.
Примечание.
- Если в манифесте приложения выбрано
showLoadingIndicator
значение true, для правильной загрузки страницы измените страницы содержимого вкладок и модулей задач, как описано в разделе Отображение собственного индикатора загрузки . - Если не изменить страницы содержимого вкладки, приложение вкладки не загружается и отображает ошибку
There was a problem reaching this app
.
isFullScreen
Необязательно — логическое значение
Указывает, отображается ли личное приложение без панели заголовка вкладки (что означает полноэкранный режим). Значение по умолчанию: false.
Примечание.
isFullScreen
работает только с приложениями, опубликованными в вашей организации. Загруженные и опубликованные сторонние приложения не могут использовать это свойство (оно игнорируется).isFullScreen=true
удаляет предоставленную Teams панель заголовка и заголовок из личных приложений и диалоговых окон модулей задач.
activities
Необязательно — объект
Определите свойства, которые приложение использует для публикаций в ленте новостей пользователя.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
activityTypes |
массив объектов | 128 элементов | Укажите типы действий, которые приложение может публиковать в канале новостей пользователей. |
activities.activityTypes
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
type |
string | 32 символа | ✔️ | Тип уведомления. См. ниже. |
description |
string | 128 символов | ✔️ | Краткое описание уведомления. См. ниже. |
templateText |
string | 128 символов | ✔️ | Пример: "Пользователь {actor} создал для вас задачу {taskId}" |
{
"activities":{
"activityTypes":[
{
"type":"taskCreated",
"description":"Task Created Activity",
"templateText":"{actor} created task {taskId} for you"
},
{
"type":"teamMention",
"description":"Team Mention Activity",
"templateText":"{actor} mentioned team"
},
{
"type":"channelMention",
"description":"Channel Mention Activity",
"templateText":"{actor} mentioned channel"
},
{
"type":"userMention",
"description":"Personal Mention Activity",
"templateText":"{actor} mentioned user"
},
{
"type":"calendarForward",
"description":"Forwarding a Calendar Event",
"templateText":"{actor} sent user an invite on behalf of {eventOwner}"
},
{
"type":"calendarForward",
"description":"Forwarding a Calendar Event",
"templateText":"{actor} sent user an invite on behalf of {eventOwner}"
},
{
"type":"creatorTaskCreated",
"description":"Created Task Created",
"templateText":"The Creator created task {taskId} for you"
}
]
}
}
defaultInstallScope
Необязательно — строка
Указывает область установки, заданную для этого приложения по умолчанию. Когда пользователь попытается добавить приложение, заданная область будет одним из вариантов, отображаемых на кнопке. Доступные варианты:
personal
team
groupChat
meetings
defaultGroupCapability
Необязательно — объект
Когда будет выбрана область установки группы, этот параметр будет определять емкость по умолчанию при установки приложения пользователем. Доступные варианты:
team
groupChat
meetings
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
team |
string | Если выбрана область установки team , в этом поле указывается доступная по умолчанию емкость. Варианты: tab , bot или connector . |
||
groupChat |
string | Если выбрана область установки groupChat , в этом поле указывается доступная по умолчанию емкость. Варианты: tab , bot или connector . |
||
meetings |
string | Если выбрана область установки meetings , в этом поле указывается доступная по умолчанию емкость. Варианты: tab , bot или connector . |
configurableProperties
Необязательно — массив
Блок configurableProperties
определяет свойства приложений, доступные для настройки администраторам Teams. Дополнительные сведения см. в разделе включение настройки приложения. Функция настройки приложения не поддерживается в пользовательских приложениях и в бизнес-приложениях.
Примечание.
Необходимо определить хотя бы одно свойство. В этом блоке можно определить не более 9 свойств.
Можно определить любое из следующих свойств:
- name: отображаемое имя приложения.
- shortDescription: краткое описание приложения.
- longDescription: длинное описание приложения.
- smallImageUrl: значок структуры приложения.
- largeImageUrl: значок цвета приложения.
- accentColor: используемый цвет и фон для значков контура.
- developerUrl: URL-адрес HTTPS веб-сайта разработчика.
- privacyUrl: URL-адрес HTTPS политики конфиденциальности разработчика.
- termsOfUseUrl: URL-адрес HTTPS условий использования разработчика.
supportedChannelTypes
Необязательно — массив
Включает приложение в нестандартных каналах. Если приложение поддерживает область группы и это свойство определено, то Teams соответствующим образом включает ваше приложение в каждом типе канала. В настоящее время поддерживаются частные и общие каналы.
Примечание.
- Если приложение поддерживает область группы, оно работает в стандартных каналах независимо от значений, определенных в этом свойстве.
- Для правильной работы ваше приложение может учитывать уникальные свойства каждого типа канала. Чтобы включить вкладку для частных и общих каналов, см. статью Извлечение контекста в частных каналах и получение контекста в общих каналах.
defaultBlockUntilAdminAction
Необязательно — логическое значение
Если для свойства defaultBlockUntilAdminAction
установлено значение true, приложение по умолчанию будет скрыто от пользователей, пока администратор не разрешит его. Если установлено значение true, приложение будет скрыто для всех клиентов и конечных пользователей. Администраторы клиента видят приложение в центре администрирования Teams и могут разрешить или заблокировать приложение. Значение по умолчанию — false. Дополнительные сведения о блокировке приложений по умолчанию см. в статье Блокировка приложений по умолчанию для пользователей до утверждения администратором.
publisherDocsUrl
Необязательно — строка
Максимальный размер — 128 символов
publisherDocsUrl
— URL-адрес (HTTPS) информационной страницы, на которой администраторы могут получить рекомендации перед скачиванием приложение, которое по умолчанию заблокировано. На этой странице также можно указать инструкции или сведения о приложении, полезные для администратора клиента.
subscriptionOffer
Необязательно — объект
Указывает предложение SaaS, связанное с приложением.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
offerId |
string | 2048 символов | ✔️ | Уникальный идентификатор, включающий идентификатор Publisher и идентификатор предложения, которые можно найти в Центре партнеров. Эта строка должна быть в формате: publisherId.offerId . |
meetingExtensionDefinition
Необязательно — объект
Укажите определение расширения собрания. Дополнительные сведения см. в статье Настраиваемые сцены режима "Вместе" в Teams.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
scenes |
массив объектов | 5 элементов | Сцены, поддерживаемые собранием. | |
supportsStreaming |
Логическое | Значение, указывающее, может ли приложение передавать звуковое и видеосодержимое собрания в конечную точку по протоколу RTMP. Значение по умолчанию — false. | ||
supportsAnonymousGuestUsers |
Boolean | Значение типа , указывающее, поддерживает ли приложение доступ для анонимных пользователей. Значение по умолчанию — false. |
meetingExtensionDefinition.scenes
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
id |
✔️ | Уникальный идентификатор сцены. Этот идентификатор должен быть глобальным уникальным идентификатором. | ||
name |
string | 128 символов | ✔️ | Имя сцены. |
file |
✔️ | Относительный путь к файлу JSON метаданных сцен. | ||
preview |
✔️ | Относительный путь к файлу значка предварительного просмотра PNG сцен. | ||
maxAudience |
integer | 50 | ✔️ | Максимальное количество аудиторий, поддерживаемых в сцене. |
seatsReservedForOrganizersOrPresenters |
integer | 50 | ✔️ | Количество мест, зарезервированных для организаторов или докладчиков. |
авторизация
Необязательно — объект
Примечание.
Если свойству manifestVersion
присвоено значение 1.12, свойство авторизации несовместимо с более ранними версиями манифеста (версия 1.11 или более ранняя). Авторизация поддерживается для манифеста версии 1.12.
Укажите и консолидируйте сведения об авторизации для приложения.
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
permissions |
Список разрешений, необходимых приложению для работы. |
authorization.permissions
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
resourceSpecific |
массив объектов | 16 элементов | Разрешения, защищающие доступ к данным на уровне экземпляров ресурсов. |
authorization.permissions.resourceSpecific
Имя | Тип | Максимальный размер | Обязательный | Описание |
---|---|---|---|---|
type |
string | ✔️ | Тип разрешения для определенного ресурса. Варианты: Application и Delegated . |
|
name |
string | 128 символов | ✔️ | Имя разрешения для определенного ресурса. Дополнительные сведения см. в разделе Разрешения приложений для конкретных ресурсов и Делегированные разрешения для конкретных ресурсов |
Разрешения приложений для конкретных ресурсов
Разрешения приложений позволяют приложению получать доступ к данным без необходимости входа пользователя. Сведения о разрешениях приложений см. в статье Согласие на использование конкретных ресурсов для MS Graph и MS BotSDK.
Делегированные разрешения для конкретных ресурсов
Делегированные разрешения позволяют приложению получать доступ к данным от имени вошедшего пользователя.
Делегированные разрешения на использование конкретных ресурсов для команд
Имя Описание ChannelMeetingParticipant.Read.Group
Позволяет приложению читать сведения об участниках, включая имя, роль, идентификатор, время присоединения и ухода, собрания канала, связанные с этой командой, от имени выполнившего вход пользователя. InAppPurchase.Allow.Group
Позволяет приложению отображать предложения в Marketplace в этой команде и совершать покупки в приложении от имени выполнившего вход пользователя. ChannelMeetingStage.Write.Group
Позволяет приложению отображать содержимое на этапе собрания в собраниях канала, связанных с этой командой, от имени выполнившего вход пользователя. LiveShareSession.ReadWrite.Group
Позволяет приложению создавать и синхронизировать сеансы Live Share для собраний, связанных с этой командой, а также получать доступ к связанной информации о реестре собрания, например роли участника собрания, от имени вошедшего пользователя. Делегированные разрешения на использование конкретных ресурсов для чатов или собраний
Имя Описание InAppPurchase.Allow.Chat
Позволяет приложению отображать предложения в Marketplace в этом чате и связанных собраниях и совершать покупки в приложении от имени выполнившего вход пользователя. MeetingStage.Write.Chat
Позволяет приложению отображать содержимое на этапе собрания в собраниях, связанных с этим чатом, от имени выполнившего вход пользователя. OnlineMeetingParticipant.Read.Chat
Позволяет приложению читать сведения об участниках, включая имя, роль, идентификатор, время присоединения и ухода, собрания, связанные с этим чатом, от имени выполнившего вход пользователя. OnlineMeetingParticipant.ToggleIncomingAudio.Chat
Позволяет приложению переключать входящий звук для участников собраний, связанных с этим чатом, от имени выполнившего вход пользователя. LiveShareSession.ReadWrite.Chat
Позволяет приложению создавать и синхронизировать сеансы Live Share для собраний, связанных с этим чатом, а также получать доступ к связанной информации о реестре собрания, например роли участника собрания, от имени пользователя, выполнившего вход. OnlineMeetingIncomingAudio.Detect.Chat
Позволяет приложению обнаруживать изменения в состоянии входящего звука на собраниях, связанных с этим чатом, от имени вошедшего пользователя. OnlineMeetingNotification.Send.Chat
Позволяет приложению отправлять уведомления о собраниях, связанных с чатом. Делегированные разрешения на использование конкретных ресурсов для пользователей
Имя Описание InAppPurchase.Allow.User
Позволяет приложению отображать предложения в Marketplace и совершать покупки в приложении от имени выполнившего вход пользователя.
Создание файла манифеста
Если у вашего приложения нет файла манифеста приложения Teams, его необходимо создать.
Чтобы создать файл манифеста приложения Teams:
- Используйте пример схемы манифеста для создания JSON-файла.
- Сохраните его в корневой папке проекта как
manifest.json
.
Ниже приведен пример схемы манифеста для приложения tab с включенным единым входом:
Примечание.
Пример содержимого манифеста, показанный здесь, предназначен только для приложения вкладки. В нем используются примеры значений для URI поддомена. Дополнительные сведения см. в примере схемы манифеста.
{
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.11/MicrosoftTeams.schema.json",
"manifestVersion": "1.12",
"version": "1.0.0",
"id": "{new GUID for this Teams app - not the Azure AD App ID}",
"developer": {
"name": "Microsoft",
"websiteUrl": "https://www.microsoft.com",
"privacyUrl": "https://www.microsoft.com/privacy",
"termsOfUseUrl": "https://www.microsoft.com/termsofuse"
},
"name": {
"short": "Teams Auth SSO",
"full": "Teams Auth SSO"
},
"description": {
"short": "Teams Auth SSO app",
"full": "The Teams Auth SSO app"
},
"icons": {
"outline": "outline.png",
"color": "color.png"
},
"accentColor": "#60A18E",
"staticTabs": [
{
"entityId": "auth",
"name": "Auth",
"contentUrl": "https://subdomain.example.com/Home/Index",
"scopes": [ "personal" ]
}
],
"configurableTabs": [
{
"configurationUrl": "https://subdomain.example.com/Home/Configure",
"canUpdateConfiguration": true,
"scopes": [
"team"
]
}
],
"permissions": [ "identity", "messageTeamMembers" ],
"validDomains": [
"{subdomain or ngrok url}"
],
"webApplicationInfo": {
"id": "{Azure AD AppId}",
"resource": "api://subdomain.example.com/{Azure AD AppId}"
}
}