Updates from: 01/25/2024 04:36:21
Service Microsoft Docs article Related commit history on GitHub Change details
platform Submission Checklist https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/submission-checklist.md
Before you submit your app to [Partner Center](/office/dev/store/use-partner-cen
While your app may be working in a test environment, you should check your app package to avoid running into issues during the submission process.
-The Microsoft Teams app validation tool helps you identify and fix issues before submitting to Partner Center. The tool automatically checks your app's configurations against the same test cases used during Teams Store validation.
+The Teams app validation tool helps you identify and fix issues before submitting to Partner Center. The tool automatically checks your app's configurations against the same test cases used during Teams Store validation.
-1. Go to the [Microsoft Teams app validation tool](https://dev.teams.microsoft.com/appvalidation.html).
+1. Go to the [Teams app validation tool](https://dev.teams.microsoft.com/appvalidation.html).
You can also validate your app using [Developer Portal for Teams.](~/concepts/build-and-test/teams-developer-portal.md)
You must have a short and long description of your app. App description helps im
#### Short description
-A concise summary of your app that should be original, engaging, and directed at your target audience. Keep the short description to one sentence.
+A concise summary of your app that is original, engaging, and directed at your target audience. Keep the short description to one sentence that focuses on the key value of your app.
:::row:::
Make sure your short description adheres to the [Teams Store validation guidelin
#### Long description
-The long description can provide a narrative that highlights your apps:
+The long description must provide information that highlights your app's key features, user benefits, and unique value proposition in Teams.
-* Main features
-* The problems it solves
-* Target audience
+Ensure that you provide the following information in your app's long description:
-While this description can be as long as 4,000 characters, most users only read between 300-500 words.
+* Define your product, state its primary features, and its target audience.
+* Describe the unique value proposition of your app within Teams.
+* Describe your app's capabilities and scenarios in Teams.
+* Highlight how your app contributes to resolving customer problems and assists them in their everyday work.
+* List the key benefits that your app provides to customers. We recommend that you add up to three benefits.
+* If there are specific requirements to use your app, mention them clearly in the description for the benefit of users and admins looking to install and use your app.
--
+Your Partner Center account allows you to add a long description of up to 4000 characters. However, for better readability, we recommended to keep your app's long description concise.
Make sure your long description adheres to the [Teams Store validation guidelines](~/concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#long-description).
For best practices, see the following resources:
### Create a video
-A video in your listing can be the most effective way to communicate why people should use your app. Address the following questions in a video:
+A video in your listing can be the most effective way to communicate with the users about your app. You can add the URL of videos hosted on YouTube or Vimeo in the format `https://www.example.com/123456789`.
+
+For the benefit of the customers and admins who wants to install and use your app, we recommend that you add a video that addresses the value your app brings to the users. Also, as a best practice, we recommend that you add a demo or scenario walkthrough video that describes the end-to-end usage of your app to the users.
+
+When providing a video that educates the users of the value your app provides, ensure to cover the following information in the video:
-* Who is your app for?
-* What problems can your app solve?
-* How does your app work?
-* What other benefits do you get from using your app?
+* Who's the intended target audience and customer for your app?
+* What unique value does your app provide to the users?
+* Is there any measurable impact that your app guarantees to deliver for users?
+* What are the key problems that your app resolves for users?
+* Are there other key benefits of using your app?
+* What are the primary features of your app?
-You can add a URL for your YouTube or Vimeo video in the format `https://www.example.com/123456789`.
+A demo or scenario walkthrough video is more like an educational video that provides the users or IT admins with a walkthrough of app configuration and usage experience. If you decide to add a demo or walkthrough video, provide the following details:
-#### Best practices for videos
+* How can the users start with your app as first-time users and how do they set up your app?
+* How do they use the different capabilities or features in your app?
+* What are the major features of your app and how do they get to use them?
+* Provide an end-to-end demonstration of your app with all the key workflows and key scenarios that your app supports.
+* If there are any specific training videos on how users can learn to use the app, ensure that you provide the related information.
+* Use voice-over instructions wherever applicable to make it easier for the users to understand.
+* Ensure that the video intends to educate users and not to promote your app.
-* Keep your video between 60-90 seconds.
-* Aim for quality. In a listing, users see your video before screenshots.
-* Communicate the value of the product in narrative form.
-* Demonstrate how the product works.
+For other best practices on creating videos, see [store validation guidelines](teams-store-validation-guidelines.md#videos).
### Select a category for your app
platform Teams Store Validation Guidelines https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md
An app's name plays a critical role in how users discover it in the Teams Store.
* Must not contain profane or derogatory terms. The name also mustn't include racially or culturally insensitive language. [*Mandatory Fix*] * Must be unique. If your app (Contoso) is listed in the Teams Store and Microsoft AppSource and you want to list another app specific to a geography such as Contoso Mexico, your submission must meet the following criteria: * Call out the app's region-specific functionality in the title, metadata, first response app experience, and help sections. For example, title must be Contoso Mexico. App title must clearly differentiate an existing app from the same developer to avoid end-user confusion. [*Mandatory Fix*]
- * When uploading the app package in Partner Center, select the right **Markets** where the app will be available in the **Availability** section. [*Mandatory Fix*]
+ * When uploading the app package in Partner Center, select the right **Markets** where the app is available in the **Availability** section. [*Mandatory Fix*]
* App name mustn't lead with a core Teams feature such as Chat, Contacts, Calendar, Calls, Files, Activity, Teams, and Help. The app name doesn't shortens to either Chat, Contacts, Calendar, Calls, Files, Activity, Teams, and Help on install in the left navigation. [*Mandatory Fix*]
You must have a short and long description for your app. App description helps i
<br></br> <details><summary>Expand to know more</summary>
-Descriptions mustn't directly or through insinuation disparage another brand (Microsoft owned or otherwise). Ensure that your description doesnΓÇÖt include claims that canΓÇÖt be substantiated. For example, Guaranteed 200 percent increase in efficiency.
+Descriptions mustn't directly or through suggestion derogate another brand (Microsoft owned or otherwise). Ensure that your description doesnΓÇÖt include claims that canΓÇÖt be substantiated. For example, Guaranteed 200 percent increase in efficiency.
* App description mustn't contain comparative marketing information. For example, don't use competitor logos or trademarks in the offer listing including tags or other metadata that references competing offers or marketplaces. [*Mandatory Fix*]
Descriptions mustn't directly or through insinuation disparage another brand (Mi
#### Short description
-A short description is a concise summary of your app that highlights its value proposition and is directed at your target audience.
+A short description must be a concise summary of your app that highlights its value proposition and is directed at your target audience.
**Dos:**
Use the word **app** in the short description.
#### Long description
-The long description can provide an engaging narrative that highlights your app's value proposition, primary audience, and target industry. While this description can be as long as 4,000 characters, most users will only read between 300-500 words.
+The long description must provide an engaging narrative that highlights your app's value proposition, primary audience, and target industry. While the description can be as long as 4,000 characters, we recommended you to have a concise description of around 1000 characters.
**Dos:**
The long description can provide an engaging narrative that highlights your app'
* Use active voice and speak to users directly. For example, **You can ...**.
+* List the key benefits to highlight the advantages of using your app. Add up to three benefits.
+
+* Add the key value proposition of your app in Teams.
+ * List features with bullet points so it's easier to scan the description. * Clearly describe limitations, features, conditions or exceptions to the functionality, and deliverables in the listing and related materials before the user installs your app. The Teams capabilities must relate to the core functions described in the listing.
The long description can provide an engaging narrative that highlights your app'
* Make unverified claims. For example, best, top, and ranked, unless it comes with the source of the claim. * Compare your offer with other marketplace offers.
+For guidance on how to create an accurate, concise, and informative short and long description, see [checklist to write app descriptions](submission-checklist.md#write-descriptions).
+ </details> ### Screenshots
Remember the following:
### Videos
-A video in your app listing is one of the most effective ways to communicate why people should use your app. You can add a URL for your YouTube or Vimeo video.
+A video in your app listing is one of the most effective ways to communicate why people must use your app. You can add your YouTube or Vimeo video URL that provides the value of your app. Also, as a best practice, we recommended that you add a video that provides the demo or scenario walkthrough of your app. [*Suggested fix*]
-If you choose to submit a video as part of your app listing in your Partner Center account, ensure the following:
+If you choose to submit a video as part of your app listing in your Partner Center account, ensure that you meet the following criteria:
-* The duration of the video doesn't exceed 90 seconds. [*Suggested Fix*]
-* You turn off advertisements from your YouTube or Vimeo account settings before submitting the video link in the app listing. [*Mandatory Fix*]
-* The video showcases your appΓÇÖs functionality and integration within Teams. [*Mandatory Fix*]
-* The video is available as a functional link. [*Mandatory Fix*]
+* The video must be short, clear, engaging, and of good quality.
+* The video must demonstrate how to set up and use the app.
+* The video must be in a narrative form.
+* The duration of the video must be within 60-90 seconds for a value video and the recommended duration for a walkthrough video is 3-5 minutes. [*Suggested Fix*]
+* You must turn off advertisements from your YouTube or Vimeo account settings before submitting the video link in the app listing. [*Mandatory Fix*]
+* The video must highlight your appΓÇÖs functionalities and integration within Teams. [*Mandatory Fix*]
+* The video must be available as a functional link. [*Mandatory Fix*]
* The video must be in the format `https://www.example.com/123456789`. :::image type="content" source="../../../../assets/images/submission/video-app-listing-partner-center.png" alt-text="Screenshot shows the failed scenario of video submitted as part of app listing in partner center.":::
+* The video can be surfaced in the first position of the screenshots or videos carousel in the app details (Teams Store and Admin Center) and AppSource pages. [*Suggested Fix*]
+* The video on demo or scenario walkthrough must intend to educate users and not to promote your app.
+
+For more information on the criteria for creating an app value video or walkthrough video, see the [checklist to create a video](submission-checklist.md#create-a-video).
+ <br></br> ### Privacy policy
If you choose to submit a video as part of your app listing in your Partner Cent
The privacy policy can be specific to your Teams app or an overall policy for all your services.
-* If you use a generic privacy policy template, you must add a reference to **services**, **applications**, or **platforms in the scope of your privacy policy**. You donΓÇÖt need to specify your Teams app in the scope, if you include a reference to **services**, **applications**, and **platforms**. The app validation process will interpret these references to include your Teams app along with your other services or websites.
+* If you use a generic privacy policy template, you must add a reference to services, applications, or platforms in the scope of your privacy policy. You donΓÇÖt need to specify your Teams app in the scope, if you include a reference to services, applications, and platforms. The app validation process interprets these references to include your Teams app along with your other services or websites.
* Must include how you handle user data storage, retention, and deletion. You must describe the security controls for data protection. * Must include your contact information. * Must not include URLs that are broken or for beta or staging purposes.
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
:::image type="content" source="../../../../assets/images/submission/validation-apps-redirecting-competitor-chat-platform.png" alt-text="Graphic shows an example of an app redirecting to competitor chat based platform.":::
-* If your app supports role based views and certain workflows are unavailable to all participants, we recommend that you implement proper messaging for participants in tab and side-panel stating that the app is currently for organizer's view and provide details about how the attendees will receive the meeting notes, action items, and update agendas. [*Mandatory Fix*]
+* If your app supports role based views and certain workflows are unavailable to all participants, we recommend that you implement proper messaging for participants in tab and side-panel stating that the app is for organizer's view and provide details about how the attendees receive the meeting notes, action items, and update agendas. [*Mandatory Fix*]
:::image type="content" source="../../../../assets/images/submission/validation-way-forward-not-available-for-role-based-views.png" alt-text="Graphic shows an example of an app without a way forward for participants in a role based view.":::
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
* Pre and post meeting screens must adhere to general tab design guidelines. For more information, see [Teams design guidelines](~/tabs/design/tabs.md). [*Mandatory Fix*] * Tabs must have an organized layout when displaying multiple items. For example, more than 10 polls or surveys, see [example layout](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md#after-a-meeting). [*Mandatory Fix*]
-* Your app mustn'tify users when the results of a survey or poll are exported by stating, **Results successfully downloaded**. [*Mandatory Fix*]
+* Your app must notify users when the results of a survey or poll are exported by stating, **Results successfully downloaded**. [*Mandatory Fix*]
:::image type="content" source="../../../../assets/images/submission/validation-meeting-experience-tab-design-guidelines-fail.png" alt-text="Graphic shows an example of tab not following tab design guidelines.":::
You must demonstrate compliance with all laws where your app is distributed, if
* Rewards or incentivizes users with cryptocurrency tokens for completing a task.
-After an internal Microsoft review, if the compliance demonstration is satisfactory, Microsoft may proceed with further certification of your app. If the compliance demonstration is unsatisfactory, Microsoft will keep you informed of the decision to not proceed with certification of your app.
+After an internal Microsoft review, if the compliance demonstration is satisfactory, Microsoft may proceed with further certification of your app. If the compliance demonstration is unsatisfactory, Microsoft keeps you informed of the decision to not proceed with certification of your app.
[Back to top](#teams-store-validation-guidelines)
platform Debug Your Teams App Test Tool https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/debug-your-Teams-app-test-tool.md
No. We always recommend users to test their bot application in the Teams client
|-|--|--| | Test Tool Sample App | A sample bot app to explore Test Tool. | [View](https://github.com/OfficeDev/TeamsFx-Samples/tree/v3/test-tool-sample-app) |
+## Step-by-step guide
+
+Follow the [step-by-step guide](../sbs-teams-app-test-tool.yml) to debug an AI chat bot using Teams App Test Tool.
+ ## See also * [Teams Toolkit Overview](teams-toolkit-fundamentals.md)
platform Deploy https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/deploy.md
Congratulations, you've created a Teams app! Now let's go ahead and learn how to
To customize the deployment process, you can edit the deploy sections in 'teamsapp.yml'.
-**cli/runNpmCommand**
+#### cli/runNpmCommand
This action executes npm commands under specified directory with parameters. **Sample**
-```text
+```yaml
- uses: cli/runNpmCommand with: workingDirectory: ./src
This action executes npm commands under specified directory with parameters.
**Parameters**
-| Parameter | Description | Required | Default value |
-|-|-|||
-|workingDirectory | Represents the folder where you want to run the command. If your input value is a relative path, it's relative to the workingDirectory. | No | Project root |
-|args | Command arguments| Yes | |
+| Parameter | Description | Required | Default value |
+| - | | -- | - |
+| workingDirectory | Represents the folder where you want to run the command. If your input value is a relative path, it's relative to the workingDirectory. | No | Project root |
+| args | Command arguments | Yes | |
-**cli/runDotnetCommand**
+#### cli/runDotnetCommand
This action executes dotnet commands under specified directory with parameters. **Sample**
-```text
+```yaml
- uses: cli/runDotnetCommand with: workingDirectory: ./src
This action executes dotnet commands under specified directory with parameters.
**Parameters**
-| Parameter | Description | Required | Default value |
-|-|-|||
-|workingDirectory | Represents the folder where you want to run the command. If your input value is a relative path, it's relative to the workingDirectory. | No | Project root |
-|args | npm Command arguments| Yes | |
-|execPath | Executor path | No | System PATH |
+| Parameter | Description | Required | Default value |
+| - | | -- | - |
+| workingDirectory | Represents the folder where you want to run the command. If your input value is a relative path, it's relative to the workingDirectory. | No | Project root |
+| args | npm Command arguments | Yes | |
+| execPath | Executor path | No | System PATH |
-**cli/runNpxCommand**
+#### cli/runNpxCommand
**Sample**
-```text
+```yaml
- uses: cli/runNpxCommand with: workingDirectory: ./src
This action executes dotnet commands under specified directory with parameters.
**Parameters**
-| Parameter | Description | Required | Default value |
-|-|-|||
-|workingDirectory | Represents the folder where you want to run the command. If your input value is a relative path, it's relative to the workingDirectory. | No | Project root |
-|args | Command arguments| Yes | |
+| Parameter | Description | Required | Default value |
+| - | | -- | - |
+| workingDirectory | Represents the folder where you want to run the command. If your input value is a relative path, it's relative to the workingDirectory. | No | Project root |
+| args | Command arguments | Yes | |
-**azureAppService/zipDeploy**
+#### azureAppService/zipDeploy
**Sample**
-```text
+```yaml
- uses: azureAppService/zipDeploy with: workingDirectory: ./src
This action executes dotnet commands under specified directory with parameters.
**Parameters**
-| Parameter | Description | Required | Default value |
-|-|-|||
-|workingDirectory | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the project root. | No | Project root |
-|artifactFolder | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the workingDirectory.| Yes | |
-|ignoreFile | Specifies the file path of ignoreFile used during upload. This file can be utilized to exclude certain files or folders from the artifactFolder. Its syntax is similar to the Git's ignore. | No | null |
-| resourceId | Indicates the resource ID of an Azure App Service. It's generated automatically after running the provision command. If you already have an Azure App Service, you can find its [resource ID](https://azurelessons.com/how-to-find-resource-id-in-azure-portal/) | Yes | |
-|dryRun | You can set the dryRun parameter to true if you only want to test the preparation of the upload and don't intend to deploy it. This helps you verify that the packaging zip file is correct. | No | false |
-| outputZipFile | Indicates the path of the zip file for the packaged artifact folder. It's relative to the workingDirectory. This file is reconstructed during deployment, reflecting all folders and files in your artifactFolder, and removing any nonexistent files or folders. | No | ./.deployment/deployment.zip |
+| Parameter | Description | Required | Default value |
+| - | -- | -- | - |
+| workingDirectory | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the project root. | No | Project root |
+| artifactFolder | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the workingDirectory. | Yes | |
+| ignoreFile | Specifies the file path of ignoreFile used during upload. This file can be utilized to exclude certain files or folders from the artifactFolder. Its syntax is similar to the Git's ignore. | No | null |
+| resourceId | Indicates the resource ID of an Azure App Service. It's generated automatically after running the provision command. If you already have an Azure App Service, you can find its [resource ID](https://azurelessons.com/how-to-find-resource-id-in-azure-portal/) | Yes | |
+| dryRun | You can set the dryRun parameter to true if you only want to test the preparation of the upload and don't intend to deploy it. This helps you verify that the packaging zip file is correct. | No | false |
+| outputZipFile | Indicates the path of the zip file for the packaged artifact folder. It's relative to the workingDirectory. This file is reconstructed during deployment, reflecting all folders and files in your artifactFolder, and removing any nonexistent files or folders. | No | ./.deployment/deployment.zip |
-**azureFunctions/zipDeploy**
+#### azureFunctions/zipDeploy
This action upload and deploy the project to Azure Functions using the [zip deploy feature](/azure/azure-functions/deployment-zip-push). **Sample**
-```text
+```yaml
- uses: azureFunctions/zipDeploy with: workingDirectory: ./src
This action upload and deploy the project to Azure Functions using the [zip depl
**Parameters**
-| Parameter | Description | Required | Default value |
-|-|-|||
-|workingDirectory | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the project root. |No | Project root |
-|artifactFolder | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the workingDirectory.| Yes | |
-|ignoreFile | Specifies the file path of ignoreFile used during upload. This file can be utilized to exclude certain files or folders from the artifactFolder. Its syntax is similar to the Git's ignore. | No | null |
-| resourceId | Indicates the resource ID of an Azure Functions. It's generated automatically after running the provision command. If you already have an Azure Functions, you can find its [resource ID](https://azurelessons.com/how-to-find-resource-id-in-azure-portal/) in the Azure portal.| Yes | |
-|dryRun | You can set the dryRun parameter to true if you only want to test the preparation of the upload and don't intend to deploy it. This helps you verify that the packaging zip file is correct. | No | false |
-| outputZipFile | Indicates the path of the zip file for the packaged artifact folder. It's relative to the workingDirectory. This file is reconstructed during deployment, reflecting all folders and files in your artifactFolder, and removing any nonexistent files or folders. | No | ./.deployment/deployment.zip |
+| Parameter | Description | Required | Default value |
+| - | | -- | - |
+| workingDirectory | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the project root. | No | Project root |
+| artifactFolder | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the workingDirectory. | Yes | |
+| ignoreFile | Specifies the file path of ignoreFile used during upload. This file can be utilized to exclude certain files or folders from the artifactFolder. Its syntax is similar to the Git's ignore. | No | null |
+| resourceId | Indicates the resource ID of an Azure Functions. It's generated automatically after running the provision command. If you already have an Azure Functions, you can find its [resource ID](https://azurelessons.com/how-to-find-resource-id-in-azure-portal/) in the Azure portal. | Yes | |
+| dryRun | You can set the dryRun parameter to true if you only want to test the preparation of the upload and don't intend to deploy it. This helps you verify that the packaging zip file is correct. | No | false |
+| outputZipFile | Indicates the path of the zip file for the packaged artifact folder. It's relative to the workingDirectory. This file is reconstructed during deployment, reflecting all folders and files in your artifactFolder, and removing any nonexistent files or folders. | No | ./.deployment/deployment.zip |
-**azureStorage/deploy**
+#### azureStorage/deploy
-This action upload and deploy the project to Azure Storage.
+This action uploads and deploys the project to Azure Storage.
**Sample**
-```text
+```yaml
- uses: azureStorage/deploy with: workingDirectory: ./src
This action upload and deploy the project to Azure Storage.
**Parameters**
-| Parameter | Description | Required | Default value |
-|-|-|||
-|workingDirectory | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the project root. |No | Project root |
-|artifactFolder | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the workingDirectory.| Yes | |
-|ignoreFile | Specifies the file path of ignoreFile used during upload. This file can be utilized to exclude certain files or folders from the artifactFolder. Its syntax is similar to the Git's ignore. | No | null |
-| resourceId | Indicates the resource ID of an Azure Functions. It's generated automatically after running the provision command. If you already have an Azure Functions, you can find its [resource ID](https://azurelessons.com/how-to-find-resource-id-in-azure-portal/) in the Azure portal.| Yes | |
+| Parameter | Description | Required | Default value |
+| - | | -- | - |
+| workingDirectory | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the project root. | No | Project root |
+| artifactFolder | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the workingDirectory. | Yes | |
+| ignoreFile | Specifies the file path of ignoreFile used during upload. This file can be utilized to exclude certain files or folders from the artifactFolder. Its syntax is similar to the Git's ignore. | No | null |
+| resourceId | Indicates the resource ID of an Azure Functions. It's generated automatically after running the provision command. If you already have an Azure Functions, you can find its [resource ID](https://azurelessons.com/how-to-find-resource-id-in-azure-portal/) in the Azure portal. | Yes | |
-**spfx/deploy**
+#### azureStorage/deploy
+
+This action uploads and deploys the project to Azure Storage.
+
+**Sample**
+
+```yaml
+ - uses: azureStorage/deploy
+ with:
+ workingDirectory: ./src
+ artifactFolder: .
+ ignoreFile: ./.webappignore
+ resourceId: ${{BOT_AZURE_APP_SERVICE_RESOURCE_ID}}
+```
+
+**Parameters**
+
+| Parameter | Description | Required | Default value |
+| - | | -- | - |
+| workingDirectory | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the project root. | No | Project root |
+| artifactFolder | Represents the folder where you want to upload the artifact. If your input value is a relative path, it's relative to the workingDirectory. | Yes | |
+| ignoreFile | Specifies the file path of ignoreFile used during upload. This file can be utilized to exclude certain files or folders from the artifactFolder. Its syntax is similar to the Git's ignore. | No | null |
+| resourceId | Indicates the resource ID of an Azure Functions. It's generated automatically after running the provision command. If you already have an Azure Functions, you can find its [resource ID](https://azurelessons.com/how-to-find-resource-id-in-azure-portal/) in the Azure portal. | Yes | |
+
+#### spfx/deploy
This action upload and deploys generated sppkg to SharePoint app catalog. You can create tenant app catalog manually or by setting createAppCatalogIfNotExist to true if you don't have one in current M365 tenant. **Sample**
-```text
+```yaml
- uses: spfx/deploy with: createAppCatalogIfNotExist: false
This action upload and deploys generated sppkg to SharePoint app catalog. You ca
**Parameters**
-| Parameter | Description | Required | Default value |
-|-|-|||
-|createAppCatalogIfNotExist | If the value is true, this action creates tenant app catalog first if not exist. |No | False |
-|packageSolutionPath | Path to package-solution.json in SPFx project. This action honors the configuration to get target sppkg.| Yes | |
+| Parameter | Description | Required | Default value |
+| -- | -- | -- | - |
+| createAppCatalogIfNotExist | If the value is true, this action creates tenant app catalog first if not exist. | No | False |
+| packageSolutionPath | Path to package-solution.json in SPFx project. This action honors the configuration to get target sppkg. | Yes | |
## See also
The Get started guide helps to deploy using Teams Toolkit. You can use the follo
## Details on Teams app workload
-| Teams app workload | Source code | Build artifact| Target resource |
-|-|-|||
-|Tabs with React </br> The front-end workload| `yourProjectFolder/tabs`| `tabs/build` |Azure Storage |
-|Tabs with SharePoint </br> The front-end workload | `yourProjectFolder/SPFx`| `SPFx/sharepoint/solution` |SharePoint app catalog |
-|APIs on Azure Functions </br> The back-end workload | `yourProjectFolder/api`| Not applicable |Azure Functions |
-|Bots and message extensions </br> The back-end workload | `yourProjectFolder/bot` | Not applicable | Azure App Service |
+| Teams app workload | Source code | Build artifact | Target resource |
+| - | | -- | - |
+| Tabs with React </br> The front-end workload | `yourProjectFolder/tabs` | `tabs/build` | Azure Storage |
+| Tabs with SharePoint </br> The front-end workload | `yourProjectFolder/SPFx` | `SPFx/sharepoint/solution` | SharePoint app catalog |
+| APIs on Azure Functions </br> The back-end workload | `yourProjectFolder/api` | Not applicable | Azure Functions |
+| Bots and message extensions </br> The back-end workload | `yourProjectFolder/bot` | Not applicable | Azure App Service |
> [!NOTE] > When you include Azure API Management resource in your project and trigger deploy, you can publish your APIs in Azure Functions to Azure API Management service.
platform Provision https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/provision.md
Azure Storage.
errorPage: <path-to-error-page> ```
+### azureStaticWebApps/getDeploymentToken
+
+#### What it is
+
+This action retrieves the deployment token from Azure Static Web Apps.
+
+#### Version Info
+
+v1.4
+
+#### What resource it operates
+
+Azure Static Web Apps.
+
+#### How to use it
+
+```yml
+- uses: azureStaticWebApps/getDeploymentToken
+ with:
+ resourceId: ${{AZURE_STATIC_WEB_APPS_RESOURCE_ID}}
+ writeToEnvironmentFile:
+ deploymentToken: SECRET_TAB_SWA_DEPLOYMENT_TOKEN
+```
+ ### script #### What it is
You can follow the steps to add environment variables to the .env files to use a
## See also
-* [Deploy Teams app to the cloud](deploy.md)
+[Deploy Teams app to the cloud](deploy.md)
::: zone-end
The following list shows the resource creation for different types of app and Az
<details> <summary><b>Resource creation for Teams Tab app</b></summary>
-|Resource|Purpose|Description |
-|-|--|--|
-| Azure storage | Hosts your tab app. | Enables static web app feature to host your tab app. |
-| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
+| Resource | Purpose | Description |
+| - | | - |
+| Azure storage | Hosts your tab app. | Enables static web app feature to host your tab app. |
+| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
</details> <br>
The following list shows the resource creation for different types of app and Az
<details> <summary><b>Resource creation for Teams bot or message extension app</b></summary>
-|Resource|Purpose| Description |
-|-|--|--|
-| Azure bot service | Registers your app as a bot with the bot framework. | Connects bot to Teams. |
-| App service plan for bot | Hosts the web app of bot. |Not applicable |
-| Web app for bot | Hosts your bot app. | - Adds user assigned identity to access other Azure resources. <br />- Adds app settings required by [TeamsFx SDK](https://www.npmjs.com/package/@microsoft/teamsfx). |
-| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
+| Resource | Purpose | Description |
+| | | |
+| Azure bot service | Registers your app as a bot with the bot framework. | Connects bot to Teams. |
+| App service plan for bot | Hosts the web app of bot. | Not applicable |
+| Web app for bot | Hosts your bot app. | - Adds user assigned identity to access other Azure resources. <br />- Adds app settings required by [TeamsFx SDK](https://www.npmjs.com/package/@microsoft/teamsfx). |
+| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
</details> <br>
The following list shows the resource creation for different types of app and Az
<details> <summary><b>Resource creation for Azure Functions in the project</b></summary>
-|Resource|Purpose| Description|
-|-|--|--|
-| App service plan for function app | Hosts the function app. |Not applicable |
-| Function app | Hosts your Azure Functions APIs. | - Adds user assigned identity to access other Azure resources. <br />- Adds cross-origin resource sharing (CORS) rule to allow requests from your tab app. <br />- Adds an authentication setting that allows requests from your Teams app. <br />- Adds app settings required by [TeamsFx SDK](https://www.npmjs.com/package/@microsoft/teamsfx). |
-| Azure storage for function app | Requires to create function app. |Not applicable|
-| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
+| Resource | Purpose | Description |
+| | | -- |
+| App service plan for function app | Hosts the function app. | Not applicable |
+| Function app | Hosts your Azure Functions APIs. | - Adds user assigned identity to access other Azure resources. <br />- Adds cross-origin resource sharing (CORS) rule to allow requests from your tab app. <br />- Adds an authentication setting that allows requests from your Teams app. <br />- Adds app settings required by [TeamsFx SDK](https://www.npmjs.com/package/@microsoft/teamsfx). |
+| Azure storage for function app | Requires to create function app. | Not applicable |
+| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
</details> <br>
The following list shows the resource creation for different types of app and Az
<details> <summary><b>Resource creation for Azure SQL in the project</b></summary>
-|Resource|Purpose | Description |
-|-|--|--|
-| Azure SQL server | Hosts the Azure SQL database instance. | Allows all Azure services to access the server. |
-| Azure SQL database | Stores data for your app. | Grants user assigned identity, read or write permission to the database. |
-| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
+| Resource | Purpose | Description |
+| - | | |
+| Azure SQL server | Hosts the Azure SQL database instance. | Allows all Azure services to access the server. |
+| Azure SQL database | Stores data for your app. | Grants user assigned identity, read or write permission to the database. |
+| User assigned identity | Authenticates Azure service-to-service requests. | Shares across different capabilities and resources. |
</details> <br>
The following list shows the resource creation for different types of app and Az
<details> <summary><b>Resource creation for Azure API Management in the project</b></summary>
-|Resource|Purpose|
-|-|--|
+| Resource | Purpose |
+| - | |
| Microsoft Entra app for API management service | Allows Microsoft Power Platform access APIs managed by API management service. |
-| API management service | Manages your APIs hosted in function app. |
-| API management product | Group your APIs, define terms of use, and runtime policies. |
-| API management OAuth server | Enables Microsoft Power Platform to access your APIs hosted in function app. |
-| User assigned identity | Authenticates Azure service-to-service requests. |
+| API management service | Manages your APIs hosted in function app. |
+| API management product | Group your APIs, define terms of use, and runtime policies. |
+| API management OAuth server | Enables Microsoft Power Platform to access your APIs hosted in function app. |
+| User assigned identity | Authenticates Azure service-to-service requests. |
</details> <br>
The following list shows the resource creation for different types of app and Az
<details> <summary><b>Resource created when including Azure Key Vault in the project</b></summary>
-|Resource|Purpose of this resource|
-|-|--|
+| Resource | Purpose of this resource |
+| -- | |
| Azure Key Vault Service | Manage secrets (for example, Microsoft Entra app client secret) used by other Azure services. |
-| User Assigned Identity | Authenticates Azure service-to-service requests. |
+| User Assigned Identity | Authenticates Azure service-to-service requests. |
</details> <br>
Provision with ARM involves changing the following sets of files, parameters, an
* ARM parameter files (`azure.parameters.{your_env_name}.json`) located at `.fx\configs` folder, for passing parameters to templates. * ARM template files located at `templates\azure`, this folder contains following files:
- | File | Function | Allow customization |
- | | | |
- | main.bicep | Provides an entry point for Azure resource provision. | Yes |
- | provision.bicep | Creates and configures Azure resources. | Yes |
- | config.bicep | Adds TeamsFx required configurations to Azure resources. | Yes |
- | provision\xxx.bicep | Creates and configures each Azure resource consumed by `provision.bicep`. | Yes |
- | teamsfx\xxx.bicep | Adds TeamsFx required configurations to each Azure resource consumed by `config.bicep`.| No |
+ | File | Function | Allow customization |
+ | - | | - |
+ | main.bicep | Provides an entry point for Azure resource provision. | Yes |
+ | provision.bicep | Creates and configures Azure resources. | Yes |
+ | config.bicep | Adds TeamsFx required configurations to Azure resources. | Yes |
+ | provision\xxx.bicep | Creates and configures each Azure resource consumed by `provision.bicep`. | Yes |
+ | teamsfx\xxx.bicep | Adds TeamsFx required configurations to each Azure resource consumed by `config.bicep`. | No |
> [!NOTE] > When you add resources or capabilities to your project, `teamsfx\xxx.bicep` is regenerated, you can't customize the same. To modify the `bicep` files, you can use Git to track your changes to `teamsfx\xxx.bicep` files, which helps you not lose changes while adding resources or capabilities.
There are two types of parameters:
##### Microsoft Entra application-related parameters
-| Parameter name | Default value placeholder | Meaning of the placeholder | How to customize |
-| | | | |
-| Microsoft 365 ClientId | `{{state.fx-resource-aad-app-for-teams.clientId}}` | Your app's Microsoft Entra app client Id is created during provision. | [Use an existing Microsoft Entra app for your bot](#use-an-existing-azure-ad-app-for-your-bot-1). |
-| Microsoft 365 ClientSecret | `{{state.fx-resource-aad-app-for-teams.clientSecret}}` | Your app's Microsoft Entra app client secret is created during provision. | [Use an existing Microsoft Entra app for your Teams app](#use-an-existing-azure-ad-app-for-your-teams-app-1). |
-| Microsoft 365 TenantId | `{{state.fx-resource-aad-app-for-teams.tenantId}}` | Tenant Id of your app's Microsoft Entra app. | [Use an existing Microsoft Entra app for your Teams app](#use-an-existing-azure-ad-app-for-your-teams-app-1). |
-| Microsoft 365 OAuthAuthorityHost | `{{state.fx-resource-aad-app-for-teams.oauthHost}}` | OAuth authority host of your app's Microsoft Entra app. | [Use an existing Microsoft Entra app for your Teams app](#use-an-existing-azure-ad-app-for-your-teams-app-1). |
-| botAadAppClientId | `{{state.fx-resource-bot.botId}}` | Bot's Microsoft Entra app client Id created during provision. | [Use an existing Microsoft Entra app for your bot](#use-an-existing-azure-ad-app-for-your-bot-1). |
-| botAadAppClientSecret | `{{state.fx-resource-bot.botPassword}}` | Bot's Microsoft Entra app client secret is created during provision. | [Use an existing Microsoft Entra app for your bot](#use-an-existing-azure-ad-app-for-your-bot-1). |
+| Parameter name | Default value placeholder | Meaning of the placeholder | How to customize |
+| -- | | - | - |
+| Microsoft 365 ClientId | `{{state.fx-resource-aad-app-for-teams.clientId}}` | Your app's Microsoft Entra app client Id is created during provision. | [Use an existing Microsoft Entra app for your bot](#use-an-existing-azure-ad-app-for-your-bot-1). |
+| Microsoft 365 ClientSecret | `{{state.fx-resource-aad-app-for-teams.clientSecret}}` | Your app's Microsoft Entra app client secret is created during provision. | [Use an existing Microsoft Entra app for your Teams app](#use-an-existing-azure-ad-app-for-your-teams-app-1). |
+| Microsoft 365 TenantId | `{{state.fx-resource-aad-app-for-teams.tenantId}}` | Tenant Id of your app's Microsoft Entra app. | [Use an existing Microsoft Entra app for your Teams app](#use-an-existing-azure-ad-app-for-your-teams-app-1). |
+| Microsoft 365 OAuthAuthorityHost | `{{state.fx-resource-aad-app-for-teams.oauthHost}}` | OAuth authority host of your app's Microsoft Entra app. | [Use an existing Microsoft Entra app for your Teams app](#use-an-existing-azure-ad-app-for-your-teams-app-1). |
+| botAadAppClientId | `{{state.fx-resource-bot.botId}}` | Bot's Microsoft Entra app client Id created during provision. | [Use an existing Microsoft Entra app for your bot](#use-an-existing-azure-ad-app-for-your-bot-1). |
+| botAadAppClientSecret | `{{state.fx-resource-bot.botPassword}}` | Bot's Microsoft Entra app client secret is created during provision. | [Use an existing Microsoft Entra app for your bot](#use-an-existing-azure-ad-app-for-your-bot-1). |
##### Azure resource-related parameters
-| Parameter name | Default value placeholder | Meaning of the placeholder | How to customize |
-| | | | |
-| azureSqlAdmin | `{{state.fx-resource-azure-sql.admin}}` | Azure SQL Server admin account you provided during provision. | Delete the placeholder and fill the actual value. |
+| Parameter name | Default value placeholder | Meaning of the placeholder | How to customize |
+| | -- | -- | - |
+| azureSqlAdmin | `{{state.fx-resource-azure-sql.admin}}` | Azure SQL Server admin account you provided during provision. | Delete the placeholder and fill the actual value. |
| azureSqlAdminPassword | `{{state.fx-resource-azure-sql.adminPassword}}` | Azure SQL Server admin password you provided during provision. | Delete the placeholder and fill the actual value. | #### Reference environment variables in parameter files
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md
Teams platform features that are available to all app developers.
**2024 January**
+* ***January 24, 2024***: [Introduced advanced step-by-step guide to learn how to debug your AI chat bot using Teams App Test Tool.](sbs-teams-app-test-tool.yml)
* ***January 19, 2024***: [Use / to invoke message extensions from command box in the new Teams client.](messaging-extensions/build-bot-based-message-extension.md) * ***January 04, 2024***: [Apps for Teams meetings are available in Department of Defense (DOD) environment.](apps-in-teams-meetings/teams-apps-in-meetings.md)