Схема манифеста для Teams

В манифесте приложения Microsoft Teams описывается, как ваше приложение интегрируется с продуктом Microsoft Teams. Манифест приложения должен соответствовать схеме, размещенной по адресу https://developer.microsoft.com/json-schemas/teams/v1.15/MicrosoftTeams.schema.json. Поддерживаются предыдущие версии 1.0, 1.1,...,1.14 и текущая версия 1.15 (в 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 см. в разделе Клиентская библиотека JavaScript для Teams.

В следующем примере схемы показаны все варианты расширяемости:

Пример полного манифеста

{
    "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.15/MicrosoftTeams.schema.json",
    "manifestVersion": "1.15",
    "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://website.com/",
        "privacyUrl": "https://website.com/privacy",
        "termsOfUseUrl": "https://website.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 1 ✔️ В настоящее время настраиваемые вкладки поддерживают только области team и groupchat.
canUpdateConfiguration Boolean Значение, указывающее, может ли пользователь обновлять конфигурацию вкладки после ее создания. Значение по умолчанию: true.
context массив элементов enum 6 Набор областей contextItem, в которых поддерживается вкладка. По умолчанию: [channelTab, privateChatTab, meetingChatTab, meetingDetailsTab].
sharePointPreviewImage string 2048 Относительный путь к изображению предварительного просмотра вкладок для использования в SharePoint. Размер: 1024x768.
supportedSharePointHosts массив элементов enum 1 Определяет, каким образом вкладка становится доступна в SharePoint. Варианты: sharePointFullPage и sharePointWebPart

staticTabs

Необязательно — массив

Это набор вкладок, который можно закрепить по умолчанию без добавления их вручную пользователем. Статические вкладки,объявляемые в области personal, всегда закрепляются в личном интерфейсе приложения. Статические вкладки,объявляемые в области team, сейчас не поддерживаются.

Этот элемент — массив (не более 16 элементов) со всеми элементами типа object. Этот блок требуется только для решений со статическими вкладками.

Имя Тип Максимальный размер Обязательный Описание
entityId string 64 символа ✔️ Уникальный идентификатор сущности, отображаемый на вкладке.
name string 128 символов ✔️ Отображаемое имя вкладки в интерфейсе канала.
contentUrl string ✔️ URL-адрес, указывающий на пользовательский интерфейс объекта для отображения на холсте Microsoft Teams (https://).
websiteUrl string URL-адрес, используемый, если пользователь выбирает просмотр в браузере (https://).
searchUrl string URL-адрес, используемый для поисковых запросов пользователя (https://).
scopes массив элементов enum 1 ✔️ В настоящее время статические вкладки поддерживаются только для области personal, поэтому их можно подготовить только в личном интерфейсе.
context массив элементов enum 2 Набор областей contextItem, в которых поддерживается вкладка.

Примечание.

Функция 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 12 ✔️ Имя команды бота.
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 массив строк Массив доменов, на которые может зарегистрироваться обработчик сообщений ссылок.
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://notapplicable чтобы избежать ответа об ошибке.

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.

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 Позволяет приложению обнаруживать изменения в состоянии входящего звука на собраниях, связанных с этим чатом, от имени вошедшего пользователя.
  • Делегированные разрешения на использование конкретных ресурсов для пользователей

    Имя Описание
    InAppPurchase.Allow.User Позволяет приложению отображать предложения в Marketplace и совершать покупки в приложении от имени выполнившего вход пользователя.

Создание файла манифеста

Если у вашего приложения нет файла манифеста приложения Teams, его необходимо создать.

Чтобы создать файл манифеста приложения Teams:

  1. Используйте пример схемы манифеста для создания JSON-файла.
  2. Сохраните его в корневой папке проекта как 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://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}" 
}
} 

См. также