Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Doc Feature] [Requirements Targeting][3259380] #11018

Open
wants to merge 27 commits into
base: main
Choose a base branch
from

Conversation

erikadoyle
Copy link
Contributor

Public preview content for app manifest requirements targeting

@acrolinxatmsft1
Copy link
Collaborator

Acrolinx Scorecards

We currently enforce a minimum score of 80.

Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology:

Article Score Issues Scorecard Processed
msteams-platform/TOC.yml 97 17 link
msteams-platform/m365-apps/specify-runtime-requirements.md 86 1 link
msteams-platform/resources/schema/manifest-schema-dev-preview.md 80 174 link

More info about Acrolinx

Use the Acrolinx extension, or sidebar, in Visual Studio Code to check spelling, grammar, style, tone, clarity, and key terminology when you're creating or updating content. For more information, see Use the Visual Studio Code extension to run Acrolinx locally.

Copy link
Contributor

Learn Build status updates of commit 317662a:

✅ Validation status: passed

File Status Preview URL Details
msteams-platform/m365-apps/specify-runtime-requirements.md ✅Succeeded View
msteams-platform/resources/schema/manifest-schema-dev-preview.md ✅Succeeded View
msteams-platform/TOC.yml ✅Succeeded View

For more details, please refer to the build report.

For any questions, please:

@acrolinxatmsft1

This comment was marked as outdated.

Copy link
Contributor

Learn Build status updates of commit 11e2e5d:

✅ Validation status: passed

File Status Preview URL Details
msteams-platform/m365-apps/specify-runtime-requirements.md ✅Succeeded View
msteams-platform/resources/schema/manifest-schema-dev-preview.md ✅Succeeded View
msteams-platform/TOC.yml ✅Succeeded View

For more details, please refer to the build report.

For any questions, please:

Copy link

@ali-ms ali-ms left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added my comments. Overall great job Erika! Thx so much!

|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `element`| Object||✔️| Represents an individual app component that has a one-way runtime dependency on another component being loaded |
| `element.name`| String|| ✔️| The type of app component. Supported values: `bots`, `staticTabs`, `composeExtensions`, `configurableTabs`|
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

element.name should be enum type

Copy link
Contributor Author

@erikadoyle erikadoyle Jun 27, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm seeing String enum elsewhere in the manifest reference. I'll use that unless you have objections--

msteams-platform/m365-apps/specify-runtime-requirements.md Outdated Show resolved Hide resolved
msteams-platform/m365-apps/specify-runtime-requirements.md Outdated Show resolved Hide resolved
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall we include all validation rules for RT properties? Did we do that previously when a new property was added to the manifest that also has validation rules associated with it? Here're all the validation rules for RT properties - RT validation rules loop . Note that Anuj might add some more per his actual implementation, but the current ones in the loop should cover majority of it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Validation rules aren't typically documented in manifest reference, as most should (hopefully) be implied by property descriptions. But I did add this note to the RT article based on the validation rules you shared:

image

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I do think in RT's case we might want to explicitly mention some validation rules, as they might not be so straightforward. At least the following tree from my loop doc should be mentioned I think, as they're not easily implied from the property name or description:

  1. dependencies (element/commandIds) specified in oneWayDependenciesormutualDependencies` should exist in the manifest.
  2. [Updated from existing rule in schema to have more clarity] No cyclic dependencies in oneWayDependencies. ie (A -> B), (B -> A) or (A->B, B->C, C->A) will not be allowed. Developers should use mutualDependencies property for such scenarios.
  3. Same set of elements wil not be allowed to have mutualDependency and oneWayDependency. Example - oneWayDependency A -> B, and mutualDependency A<->B will not be allowed since A->B is redundant here.

@acrolinxatmsft1
Copy link
Collaborator

Acrolinx Scorecards

We currently enforce a minimum score of 80.

Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology:

Article Score Issues Scorecard Processed
msteams-platform/TOC.yml link ⚠️
msteams-platform/m365-apps/specify-runtime-requirements.md 83 25 link
msteams-platform/resources/schema/manifest-schema-dev-preview.md 80 171 link

More info about Acrolinx

Use the Acrolinx extension, or sidebar, in Visual Studio Code to check spelling, grammar, style, tone, clarity, and key terminology when you're creating or updating content. For more information, see Use the Visual Studio Code extension to run Acrolinx locally.

Copy link
Contributor

Learn Build status updates of commit ecb8dad:

✅ Validation status: passed

File Status Preview URL Details
msteams-platform/m365-apps/specify-runtime-requirements.md ✅Succeeded View
msteams-platform/resources/schema/manifest-schema-dev-preview.md ✅Succeeded View
msteams-platform/TOC.yml ✅Succeeded View

For more details, please refer to the build report.

For any questions, please:

@acrolinxatmsft1
Copy link
Collaborator

Acrolinx Scorecards

We currently enforce a minimum score of 80.

Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology:

Article Score Issues Scorecard Processed
msteams-platform/TOC.yml link ⚠️
msteams-platform/m365-apps/specify-runtime-requirements.md 83 25 link
msteams-platform/resources/schema/manifest-schema-dev-preview.md 80 171 link

More info about Acrolinx

Use the Acrolinx extension, or sidebar, in Visual Studio Code to check spelling, grammar, style, tone, clarity, and key terminology when you're creating or updating content. For more information, see Use the Visual Studio Code extension to run Acrolinx locally.

Copy link
Contributor

Learn Build status updates of commit c39253e:

✅ Validation status: passed

File Status Preview URL Details
msteams-platform/m365-apps/specify-runtime-requirements.md ✅Succeeded View
msteams-platform/resources/schema/manifest-schema-dev-preview.md ✅Succeeded View
msteams-platform/TOC.yml ✅Succeeded View

For more details, please refer to the build report.

For any questions, please:

@acrolinxatmsft1
Copy link
Collaborator

Acrolinx Scorecards

We currently enforce a minimum score of 80.

Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology:

Article Score Issues Scorecard Processed
msteams-platform/TOC.yml link ⚠️
msteams-platform/m365-apps/specify-runtime-requirements.md 83 25 link
msteams-platform/resources/schema/manifest-schema-dev-preview.md 80 171 link

More info about Acrolinx

Use the Acrolinx extension, or sidebar, in Visual Studio Code to check spelling, grammar, style, tone, clarity, and key terminology when you're creating or updating content. For more information, see Use the Visual Studio Code extension to run Acrolinx locally.

Copy link
Contributor

Learn Build status updates of commit 2ea0173:

✅ Validation status: passed

File Status Preview URL Details
msteams-platform/m365-apps/specify-runtime-requirements.md ✅Succeeded View
msteams-platform/resources/schema/manifest-schema-dev-preview.md ✅Succeeded View
msteams-platform/TOC.yml ✅Succeeded View

For more details, please refer to the build report.

For any questions, please:

@acrolinxatmsft1
Copy link
Collaborator

Acrolinx Scorecards

We currently enforce a minimum score of 80.

Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology:

Article Score Issues Scorecard Processed
msteams-platform/TOC.yml link ⚠️
msteams-platform/m365-apps/specify-runtime-requirements.md 83 25 link
msteams-platform/resources/schema/manifest-schema-dev-preview.md 80 172 link

More info about Acrolinx

Use the Acrolinx extension, or sidebar, in Visual Studio Code to check spelling, grammar, style, tone, clarity, and key terminology when you're creating or updating content. For more information, see Use the Visual Studio Code extension to run Acrolinx locally.

@erikadoyle erikadoyle closed this Jun 27, 2024
@erikadoyle erikadoyle reopened this Jun 27, 2024
Copy link
Contributor

Learn Build status updates of commit 922e2a6:

✅ Validation status: passed

File Status Preview URL Details
msteams-platform/m365-apps/specify-runtime-requirements.md ✅Succeeded View
msteams-platform/resources/schema/manifest-schema-dev-preview.md ✅Succeeded View
msteams-platform/TOC.yml ✅Succeeded View

For more details, please refer to the build report.

For any questions, please:

@acrolinxatmsft1
Copy link
Collaborator

Acrolinx Scorecards

We currently enforce a minimum score of 80.

Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology:

Article Score Issues Scorecard Processed
msteams-platform/TOC.yml link ⚠️
msteams-platform/m365-apps/specify-runtime-requirements.md 83 25 link
msteams-platform/resources/schema/manifest-schema-dev-preview.md 80 172 link

More info about Acrolinx

Use the Acrolinx extension, or sidebar, in Visual Studio Code to check spelling, grammar, style, tone, clarity, and key terminology when you're creating or updating content. For more information, see Use the Visual Studio Code extension to run Acrolinx locally.


> [!NOTE]
>
> The ability to specify Microsoft 365 host runtime requirements in the app manifest is currently in [public developer preview](../resources/schema/manifest-schema-dev-preview.md) and supported in Teams and Outlook mobile hosts.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
> The ability to specify Microsoft 365 host runtime requirements in the app manifest is currently in [public developer preview](../resources/schema/manifest-schema-dev-preview.md) and supported in Teams and Outlook mobile hosts.
> The ability to specify Microsoft 365 host runtime requirements in app manifest is currently in [public developer preview](../resources/schema/manifest-schema-dev-preview.md) and supported in Teams and Outlook mobile hosts.


Currently, a subset of Microsoft 365 host applications support the ability to specify runtime requirements in the app manifest. This support will expand over time. The following hosts will ensure only applicable apps and their applicable components are made available to end-users:

|Microsoft 365 host application| Web | Desktop | Mobile | Notes|
Copy link
Collaborator

@v-kushals v-kushals Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

| Notes|

@erikadoyle, is this placeholder text for notes to be added later?

You can specify relationships among the individual components of your app by including a [`elementRelationshipSet`](../resources/schema/manifest-schema-dev-preview.md#elementrelationshipset) in your app manifest. Use this object to specify both [one-way dependencies](#one-way-dependencies) and [mutual dependencies](#mutual-dependencies) among app components.

> [!NOTE]
> A given pair of app components can only be grouped once, by either a `oneWayDependency` or `mutualDependency`. Similarly, cyclical `oneWayDependencies` (where for example, components *A* and *B* mutually declare each other as one-way dependency) are not allowed and will not pass manifest validation.
Copy link
Collaborator

@v-kushals v-kushals Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
> A given pair of app components can only be grouped once, by either a `oneWayDependency` or `mutualDependency`. Similarly, cyclical `oneWayDependencies` (where for example, components *A* and *B* mutually declare each other as one-way dependency) are not allowed and will not pass manifest validation.
> A given pair of app components can only be grouped once, either by `oneWayDependency` or `mutualDependency`. Similarly, cyclical `oneWayDependencies`where, for example, components *A* and *B* mutually declare each other as a one-way dependency—aren't allowed and will fail manifest validation.

> [!NOTE]
> A given pair of app components can only be grouped once, by either a `oneWayDependency` or `mutualDependency`. Similarly, cyclical `oneWayDependencies` (where for example, components *A* and *B* mutually declare each other as one-way dependency) are not allowed and will not pass manifest validation.

Currently, a subset of Teams app elements can be specified as runtime requirements in the app manifest. This support will expand over time. The following app manifest elements can be specified as having one-way or mutual dependencies:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Currently, a subset of Teams app elements can be specified as runtime requirements in the app manifest. This support will expand over time. The following app manifest elements can be specified as having one-way or mutual dependencies:
Only a subset of Teams app capabilities can be specified as runtime requirements in app manifest. This support will expand over time. The following app manifest elements can be specified as having one-way or mutual dependencies:

Copy link
Collaborator

@v-kushals v-kushals Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@erikadoyle, replacing elements with capabilities is just a suggestion for consistency as most developers reading Teams dev docs would have seen it referred to as capabilities throughout the docs. However, I would defer the final word to you and Surbhi.

I've noticed that capabilities/components/elements are used interchangeably and this might potentially cause confusion to readers.

- Personal tabs (`staticTabs`)
- Message extensions (`composeExtensions`), including individual commands
- Bots (`bots`)
- Configurable tabs (`configurableTabs`)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@erikadoyle, can we combine Personal tabs and Configurable tabs to a single point?

- Bots (`bots`)
- Configurable tabs (`configurableTabs`)

Each app element is denoted by an `id`, which maps to `botId` for bots, `entityId` for staticTabs, `id` for configurableTabs, and `id` for composeExtensions.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Each app element is denoted by an `id`, which maps to `botId` for bots, `entityId` for staticTabs, `id` for configurableTabs, and `id` for composeExtensions.
Each app element is denoted by an `id`, which maps to `botId` for bots, `entityId` for static tabs, and `id` for configurable tabs and message extensions.

> [!NOTE]
> This feature introduces `id` properties to configurableTabs and composeExtensions definitions. Currently, Teams and other Microsoft 365 hosts only support apps containing a single configurableTab and/or single composeExtension. These ID properties were added to future-proof your app in case host support expands to accommodate multiple instances of these components.
>
> The `id` property must be specified on a configurableTab or composeExtension for it to be recognized in an `elementRelationshipSet`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
> The `id` property must be specified on a configurableTab or composeExtension for it to be recognized in an `elementRelationshipSet`.
> The `id` property must be specified in a `configurableTab` or a `composeExtension` for it to be recognized in an `elementRelationshipSet`.


### One-way dependencies

Use the [`oneWayDependencies`](../resources/schema/manifest-schema-dev-preview.md#elementrelationshipsetonewaydependency) array to describe cases where one component of your app depends upon another component. For each object in the array, specify the dependent component (`element`) and the component it depends on (`dependsOn`). For example:
Copy link
Collaborator

@v-kushals v-kushals Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example:

@erikadoyle, is it necessary to replace this sentence to describe the code snippet briefly (this extends to all the other code snippets in the article)? If you think it isn't necessary, resolve the suggestion.

Suggestion: The following JSON payload shows a message extension with a one-way dependency on a bot:

"element" : {
"name" : "composeExtensions",
"id" : "composeExtension-id",
"commandIds": ["command-1-id", "command-2-id"] // Developers can add more commands.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"commandIds": ["command-1-id", "command-2-id"] // Developers can add more commands.
"commandIds": ["command-1-id", "command-2-id"] // You can add more commands.

],
```

Currently, a subset of TeamsJS capabilities can be specified as runtime requirements for individual components of an app. This support will expand over time. The following TeamsJS capabilities can be specified as runtime requirements for [`staticTabs`](../resources/schema/manifest-schema-dev-preview.md#statictabsrequirementset), [`composeExtensions`](../resources/schema/manifest-schema-dev-preview.md#composeextensionsrequirementset), and [`bots`](../resources/schema/manifest-schema-dev-preview.md#botsrequirementset):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Currently, a subset of TeamsJS capabilities can be specified as runtime requirements for individual components of an app. This support will expand over time. The following TeamsJS capabilities can be specified as runtime requirements for [`staticTabs`](../resources/schema/manifest-schema-dev-preview.md#statictabsrequirementset), [`composeExtensions`](../resources/schema/manifest-schema-dev-preview.md#composeextensionsrequirementset), and [`bots`](../resources/schema/manifest-schema-dev-preview.md#botsrequirementset):
Only a subset of TeamsJS capabilities can be specified as runtime requirements for individual components of an app. This support will expand over time. The following TeamsJS capabilities can be specified as runtime requirements for [`staticTabs`](../resources/schema/manifest-schema-dev-preview.md#statictabsrequirementset), [`composeExtensions`](../resources/schema/manifest-schema-dev-preview.md#composeextensionsrequirementset), and [`bots`](../resources/schema/manifest-schema-dev-preview.md#botsrequirementset):

@@ -167,6 +167,9 @@ The `{hostName}` [URL placeholder value](./access-teams-context.md#get-context-b
* **Do** use *hostName* to differentiate the theme of your application based on the host it's running in. For example, you can use Microsoft Teams purple as the main accent color when running in Teams, and Outlook blue when running in Outlook.
* **Do** use *hostName* to differentiate messages shown to the user based on which host it's running in. For example, show *Manage your tasks in Microsoft 365* when running in Microsoft 365 on the web, and *Manage your tasks in Teams* when running in Teams.

> [!TIP]
> Best practice is to target the runtime requirements and dependencies of your app in a host-agnostic way, rather than special casing your app code with host-specific logic. For more info, see [Specify Microsoft 365 host runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md).
Copy link
Collaborator

@v-kushals v-kushals Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
> Best practice is to target the runtime requirements and dependencies of your app in a host-agnostic way, rather than special casing your app code with host-specific logic. For more info, see [Specify Microsoft 365 host runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md).
> The best practice is to target the runtime requirements and dependencies of your app in a host-agnostic way, rather than special casing your app code with host-specific logic. For more information, see [how to specify Microsoft 365 host runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md).

@@ -0,0 +1,5 @@
### Specify host runtime requirements (preview)

To ensure intentional and deliberate customer experiences with your app, you can tailor your app's behavior in applicable Microsoft 365 hosts, or omit it from surfacing in contexts that you're not ready to support. Use the app manifest to specify any [dependency relationships](../m365-apps/specify-runtime-requirements.md#specify-relationships-between-components-of-your-app-elementrelationshipset) across components of your app, and specific [runtime requirements](../m365-apps/specify-runtime-requirements.md#specify-runtime-capability-requirements-for-specific-app-components-requirementset) of your static tabs, message extensions, and bots.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
To ensure intentional and deliberate customer experiences with your app, you can tailor your app's behavior in applicable Microsoft 365 hosts, or omit it from surfacing in contexts that you're not ready to support. Use the app manifest to specify any [dependency relationships](../m365-apps/specify-runtime-requirements.md#specify-relationships-between-components-of-your-app-elementrelationshipset) across components of your app, and specific [runtime requirements](../m365-apps/specify-runtime-requirements.md#specify-runtime-capability-requirements-for-specific-app-components-requirementset) of your static tabs, message extensions, and bots.
To ensure intentional and deliberate customer experiences with your app, you can tailor your app's behavior in applicable Microsoft 365 hosts, or omit it from surfacing in contexts that you're not ready to support. Use app manifest to specify any [dependency relationships](../m365-apps/specify-runtime-requirements.md#specify-relationships-between-components-of-your-app-elementrelationshipset) across components of your app, and specific [runtime requirements](../m365-apps/specify-runtime-requirements.md#specify-runtime-capability-requirements-for-specific-app-components-requirementset) of your static tabs, message extensions, and bots.


## Microsoft 365 host support

Currently, a subset of Microsoft 365 host applications support the ability to specify runtime requirements in the app manifest. This support will expand over time. The following hosts will ensure only applicable apps and their applicable components are made available to end-users:
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Currently, a subset of Microsoft 365 host applications support the ability to specify runtime requirements in the app manifest. This support will expand over time. The following hosts will ensure only applicable apps and their applicable components are made available to end-users:
Only a subset of Microsoft 365 host applications supports the ability to specify runtime requirements in the app manifest. This support will expand over time. The following hosts ensure only applicable apps and their applicable components are made available to users:

}
```

For message extensions, you can optionally specify individual commands that require support for specific app components. If those components aren't supported in the runtime host, they will not be made available to the end-user (though all other commands will run).
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For message extensions, you can optionally specify individual commands that require support for specific app components. If those components aren't supported in the runtime host, they will not be made available to the end-user (though all other commands will run).
For message extensions, you can optionally specify individual commands that require support for specific app components. If those components aren't supported in the runtime host, they won't be made available to the user (though all other commands will run).


## Specify runtime capability requirements for specific app components (`requirementSet`)

When you're defining an individual app component, you can specify it's specific TeamsJS runtime requirements using a [`requirementSet`](../resources/schema/manifest-schema-dev-preview.md#statictabsrequirementset). This will ensure the component only loads in Microsoft 365 hosts with support for the critical TeamsJS capabilities. For example:
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
When you're defining an individual app component, you can specify it's specific TeamsJS runtime requirements using a [`requirementSet`](../resources/schema/manifest-schema-dev-preview.md#statictabsrequirementset). This will ensure the component only loads in Microsoft 365 hosts with support for the critical TeamsJS capabilities. For example:
When you're defining an individual app component, you can specify its specific TeamsJS runtime requirements using a [`requirementSet`](../resources/schema/manifest-schema-dev-preview.md#statictabsrequirementset). This ensures that the component only loads in Microsoft 365 hosts with support for the critical TeamsJS capabilities. For example:

@@ -9,9 +9,6 @@ ms.date: 11/15/2021

For information on how to enable developer preview, see [public developer preview for Microsoft Teams](~/resources/dev-preview/developer-preview-intro.md).

> [!NOTE]
> If you aren't using developer preview features, including running [Teams personal tabs and message extensions in Outlook and Microsoft 365 app](../../m365-apps/overview.md), use the [app manifest](~/resources/schema/manifest-schema.md) (previously called Teams app manifest) for generally available (GA) features instead.

The app manifest describes how the app integrates into the Microsoft Teams platform. Your app manifest must conform to the schema hosted at [`https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json`](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The app manifest describes how the app integrates into the Microsoft Teams platform. Your app manifest must conform to the schema hosted at [`https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json`](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json).
App manifest describes how the app integrates into the Microsoft Teams platform. Your app manifest must conform to the schema hosted at [`https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json`](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json).

"element" : {
"name" : "composeExtensions",
"id" : "composeExtension-id",
"commandIds": ["command-1-id", "command-2-id"] // Developers can add more commands.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"commandIds": ["command-1-id", "command-2-id"] // Developers can add more commands.
"commandIds": ["command-1-id", "command-2-id"] // You can add more commands.


**Optional** &ndash; Object

Describes relationships among individual app components, including `staticTabs`, `configurableTabs`, `composeExtensions`, and `bots`. Used to specify runtime dependencies to ensure that the app only launches from applicable Microsoft 365 hosts, such as Teams, Outlook, and the Microsoft 365 (Office) app. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Describes relationships among individual app components, including `staticTabs`, `configurableTabs`, `composeExtensions`, and `bots`. Used to specify runtime dependencies to ensure that the app only launches from applicable Microsoft 365 hosts, such as Teams, Outlook, and the Microsoft 365 (Office) app. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Describes relationships among individual app components, including `staticTabs`, `configurableTabs`, `composeExtensions`, and `bots`. It's used to specify runtime dependencies to ensure that the app only launches from applicable Microsoft 365 hosts, such as Teams, Outlook, and the Microsoft 365 (Office) app. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md).


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `oneWayDependencies`| Array|||Array containing one or more unidirectional dependency relationships among app components (each represented by `oneWayDependency` object with *dependent* (`element`) and *depended on* (`dependsOn`) [`element` objects](#element-object))|
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Array containing one or more unidirectional dependency relationships among app components

@erikadoyle, since we have already mentioned the data type as an array, can we simply start the sentence as "Contains one or more..."?

|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `name`| String enum|| ✔️| The type of app component. Supported values: `bots`, `staticTabs`, `composeExtensions`, `configurableTabs`|
| `id` | String|| ✔️| The specific instance of the bot, tab, or message extension. Maps to `botId` for bots, `entityId` for staticTabs, `id` for configurableTabs, and `id` for composeExtensions.|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `id` | String|| ✔️| The specific instance of the bot, tab, or message extension. Maps to `botId` for bots, `entityId` for staticTabs, `id` for configurableTabs, and `id` for composeExtensions.|
| `id` | String|| ✔️| The specific instance of the bot, tab, or message extension. Maps to `botId` for bots, `entityId` for static tabs, and `id` for configurable tabs, and message extensions.|


### elementRelationshipSet.oneWayDependency

Describes a unidirectional dependency of one app component (X) to another (Y). If a Microsoft 365 runtime host doesn't support a required component (Y), the dependent component (X) won't load or otherwise surface to the end-user.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Describes a unidirectional dependency of one app component (X) to another (Y). If a Microsoft 365 runtime host doesn't support a required component (Y), the dependent component (X) won't load or otherwise surface to the end-user.
Describes a unidirectional dependency of one app component (X) to another (Y). If a Microsoft 365 runtime host doesn't support a required component (Y), the dependent component (X) won't load or otherwise surface to the user.


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `oneWayDependencies`| Array|||Array containing one or more unidirectional dependency relationships among app components (each represented by `oneWayDependency` object with *dependent* (`element`) and *depended on* (`dependsOn`) [`element` objects](#element-object))|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `oneWayDependencies`| Array|||Array containing one or more unidirectional dependency relationships among app components (each represented by `oneWayDependency` object with *dependent* (`element`) and *depended on* (`dependsOn`) [`element` objects](#element-object))|
| `oneWayDependencies`| Array|||Array containing one or more unidirectional dependency relationships among app components (each represented by `oneWayDependency` object with *dependent* (`element`) and *depended on* (`dependsOn`) [`element` objects](#element-object)).|

|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `oneWayDependencies`| Array|||Array containing one or more unidirectional dependency relationships among app components (each represented by `oneWayDependency` object with *dependent* (`element`) and *depended on* (`dependsOn`) [`element` objects](#element-object))|
| `mutualDependencies`| Array|||Array containing one or more mutual dependency relationships among app components (each represented by `mutualDependency` array of [`element` objects](#element-object))|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `mutualDependencies`| Array|||Array containing one or more mutual dependency relationships among app components (each represented by `mutualDependency` array of [`element` objects](#element-object))|
| `mutualDependencies`| Array|||Array containing one or more mutual dependency relationships among app components (each represented by `mutualDependency` array of [`element` objects](#element-object)).|


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `name`| String enum|| ✔️| The type of app component. Supported values: `bots`, `staticTabs`, `composeExtensions`, `configurableTabs`|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `name`| String enum|| ✔️| The type of app component. Supported values: `bots`, `staticTabs`, `composeExtensions`, `configurableTabs`|
| `name`| String enum|| ✔️| The type of app component. Supported values: `bots`, `staticTabs`, `composeExtensions`, `configurableTabs`.|


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `element`| Object||✔️| Represents an individual app component (represented by [`element` object](#element-object)) that has a one-way runtime dependency on another component being loaded |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `element`| Object||✔️| Represents an individual app component (represented by [`element` object](#element-object)) that has a one-way runtime dependency on another component being loaded |
| `element`| Object||✔️| Represents an individual app component (represented by [`element` object](#element-object)) that has a one-way runtime dependency on another component being loaded. |

|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `element`| Object||✔️| Represents an individual app component (represented by [`element` object](#element-object)) that has a one-way runtime dependency on another component being loaded |
| `dependsOn`| Array|| ✔️| Denotes one or more app components (each represented by [`element` object](#element-object)) required for the specified `element` to load|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `dependsOn`| Array|| ✔️| Denotes one or more app components (each represented by [`element` object](#element-object)) required for the specified `element` to load|
| `dependsOn`| Array|| ✔️| Denotes one or more app components (each represented by [`element` object](#element-object)) required for the specified `element` to load|
Suggested change
| `dependsOn`| Array|| ✔️| Denotes one or more app components (each represented by [`element` object](#element-object)) required for the specified `element` to load|
| `dependsOn`| Array|| ✔️| Denotes one or more app components (each represented by [`element` object](#element-object)) required for the specified `element` to load.|

"element" : {
"name" : "composeExtensions",
"id" : "composeExtension-id",
"commandIds": ["command-1-id", "command-2-id"] // Developers can add more commands.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"commandIds": ["command-1-id", "command-2-id"] // Developers can add more commands.
"commandIds": ["command-1-id", "command-2-id"] // You can add more commands.


### elementRelationshipSet.mutualDependencies

Describes a set of mutual dependencies between two or more app components. A Microsoft 365 runtime host must support all required components in order for any of those components to be available for end-users in that host.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Describes a set of mutual dependencies between two or more app components. A Microsoft 365 runtime host must support all required components in order for any of those components to be available for end-users in that host.
Describes a set of mutual dependencies between two or more app components. A Microsoft 365 runtime host must support all required components for any of those components to be available for users in that host.


### staticTabs.requirementSet

Describes the runtime requirements for the tab to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the tab. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Describes the runtime requirements for the tab to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the tab. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Describes the runtime requirements for the tab to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the tab. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md).


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Species one or more runtime capabilities that are required by the tab to function properly.|
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Species one or more runtime capabilities that are required by the tab to function properly.|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the tab requires to function properly.|


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the tab to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the tab to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the tab to function properly, specified as name/value pairs. For example, `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
Suggested change
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the tab to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the tab to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |

@@ -520,6 +647,26 @@ An optional list of commands that your bot can recommend to users. The object is
|`items.scopes`|Array of enum|3|✔️|Specifies the scope for which the command list is valid. Options are `team`, `personal`, and `groupChat`.|
|`items.commands`|Array of objects|10|✔️|An array of commands the bot supports:<br>`title`: the bot command name (string, 32).<br>`description`: a simple description or example of the command syntax and its argument (string, 128).|

### bots.requirementSet

Describes the runtime requirements for the bot to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the bot. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Describes the runtime requirements for the bot to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the bot. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Describes the runtime requirements for the bot to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the bot. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md).


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Species on or more runtime capabilities that are required by the bot to function properly.|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Species on or more runtime capabilities that are required by the bot to function properly.|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the bot requires to function properly.|


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the bot to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the bot to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the bot to function properly, specified as name/value pairs. For example, `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |

@@ -547,6 +694,7 @@ The object is an array (maximum of 1 element) with all elements of type `object`

|Name| Type | Maximum Size | Required | Description|
|---|---|---|---|---|
|`id`|String||| Unique identifier for compose extension. Used when defining one-way and mutual app component dependencies as [elementRelationshipSet](#elementrelationshipset).|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unique identifier for compose extension.

@erikadoyle, do you mean composeExtension or message extension?

@@ -599,6 +748,26 @@ Each command item is an object with the following structure:
|`parameter.choices.title`|String|128 characters|✔️|Title of the choice.|
|`parameter.choices.value`|String|512 characters|✔️|Value of the choice.|

### composeExtensions.requirementSet

Describes the runtime requirements for the message extension to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the message extension. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Copy link
Collaborator

@v-kushals v-kushals Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Describes the runtime requirements for the message extension to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the message extension. See [Specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md) for more info.
Describes the runtime requirements for the message extension to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the message extension. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md).


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Species on or more runtime capabilities that are required by the message extension to function properly.|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Species on or more runtime capabilities that are required by the message extension to function properly.|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the message extension requires to function properly.|


|Name| Type| Maximum size | Required | Description|
|---|---|---|---|---|
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the message extension to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the message extension to function properly, specified as name/value pairs, for example: `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |
| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| List of one or more runtime capabilities that are required for the message extension to function properly, specified as name/value pairs. For example, `{ "name": "dialogUrl" }`. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. |


## Specify relationships between components of your app (`elementRelationshipSet`)

You can specify relationships among the individual components of your app by including a [`elementRelationshipSet`](../resources/schema/manifest-schema-dev-preview.md#elementrelationshipset) in your app manifest. Use this object to specify both [one-way dependencies](#one-way-dependencies) and [mutual dependencies](#mutual-dependencies) among app components.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
You can specify relationships among the individual components of your app by including a [`elementRelationshipSet`](../resources/schema/manifest-schema-dev-preview.md#elementrelationshipset) in your app manifest. Use this object to specify both [one-way dependencies](#one-way-dependencies) and [mutual dependencies](#mutual-dependencies) among app components.
You can specify relationships among the individual components of your app by including an [`elementRelationshipSet`](../resources/schema/manifest-schema-dev-preview.md#elementrelationshipset) in your app manifest. Use this object to specify both [one-way dependencies](#one-way-dependencies) and [mutual dependencies](#mutual-dependencies) among app components.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants