Updates from: 04/01/2022 01:49:56
Service Microsoft Docs article Related commit history on GitHub Change details
platform Meeting App Extensibility https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/meeting-app-extensibility.md
Title: Unified meetings apps
-description: Learn about Meeting lifecycle, building user's meeting experience throughout meeting lifecycle in desktop and mobile environment, participant roles and user types. In addition, learn about integrating bots and messaging extension in meeting lifecycle.
+description: Learn about Teams meeting lifecycle and user's meeting experience in desktop and mobile environment, participant and user roles and types, integrate bots and messaging extension in meeting lifecycle.
ms.localizationpriority: none
platform Registering Calling Bot https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/registering-calling-bot.md
You must configure the application permissions for your bot in advance by using
For apps using the Azure AD V1 endpoint, a tenant administrator can consent to the application permissions using the [Microsoft Azure portal](https://portal.azure.com) when your app is installed in their organization. Alternately, you can provide a sign-up experience in your app through which administrators can consent to the permissions you configured. Once administrator consent is recorded by Azure AD, your app can request tokens without having to request consent again.
-You can rely on an administrator to grant the permissions your app needs at the [Microsoft Azure portal](https://portal.azure.com). A better option is to provide a sign-up experience for administrators by using the Azure AD V2 `/adminconsent` endpoint. For more information, see [instructions on constructing an Admin consent URL](/graph/uth-v2-service#3-get-administrator-consent).
+You can rely on an administrator to grant the permissions your app needs at the [Microsoft Azure portal](https://portal.azure.com). A better option is to provide a sign-up experience for administrators by using the Azure AD V2 `/adminconsent` endpoint. For more information, see [instructions on constructing an Admin consent URL](/graph/auth-v2-service#3-get-administrator-consent).
> [!NOTE] > To construct the tenant Admin consent URL, a configured redirect URI or reply URL in the [app registration portal](https://apps.dev.microsoft.com/) is required. To add reply URLs for your bot, access your bot registration, choose **Advanced Options** > **Edit Application Manifest**. Add your redirect URL to the `replyUrls` collection.
Follow the [step-by-step guide](../../sbs-calling-and-meeting.yml) to set up cal
* [Incoming call notifications](~/bots/calls-and-meetings/call-notifications.md) * [Develop calling and online meeting bots on your local PC](~/bots/calls-and-meetings/debugging-local-testing-calling-meeting-bots.md)
+* [View app permission and grant admin consent](/MicrosoftTeams/app-permissions-admin-center)
platform Bots Filesv4 https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/bots-filesv4.md
Title: Send and receive files through the bot
-description: Learn how to send and receive files through the bot, use Graph APIs for all Teams scopes, use Teams bot APIs using code examples and samples.
+description: Learn how to send and receive files through the bot using Graph APIs for personal, channel and groupchat scopes. Use Teams bot APIs using code samples based on the v4 Bot Framework SDK.
keywords: teams bots files send receive Last updated 05/20/2019 ms.localizationpriority: medium
platform Send Proactive Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/send-proactive-messages.md
Title: Send proactive messages
-description: Describes how to send proactive messages with your Microsoft Teams bot.
+description: Learn how to send proactive messages with your Microsoft Teams bot, proactively install your app using Microsoft Graph and check the code samples based on Bot Framework SDK v4.
ms.localizationpriority: high
platform Locally With An Ide https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/debug/locally-with-an-ide.md
There are two methods for uploading your app:
> [!NOTE] > To alter the manifest and re-upload your app, [delete the bot](#delete-a-bot-from-teams) before uploading the altered app package.
-> To test the bot, enable sideloading in Teams. See [enable sideloading](/concepts/build-and-test/prepare-your-o365-tenant#enable-custom-teams-apps-and-turn-on-custom-app-uploading).
+> To test the bot, enable sideloading in Teams. See [enable sideloading](/microsoftteams/platform/concepts/build-and-test/prepare-your-o365-tenant#enable-custom-teams-apps-and-turn-on-custom-app-uploading).
## Debug your bot locally
platform Apps Upload https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/apps-upload.md
You don't have to sideload your app again if you make code changes (these are re
To remove your app, right click the app icon in Teams and select **Uninstall**. > [!NOTE]
-> You can't remove personal bot activity entirely. If you remove the app and add it again, new communication with the bot appends to the previous conversation with it.
+>
+> * You can't remove personal bot activity entirely. If you remove the app and add it again, new communication with the bot appends to the previous conversation with it.
+> * Currently, you can't migrate your custom app to the Teams store. If you want to list your app to the Teams store, see [Publish your app to the Microsoft Teams store](appsource/publish.md).
## Next step
platform Activity Feed Notifications https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/design/activity-feed-notifications.md
Title: Designing activity feed notifications
-description: Learn how to design activity feed notifications for your Teams app and get the Microsoft Teams UI Kit.
+description: Learn how to design activity feed notifications for your Teams app and get the Teams UI Kit. Develop notifications from Teams channel in Visual Studio C#
ms.localizationpriority: medium
platform Get Started Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/get-started/get-started-overview.md
If you are already familiar with Yeoman workflow, you may prefer using [YoTeams
Now, let's build your first Teams app. But first, pick your language (or framework) and prepare your development environment. > [!div class="nextstepaction"]
-> [Build a Teams app with Blazor](../sbs-gs-blazorapp.yml)
+> [Build a Teams app with Blazor](../sbs-gs-blazorupdate.yml)
> [!div class="nextstepaction"] > [Build a Teams app with JavaScript using React](../sbs-gs-javascript.yml) > [!div class="nextstepaction"]
platform Extend M365 Teams Personal Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/m365-apps/extend-m365-teams-personal-tab.md
You can pin the app for quick access, or you can find your app in the ellipses (
## Preview your personal tab in other Microsoft 365 experiences
-When you upgrade your Teams personal tab and sideload it in Teams, it will also run in Outlook desktop and web clients and Office on the web (office.com). Here's how to preview it from those Microsoft 365 experiences.
+When you upgrade your Teams personal tab and sideload it in Teams, it runs in Outlook on Windows, on the web, Office on Windows and on the web (office.com). Here's how to preview it from those Microsoft 365 experiences.
-### Outlook
+### Outlook on Windows
To view your app running in Outlook on Windows desktop:
To view your app in Outlook on the web:
:::image type="content" source="images/outlook-web-more-apps.png" alt-text="Click on the ellipses ('More apps') option on the side bar of outlook.com to see your installed personal tabs":::
-### Office
+### Office on Windows
To view your app running in Office on Windows desktop:
platform Bots Conv Proactive https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/bot-v3/bot-conversations/bots-conv-proactive.md
Title: Proactive messages
-description: Describes bots can start a conversation in Microsoft Teams
+ Title: Proactive messaging for bots
+description: Learn how to use proactive messaging for bots in Microsoft Teams
ms.localizationpriority: medium keywords: teams scenarios proactive messaging conversation bot
platform Bots Files https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/bot-v3/bots-files.md
Title: Sending and receiving files from a bot
-description: Describes how to send and receive files from a bot
+description: Learn how to send and receive files through the bot using Graph APIs for personal, channel and groupchat scopes. Use Teams bot APIs using code samples based on the v3 Bot Framework SDK.
keywords: teams bots files send receive ms.localizationpriority: medium
platform Create Messaging Extension Using Appstudio https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/create-messaging-extension-using-appstudio.md
The heart of your messaging extension is your web service. It will define a sing
## Register your web service with the Bot Framework
-Messaging extensions take advantage of the Bot Framework's messaging schema and secure communication protocol; if you don't already have one you'll need to register your web service on the Bot Framework. The Microsoft App Id (we'll refer to this as your Bot Id from inside of Teams, to identify it from other App Id's you might be working with) and the messaging endpoint your register with the Bot Framework will be used in your messaging extension to receive and respond to requests. If you're using an existing registration, make sure you [enable the Microsoft Teams channel](/azure/bot-service/bot-service-manage-channels.md?preserve-view=true&view=azure-bot-service-4.0).
+Messaging extensions take advantage of the Bot Framework's messaging schema and secure communication protocol; if you don't already have one you'll need to register your web service on the Bot Framework. The Microsoft App Id (we'll refer to this as your Bot Id from inside of Teams, to identify it from other App Id's you might be working with) and the messaging endpoint your register with the Bot Framework will be used in your messaging extension to receive and respond to requests. If you're using an existing registration, make sure you [enable the Microsoft Teams channel](/azure/bot-service/bot-service-manage-channels?preserve-view=true&view=azure-bot-service-4.0).
If you follow one of the quickstarts or start from one of the available samples you'll be guided through registering your web service. If you want to manually register your service you have three options to do so. If you choose to register without using an Azure subscription you will not be able to take advantage of the simplified OAuth authentication flow provided by the Bot Framework. You will be able to migrate your registration to Azure after creation.
platform Manifest Schema https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema.md
Specify meeting extension definition. For more information, see [custom Together
**Optional** ΓÇö object
+> [!NOTE]
+> If you set the `manifestVersion` property to **1.12**, the authorization property is incompatible with the older versions of the manifest.
+> Authorization is supported for manifest version 1.12.
+ Specify and consolidate authorization related information for the app. |Name| Type|Maximum size|Required |Description|
platform App Templates https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/app-templates.md
Title: Microsoft Teams app templates
-description: Links and descriptions of app templates for the Microsoft Teams platform
+description: Learn how to use app templates for Microsoft Teams platform with detailed instructions for deploying and installing an app.
keywords: Microsoft Teams templates samples demo ms.localizationpriority: medium
To provide feedback, see [App template feedback](https://forms.office.com/Pages/
* [Understand Microsoft Teams app capabilities](../concepts/capabilities-overview.md) * [Designing your personal app for Microsoft Teams](../concepts/design/personal-apps.md) * [Design System](../concepts/design/design-teams-app-fundamentals.md)
+* [Transition conversations from bot to human](/azure/bot-service/bot-service-design-pattern-handoff-human)
platform Integrating Web Apps https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/integrating-web-apps.md
The following are the prerequisites to integrate your app with Teams.
***Integration scenarios**: SharePoint*
-To integrate an existing [SharePoint page](/MicrosoftTeams/teams-standalone-static-tabs-using-spo-sites) as a Teams tab, you must consider the following:
+To integrate an existing [SharePoint page](/sharepoint/dev/general-development/overview-of-the-sharepoint-page-model) as a Teams tab, you must consider the following:
* It must be a *modern* SharePoint online page. * Only personal tabs are supported. You cannot integrate your page as a channel tab.
platform Create Channel Group Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/create-channel-group-tab.md
description: A quickstart guide to creating a channel and group tab with the Yeo
ms.localizationpriority: medium
+zone_pivot_groups: teams-app-environment
-# Create a channel or group tab
+# Channel or group tab
-## Create a custom channel or group tab
+Channel or group tabs deliver content to channels and group chats, and are a great way to create collaborative spaces around dedicated web-based content.
-You can create a channel or group tab using Node.js and the Yeoman Generator, ASP.NETCore, or ASP.NETCore MVC. For a channel or group tab on Microsoft Teams mobile, see [tabs on mobile](~/tabs/design/tabs-mobile.md).
-# [Node.js](#tab/nodejs)
+## Create a custom channel or group tab with Node.js
-### Create a custom channel and group tab using Node.js and the Yeoman Generator
+1. At the command prompt, install the [Yeoman](https://yeoman.io/) and [gulp-cli](https://www.npmjs.com/package/gulp-cli) packages by entering the following command after installing the **Node.js**:
-> [!NOTE]
-> This article follows the steps outlined in the [build Your first Microsoft Teams app](https://github.com/OfficeDev/generator-teams/wiki/Build-Your-First-Microsoft-Teams-App) Wiki found in the Microsoft OfficeDev GitHub repository.
-
-You can create a custom channel or group tab using the [Teams Yeoman generator](https://github.com/OfficeDev/generator-teams/).
-
-### Prerequisites for apps
-
-You must have an understanding of the following prerequisites:
-
-* You must have an Office 365 tenant and a team configured with **Allow uploading custom apps** enabled. For more information, see [prepare your Office 365 tenant](~/concepts/build-and-test/prepare-your-o365-tenant.md).
-
- > [!NOTE]
- > If you do not currently have an Office 365 account, you can sign up for a free subscription through the Office 365 Developer Program. The subscription remains active as long as you are using it for ongoing development. See [welcome to the Office 365 Developer Program](/office/developer-program/microsoft-365-developer-program).
-
-In addition, this project requires that you have the following installed in your development environment:
-
-* Any text editor or IDE. You can install and use [Microsoft Visual Studio Code](https://code.visualstudio.com/download) for free.
-
-* [Node.js/npm](https://nodejs.org/en/). Use the latest LTS version. The Node Package Manager (npm) installs in your system with the installation of Node.js.
-
-* After you have successfully installed Node.js, install the [Yeoman](https://yeoman.io/) and [gulp-cli](https://www.npmjs.com/package/gulp-cli) packages by entering the following in your command prompt:
-
- ```bash
+ ```cmd
npm install yo gulp-cli --global ```
-* Install the Microsoft Teams Apps generator by entering the following in your command prompt:
+2. At the command prompt, install Microsoft Teams App generator by entering the following command:
- ```bash
+ ```cmd
npm install generator-teams --global ```
-### Generate your project
+Following are the steps to create a channel or group tab:
-**To generate your project**
+* [Generate your application with a channel or group tab](#generate-your-application-with-a-channel-or-group-tab)
+* [Create your app package](#create-your-app-package)
+* [Build and run your application](#build-and-run-your-application)
+* [Establish a secure tunnel to your tab](#establish-a-secure-tunnel-to-your-tab)
+* [Upload your application to Teams](#upload-your-application-to-teams)
-1. At a command prompt, create a new directory for your tab project.
+### Generate your application with a channel or group tab
-1. To start the generator, go to your new directory and type the following command:
+1. At the command prompt, create a new directory for your channel or group tab.
- ```bash
+1. Enter the following command in your new directory to start the Microsoft Teams App generator:
+
+ ```cmd
yo teams ```
-1. Next, provide a series of values that are used in your application's **manifest.json** file:
+1. Provide your values to a series of questions prompted by Microsoft Teams App generator to update your **manifest.json** file:
![generator opening screenshot](/microsoftteams/platform/assets/images/tab-images/teamsTabScreenshot.PNG)
- **What is your solution name?**
-
- This is your project name. You can accept the suggested name by selecting the **Enter** key.
-
- **Where do you want to place the files?**
-
- You are currently in your project directory. Select **Enter**.
-
- **Title of your Microsoft Teams app project?**
-
- This is your app package name and will be used in the app manifest and description. Enter a title or select **Enter** to accept the default name.
+ <details>
+ <summary><b>Series of questions to update your manifest.json file</b></summary>
- **Your (company) name? (max 32 characters)**
+ * **What is your solution name?**
- Your company name will be used in the app manifest. Enter a company name or select **Enter** to accept the default name.
+ The solution name is your project name. You can accept the suggested name by selecting **Enter**.
- **Which manifest version would you like to use?**
+ * **Where do you want to place the files?**
- Select the default schema.
+ You're currently in your project directory. Select **Enter**.
- **Quick scaffolding? (Y/n)**
+ * **Title of your Microsoft Teams app project?**
- The default is yes; enter **n** to enter your Microsoft Partner Id.
+ The title is your app package name and is used in the app manifest and description. Enter a title or select **Enter** to accept the default name.
- **Enter your Microsoft Partner Id, if you have one? (Leave blank to skip)**
+ * **Your (company) name? (max 32 characters)**
- This field is not required and should only be used if you are already part of the [Microsoft Partner Network](https://partner.microsoft.com).
+ Your company name will be used in the app manifest. Enter a company name or select **Enter** to accept the default name.
- **What do you want to add to your project?**
+ * **Which manifest version would you like to use?**
- Select **( &ast; ) A Tab**.
+ Select the default schema.
- **The URL where you will host this solution?**
+ * **Quick scaffolding? (Y/n)**
- By default the generator suggests an Azure Web Sites URL. You are only testing your app locally, therefore, a valid URL is not necessary.
+ The default is yes; enter **n** to enter your Microsoft Partner ID.
- **Would you like show a loading indicator when your app/tab loads?**
+ * **Enter your Microsoft Partner Id, if you have one? (Leave blank to skip)**
- Choose **not** to include a loading indicator when your app or tab loads. The default is no, enter **n**.
+ This field isn't required and must be used only if you're already part of the [Microsoft Partner Network](https://partner.microsoft.com).
- **Would you like personal apps to be rendered without a tab header-bar?**
+ * **What do you want to add to your project?**
- Choose **not** to include personal apps to be rendered without a tab header-bar. Default is no, enter **n**.
+ Select **( &ast; ) A Tab**.
- **Would you like to include Test framework and initial tests? (y/N)**
+ * **The URL where you will host this solution?**
- Choose **not** to include a test framework for this project. The default is yes; enter **n**.
+ By default, the generator suggests an Azure Web Sites URL. You're only testing your app locally, so a valid URL isn't necessary.
- **Would you like to use Azure Applications Insights for telemetry? (y/N)**
+ * **Would you like show a loading indicator when your app/tab loads?**
- Choose **not** to include [Azure Application Insights](/azure/azure-monitor/app/app-insights-overview). The default is no; enter **n**.
+ Choose **not** to include a loading indicator when your app or tab loads. The default is no, enter **n**.
- **Default Tab Name (max 16 characters)?**
+ * **Would you like personal apps to be rendered without a tab header-bar?**
- Name your tab. This tab name will be used throughout your project as a file or URL path component.
+ Choose **not** to include personal apps to be rendered without a tab header-bar. Default is no, enter **n**.
- **What kind of Tab would you like to create?**
+ * **Would you like to include Test framework and initial tests? (y/N)**
- Use the arrow keys to select **Configurable** tab.
+ Choose **not** to include a test framework for this project. The default is no, enter **n**.
- **What scopes do you intend to use for your Tab?**
+ * **Would you like to include ESLint support? (y/N)**
- You can select a team or a group chat.
+ Choose not to include ESLint support. The default is no, enter **n**.
- **Do you require Microsoft Azure Active Directory (Azure AD) Single-Sign-On support for the tab?**
+ * **Would you like to use Azure Applications Insights for telemetry? (y/N)**
- Choose **not** to include Microsoft Azure Active Directory (Azure AD) Single-Sign-On support for the tab. The default is yes, enter **n**.
+ Choose **not** to include [Azure Application Insights](/azure/azure-monitor/app/app-insights-overview). The default is no; enter **n**.
- **Do you want this tab to be available in SharePoint Online? (Y/n)**
+ * **Default Tab Name (max 16 characters)?**
- Enter **n**.
+ Name your tab. This tab name is used throughout your project as a file or URL path component.
- > [!IMPORTANT]
- > The path component **yourDefaultTabNameTab**, is the value that you entered in the generator for **Default Tab Name** plus the word **Tab**.
- >
- > For example: DefaultTabName: **MyTab** > **/MyTabTab/**
+ * **What kind of Tab would you like to create?**
-1. In Visual Studio Code or any code editor, go to your project directory and open the following file:
+ Use the arrow keys to select **Configurable** tab.
- ```bash
- ./src/app/scripts/<yourDefaultTabNameTab>/<yourDefaultTabNameTab>.tsx
- ```
+ * **What scopes do you intend to use for your Tab?**
-1. Locate the `render()` method and add the following `<div>` tag and content to the top of the `<PanelBody>` container code:
+ You can select a team or a group chat.
- ```html
- <PanelBody>
- <div style={styles.section}>
- Hello World! Yo Teams rocks!
- </div>
- </PanelBody>
- ```
+ * **Do you require Microsoft Azure Active Directory (Azure AD) Single-Sign-On support for the tab?**
-1. Make sure to save the updated file.
+ Choose **not** to include Microsoft Azure Active Directory (Azure AD) Single-Sign-On support for the tab. The default is yes, enter **n**.
-### Build and run your application
+ * **Do you want this tab to be available in SharePoint Online? (Y/n)**
-At a command prompt, open your project directory to complete the next tasks.
+ Enter **n**.
-#### Create the app package
+ </details>
-You must have an app package to test your tab in Teams. It is a zip folder that contains the following required files:
+> [!IMPORTANT]
+> The path component **yourDefaultTabNameTab** is the value that you entered in the generator for **Default Tab Name** plus the word **Tab**.
+>
+> For example: DefaultTabName is **MyTab** then **/MyTabTab/**
-* A **full color icon** measuring 192 x 192 pixels.
-* A **transparent outline icon** measuring 32 x 32 pixels.
-* A **manifest.json** file that specifies the attributes of your app.
+### Create your app package
-The package is created through a gulp task that validates the manifest.json file and generates the zip folder in the **./package directory**. In the command prompt, enter the following command:
+You must have an app package to build and run your application in Teams. The app package is created through a gulp task that validates the **manifest.json** file and generates the zip folder in the **./package** directory. At the command prompt, enter the following command:
-```bash
+```cmd
gulp manifest ```
+### Build and run your application
+ #### Build your application
-The build command transpiles your solution into the **./dist** folder. Enter the following command in the command prompt:
+Enter the following command at the command prompt to transpile your solution into the **./dist** folder:
-```bash
+```cmd
gulp build ```
-#### Run your application in localhost
+#### Run your application
-1. Start a local web server by entering the following in the command prompt:
+1. At the command prompt enter the following command to start a local web server:
```bash gulp serve ```
-1. Enter `http://localhost:3007/<yourDefaultAppNameTab>/` in your browser, replace **yourDefaultAppNameTab** with your tab name, and view your application's home page as shown in the following image:
+1. Enter `http://localhost:3007/<yourDefaultAppNameTab>/` in your browser to view your application's home page.
- ![home page screenshot](~/assets/images/tab-images/homePage.png)
+ :::image type="content" source="~/assets/images/tab-images/homePage.png" alt-text="Default Tab" border="true":::
1. To view your tab configuration page, go to `https://localhost:3007/<yourDefaultAppNameTab>/config.html`. The following is shown:
- ![Configuration page screenshot](~/assets/images/tab-images/configurationPage.png)
+ :::image type="content" source="~/assets/images/tab-images/configurationPage.png" alt-text="Tab configuration page" border="true":::
### Establish a secure tunnel to your tab
-Microsoft Teams is a cloud-based product and requires that your tab content be available from the cloud using HTTPS endpoints. Teams does not allow local hosting. You must either publish your tab to a public URL or use a proxy that exposes your local port to an internet-facing URL.
-
-To test your tab extension, use [ngrok](https://ngrok.com/docs), which is built into this application. Ngrok is a reverse proxy software tool that creates a tunnel to your locally running web server's publicly-available HTTPS endpoints. Your server's web endpoints are available during the current session on your computer. When the computer is shut down or goes to sleep the service is no longer available.
+To establish a secure tunnel to your tab, exit the localhost and enter the following command:
-In your command prompt, exit localhost and enter the following:
-
-```bash
+```cmd
gulp ngrok-serve ``` > [!IMPORTANT]
-> After your tab has been uploaded to Microsoft Teams and successfully saved, you can view it in the tabs gallery, add it to the tabs bar, and interact with it until your ngrok tunnel session ends. If you restart your ngrok session, you must update your app with the new URL.
+> After your tab is uploaded to Microsoft Teams through **ngrok**, and successfully saved, you can view it in Teams until your tunnel session ends. If you restart your ngrok session, you must update your app with the new URL.
### Upload your application to Teams
-**To upload your application to Teams**
+1. Go to Microsoft Teams and select **Store**&nbsp;:::image type="content" source="~/assets/images/tab-images/store.png" alt-text="Teams Store":::.
+1. Select **Manage your apps**.
+1. Select **Publish an app** and **Upload a custom app**.
-1. Go to Microsoft Teams. If you use the [web-based version](https://teams.microsoft.com) you can inspect your front-end code using your browser's [developer tools](~/tabs/how-to/developer-tools.md).
-1. From your teams on the left pane, select the ellipses &#x25CF;&#x25CF;&#x25CF; next to the team that you are using to test your tab and choose **Manage team**.
-1. In the main pane, select **Apps** from the tab bar and choose **Upload a custom app** located in the lower right corner of the page.
-1. Go your project directory, browse to the **./package** folder, select the app package zip folder, and choose **Open**.
+ :::image type="content" source="~/assets/images/tab-images/publish-app.png" alt-text="Upload custom app" border="true":::
- ![Channel tab added](../../assets/images/tab-images/channeltabadded.png)
+1. Go to your project directory, browse to the **./package** folder, select the app package zip folder, and choose **Open**.
+
+ :::image type="content" source="~/assets/images/tab-images/channeltabadded.png" alt-text="Uploaded channel tab" border="true":::
-1. Select **Add** in the pop-up dialog box. Your tab uploads into Teams.
-1. Return to your team, choose the channel where you want to display the tab, select Γ₧ò from the tab bar, and choose your tab from the gallery.
+1. Select **Add** in the pop-up window. Your tab is uploaded to Teams.
+
+ > [!NOTE]
+ > If **Add** doesn't display in the dialog box then remove the following code from the manifest of the uploaded app package zip folder. Again zip the folder and upload it to Teams.
+ >
+ >```Json
+ >"staticTabs": [],
+ >"bots": [],
+ >"connectors": [],
+ >"composeExtensions": [],
+ >```
+
+1. Return to your team, choose the channel where you want to add the tab, select Γ₧ò from the tab bar, and choose your tab from the list.
1. Follow the directions for adding a tab. There is a custom configuration dialog box for your channel or group tab. 1. Select **Save** and your tab is added to the channel's tab bar.
- ![Channel tab uploaded](../../assets/images/tab-images/channeltabuploaded.png)
-
-# [ASP.NET Core](#tab/aspnetcore)
-
-### Create a custom channel or group tab with ASP.NET Core
+ :::image type="content" source="~/assets/images/tab-images/channeltabuploaded.png" alt-text="Channel tab uploaded" border="true":::
-You can create a custom channel or group tab using C# and ASP.Net Core Razor page. [App Studio for Microsoft Teams](~/concepts/build-and-test/app-studio-overview.md) is also used to finalize your app manifest and deploy your tab to Teams.
-### Prerequisites for Teams apps
-You must have an understanding of the following prerequisites:
+## Create a custom channel or group tab with ASP.NET Core
-- You must have an Office 365 tenant and a team configured with **Allow uploading custom apps** enabled. For more information, see [prepare your Office 365 tenant](~/concepts/build-and-test/prepare-your-o365-tenant.md).
+1. At the command prompt, create a new directory for your tab project.
- > [!NOTE]
- > If you do not currently have a Microsoft 365 account, you can sign up for a free subscription through the [Microsoft Developer Program](https://developer.microsoft.com/microsoft-365/dev-program). The subscription remains active as long as you are using it for ongoing development.
-
-* Use App Studio to import your application to Teams. To install App Studio, select **Apps** ![Store App](~/assets/images/tab-images/storeApp.png) at the lower left corner of the Teams app, and search for **App Studio**. After you find the tile, select it and choose **Add** in the pop-up dialog box to install it.
-
-In addition, this project requires that you have the following installed in your development environment:
+1. Clone the sample repository into your new directory using the following command or you can download the [source code](https://github.com/OfficeDev/Microsoft-Teams-Samples) and extract the files:
-* The current version of the Visual Studio IDE with the **.NET CORE cross-platform development** workload installed. If you do not already have Visual Studio, you can download and install the latest [Microsoft Visual Studio Community](https://visualstudio.microsoft.com/downloads) version for free.
-
-* The [ngrok](https://ngrok.com) reverse proxy tool. Use ngrok to create a tunnel to your locally running web server's publicly-available HTTPS endpoints. You can [download ngrok](https://ngrok.com/download).
+ ```cmd
+ git clone https://github.com/OfficeDev/Microsoft-Teams-Samples.git
+ ```
-### Get the source code
+Following are the steps to create a channel or group tab:
-At a command prompt, create a new directory for your tab project. A simple project is provided to get you started. Clone the sample repository into your new directory using the following command:
+* [Generate your application with a channel or group tab](#generate-your-application-with-a-channel-or-group-tab-1)
+* [Establish a secure tunnel to your tab](#establish-a-secure-tunnel-to-your-tab-1)
+* [Update your application](#update-your-application)
+* [Build and run your application](#build-and-run-your-application-1)
+* [Update your app package with Developer Portal](#update-your-app-package-with-developer-portal)
+* [Preview your app in Teams](#preview-your-app-in-teams)
-```bash
-git clone https://github.com/OfficeDev/microsoft-teams-sample-tabs.git
-```
+### Generate your application with a channel or group tab
-Alternately, you can retrieve the source code by downloading the zip folder and extracting the files.
+1. Open Visual Studio and select **Open a project or solution**.
-**To build and run the tab project**
+1. Go to **Microsoft-Teams-Samples** > **samples** > **tab-channel-group** > **razor-csharp** folder and open **channelGroupTab.sln**.
-1. After you have the source code, go to Visual Studio and select **Open a project or solution**.
-1. Go to the tab application directory and open **ChannelGroupTab.sln**.
-1. To build and run your application, press **F5** or choose **Start Debugging** from the **Debug** menu.
-1. In a browser, go to the following URLs and verify the application loaded properly:
+1. In Visual Studio, press **F5** or choose **Start Debugging** from your application's **Debug** menu to verify if the application has loaded properly. In a browser, go to the following URLs:
- * `http://localhost:44355`
- * `http://localhost:44355/privacy`
- * `http://localhost:44355/tou`
+ * https://localhost:3978/
+ * https://localhost:3978/privacy
+ * https://localhost:3978/tou
-### Review the source code
+<details>
+<summary><b>Review the source code</b></summary>
#### Startup.cs
-This project was created from an ASP.NET Core 2.2 Web Application empty template with the **Advanced * Configure for HTTPS** check box selected at setup. The MVC services are registered by the dependency injection framework's `ConfigureServices()` method. Additionally, the empty template does not enable serving static content by default, so the static files middleware is added to the `Configure()` method using the following code:
+This project was created from an ASP.NET Core 3.1 web application empty template with the **Advanced * Configure for HTTPS** check box selected at setup. The MVC services are registered by the dependency injection framework's `ConfigureServices()` method. Additionally, the empty template does not enable serving static content by default, so the static files middleware is added to the `Configure()` method using the following code:
```csharp public void ConfigureServices(IServiceCollection services)
In the Visual Studio Solution Explorer window, right-click on the project and se
</ItemGroup> ```
-### Establish a secure tunnel to your tab for Teams
-
-Microsoft Teams is a cloud-based product and requires that your tab content be available from the cloud using HTTPS endpoints. Teams does not allow local hosting. You must either publish your tab to a public URL, or use a proxy that exposes your local port to an internet-facing URL.
-
-To test your tab, use [ngrok](https://ngrok.com/docs). Your server's web endpoints are available while ngrok is running on your computer. In the free version of ngrok, if you close ngrok, the URLs are different the next time you start it.
+</details>
-* At a command prompt in the root of your project directory, run the following command:
+### Establish a secure tunnel to your tab
- ```bash
- ngrok http https://localhost:44355 -host-header="localhost:44355"
- ```
+At the command prompt in the root of your project directory run the following command to establish a secure tunnel to your tab:
-* Ngrok listens to requests from the internet and routes them to your application when it is running on port 44355. It should resemble `https://y8rCgT2b.ngrok.io/` where **y8rCgT2b** is replaced by your ngrok alpha-numeric HTTPS URL.
+```cmd
+ngrok http 3978 --host-header=localhost
+```
-* Ensure that you keep the command prompt with ngrok running and make a note of the URL.
+Ensure that you keep the command prompt with ngrok running and make a note of the URL.
### Update your application
-Within **Tab.cshtml** the application presents the user with two option buttons for displaying the tab with either a red or gray icon. Choosing the **Select Gray** or **Select Red** button triggers `saveGray()` or `saveRed()`, respectively, sets `settings.setValidityState(true)`, and enables the **Save** button on the configuration page. This code lets Teams know that you have completed the configuration requirements and the installation can proceed. The parameters of `settings.setSettings` are set. Finally, `saveEvent.notifySuccess()` is called to indicate that the content URL has been successfully resolved.
-
-#### _Layout.cshtml
-
-For your tab to display in Teams, you must include the **Microsoft Teams JavaScript client SDK** and include a call to `microsoftTeams.initialize()` after your page loads. This is how your tab and the Teams client communicate:
-
-Go to the **Shared** folder, open **_Layout.cshtml**, and add the following to the `<head>` tag:
-
-```html
-<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script>
-<script src="https://statics.teams.cdn.office.net/sdk/v1.6.0/js/MicrosoftTeams.min.js"></script>
-```
-
-> [!IMPORTANT]
-> Do not copy and paste the `<script src="...">` URLs from this page, as they do not represent the latest version. To get the latest version of the SDK, always go to [Microsoft Teams JavaScript API](https://www.npmjs.com/package/@microsoft/teams-js).
-
-#### Tab.cshtml
+1. Go to the **Pages** > **Shared** folder and open **_Layout.cshtml**, and add the following to the <head> tags section:
-**To update Tab.cshtml**
+ ```html
+ <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script>
+ <script src="https://statics.teams.cdn.office.net/sdk/v1.6.0/js/MicrosoftTeams.min.js"></script>
+ ```
+
+ > [!IMPORTANT]
+ > Do not copy and paste the `<script src="...">` URLs from this page, as they do not represent the latest version. To get the latest version of the SDK, always go to [Microsoft Teams JavaScript API](https://www.npmjs.com/package/@microsoft/teams-js).
+
+1. At the top of the `script` tag, insert a call to `microsoftTeams.initialize();`.
-1. Open **Tab.cshtml** in Visual Studio and update the embedded `<script>`.
+1. Go to the **Pages** folder and open **Tab.cshtml**
-1. At the top of the script, call `microsoftTeams.initialize()`.
+ Within **Tab.cshtml** the application presents the user with two option buttons for displaying the tab with either a red or gray icon. Choosing the **Select Gray** or **Select Red** button triggers `saveGray()` or `saveRed()`, respectively, sets `settings.setValidityState(true)`, and enables the **Save** button on the configuration page. This code lets Teams know that you have completed the configuration requirements and the installation can proceed. The parameters of `settings.setSettings` are set. Finally, `saveEvent.notifySuccess()` is called to indicate that the content URL has been successfully resolved.
1. Update the `websiteUrl` and `contentUrl` values in each function with the HTTPS ngrok URL to your tab. Your code should now include the following with **y8rCgT2b** replaced with your ngrok URL: ```javascript
- microsoftTeams.initialize();
-
+
let saveGray = () => { microsoftTeams.settings.registerOnSaveHandler(function (saveEvent) { microsoftTeams.settings.setSettings({
Go to the **Shared** folder, open **_Layout.cshtml**, and add the following to t
1. Save the updated **Tab.cshtml**.
-### Build and run your application for Teams
-
-**To build and run your application**
+### Build and run your application
1. In Visual Studio, press **F5** or choose **Start Debugging** from the **Debug** menu.
-1. Verify that **ngrok** is running and working properly by opening your browser and going to your content page via the ngrok HTTPS URL that was provided in your command prompt window.
-
-> [!TIP]
-> You need to have both your application in Visual Studio and ngrok running to complete the steps provided in this article. If you need to stop running your application in Visual Studio to work on it, **keep ngrok running**. It listens and resumes routing your application's request when it restarts in Visual Studio. If you have to restart the ngrok service it returns a new URL and you have to update your application with the new URL.
-### Upload your tab for Teams
+1. Verify that **ngrok** is running and working properly by opening your browser and going to your content page via the ngrok HTTPS URL that was provided in your command prompt window.
-> [!NOTE]
-> App Studio can be used to edit your **manifest.json** file and upload the completed package to Teams. You can also manually edit the **manifest.json** file. If you do, ensure that you build the solution again to create the **tab.zip** file to upload.
+ > [!TIP]
+ > You need to have both your application in Visual Studio and ngrok running to complete the steps provided in this article. If you need to stop running your application in Visual Studio to work on it, **keep ngrok running**. It listens and resumes routing your application's request when it restarts in Visual Studio. If you have to restart the ngrok service it returns a new URL and you have to update your application with the new URL.
-**To upload your tab with App Studio**
+### Update your app package with Developer Portal
1. Go to Microsoft Teams. If you use the [web-based version](https://teams.microsoft.com), you can inspect your front-end code using your browser's [developer tools](~/tabs/how-to/developer-tools.md).
-1. Go to **App Studio** and select the **Manifest editor** tab.
+1. Navigate to your **Developer portal** in Teams.
+
+1. Open **Apps** and select **Import app**.
-1. Select **Import an existing app** in the **Manifest editor** to begin updating the app package for your tab. The source code comes with its own partially complete manifest. The name of your app package is **tab.zip**. It is available from the following path:
+1. The name of your app package is **tab.zip**. It's available in the following path:
```bash
- /bin/Debug/netcoreapp2.2/tab.zip
+ /bin/Debug/netcoreapp3.1/tab.zip
```
-1. Upload **tab.zip** to App Studio.
-
-#### Update your app package with Manifest editor
-
-After you have uploaded your app package into App Studio, you must configure it.
-
-Select the tile for your newly imported tab in the right panel of the Manifest editor welcome page.
-
-There is a list of steps on the left side of the Manifest editor, and on the right, a list of properties that must have values for each of those steps. Much of the information has been provided by your **manifest.json** but there are fields that you must update.
-
-##### Details: App details
-
-In the **App details** section:
-
-1. Under **Identification**, select **Generate** to replace the placeholder ID with the required GUID for your tab.
-
-1. Under **Developer information**, update **Website** with your **ngrok** HTTPS URL.
-
-1. Under **App URLs**, update the **Privacy statement** to `https://<yourngrokurl>/privacy` and **Terms of use** to `https://<yourngrokurl>/tou`>.
-
-##### Capabilities: Tabs
+1. Select **tab.zip** and open it in the Developer Portal.
-In the **Tabs** section:
+1. A default **App ID** is created and populated in **Basic information** section.
-1. Under **Team tab**, select **Add**.
+1. Add the Short and Long description for your app in **Descriptions**.
-1. In the **Team tab** pop-up window, update the **Configuration URL** to `https://<yourngrokurl>/tab`.
+1. In **Developer Information**, add the required details and in **Website (must be a valid HTTPS URL)** give your ngrok HTTPS URL.
-1. Ensure the **Can update configuration?**, **Team**, and **Group chat** checkboxes are selected and select **Save**.
+1. In **App URLs**, update the Privacy policy to `https://<yourngrokurl>/privacy` and Terms of use to `https://<yourngrokurl>/tou` and save.
-##### Finish: Domains and permissions
+1. In **App features**, select Personal app and enter the Name and update the **Content URL** with `https://<yourngrokurl>/personalTab`. Leave the Website URL field blank.
-In the **Domains and permissions** section, **Domains from your tabs** must contain your ngrok URL without the HTTPS prefix `<yourngrokurl>.ngrok.io/`.
+1. Select **Save**.
-##### Finish: Test and distribute
+1. In the Domains section, domains from your tabs must contain your ngrok URL without the HTTPS prefix `<yourngrokurl>.ngrok.io`.
-> [!IMPORTANT]
-> On the right, in **Description**, you see the following warning:
->
-> &#9888; "**The 'validDomains' array cannot contain a tunneling site...**"
->
-> This warning can be ignored while testing your tab.
-
-1. In the **Test and Distribute** section, select **Install**.
-
-1. In the pop-up dialog box, select **Add to a team** or from the drop-down, select **Add to a chat**.
+### Preview your app in Teams
-1. Choose the team or chat where you want the tab to be displayed and select **Set up a tab**.
+1. Select **Preview in Teams** from the Developer Portal toolbar. The Developer Portal informs you that your app is sideloaded successfully.
-1. In the next pop-up dialog box, choose either **Select Gray** or **Select Red**, and select **Save**.
+1. Select **Manage your apps**. Your app is listed in the sideloaded apps.
-1. To view your tab, go to the team or chat where you installed the tab, and select it from the tab bar. The page that you chose during configuration is displayed.
+1. Find your app using the search, select &#x25CF;&#x25CF;&#x25CF;.
- ![Channel tab ASPNET uploaded](../../assets/images/tab-images/channeltabaspnetuploaded.png)
+1. Select the **View details** option. The app details window appears for your app.
-# [ASP.NET Core MVC](#tab/aspnetcoremvc)
+1. Select &nbsp;:::image type="content" source="~/assets/images/tab-images/app-dropdown.png" alt-text="App details dropdown" border="true":::&nbsp; > **Add to team** to load the tab in a team. Your tab is now available in Teams.
-### Create a custom channel or group tab with ASP.NET Core MVC
+ :::image type="content" source="~/assets/images/tab-images/channeltabaspnetuploaded.png" alt-text="Channel tab ASPNET uploaded" border="true":::
-You can create a custom channel or group tab using C# and ASP.Net Core MVC. [App Studio for Microsoft Teams](~/concepts/build-and-test/app-studio-overview.md) is also used to finalize your app manifest and deploy your tab to Teams.
-### Prerequisites for custom channel or group tab
-* You must have a Microsoft 365 tenant and a team configured with **Allow uploading custom apps** enabled. For more information, see [prepare your Office 365 tenant](~/concepts/build-and-test/prepare-your-o365-tenant.md).
+## Create a custom channel or group tab with ASP.NET Core MVC
- > [!NOTE]
- > If you do not currently have a Microsoft 365 account, you can sign up for a free subscription through the [Microsoft Developer Program](https://developer.microsoft.com/microsoft-365/dev-program). The subscription remains active as long as you are using it for ongoing development.
-
-* Use App Studio to import your application to Teams. To install App Studio, select **Apps** ![Store App](~/assets/images/tab-images/storeApp.png) at the lower left corner of the Teams app, and search for **App Studio**. After you find the tile, select it and choose **Add** in the pop-up dialog box to install it.
-
-In addition, this project requires that you have the following installed in your development environment:
+1. At the command prompt, create a new directory for your tab project.
-* The current version of the Visual Studio IDE with the **.NET CORE cross-platform development** workload installed. If you do not already have Visual Studio, you can download and install the latest [Microsoft Visual Studio Community](https://visualstudio.microsoft.com/downloads) version for free.
+1. Clone the sample repository into your new directory using the following command or you can download the [source code](https://github.com/OfficeDev/Microsoft-Teams-Samples) and extract the files:
-* The [ngrok](https://ngrok.com) reverse proxy tool. Use ngrok to create a tunnel to your locally running web server's publicly-available HTTPS endpoints. You can [download ngrok](https://ngrok.com/download).
+ ```cmd
+ git clone https://github.com/OfficeDev/Microsoft-Teams-Samples.git
+ ```
-### Get the source code
+Following are the steps to create a channel or group tab:
-At a command prompt, create a new directory for your tab project. A simple [Channel Group Tab](https://github.com/OfficeDev/microsoft-teams-sample-tabs/tree/master/ChannelGroupTabMVC) project is provided to get you started. Clone the sample repository into your new directory using the following command:
+* [Generate your application with a channel or group tab](#generate-your-application-with-a-channel-or-group-tab-2)
+* [Establish a secure tunnel to your tab](#establish-a-secure-tunnel-to-your-tab-2)
+* [Update your application](#update-your-application-1)
+* [Build and run your application](#build-and-run-your-application-2)
+* [Update your app package with Developer Portal](#update-your-app-package-with-developer-portal-1)
+* [Preview your app in Teams](#preview-your-app-in-teams-1)
-```bash
-git clone https://github.com/OfficeDev/microsoft-teams-sample-tabs.git
-```
+### Generate your application with a channel or group tab
-Alternately, you can retrieve the source code by downloading the zip folder and extracting the files.
+1. Open Visual Studio and select **Open a project or solution**.
-**To build and run the tab project**
+1. Go to **Microsoft-Teams-Samples** > **samples** > **tab-channel-group** > **mvc-csharp** folder and open **ChannelGroupTabMVC.sln**.
-1. After you have the source code, go to Visual Studio and select **Open a project or solution**.
-1. Go to the tab application directory and open **ChannelGroupTabMVC.sln**.
-1. To build and run your application, press **F5** or choose **Start Debugging** from the **Debug** menu.
-1. In a browser, navigate to the following URLs and verify that the application loaded properly:
+1. In Visual Studio, press **F5** or choose **Start Debugging** from your application's **Debug** menu to verify if the application has loaded properly. In a browser, go to the following URLs:
- * `http://localhost:44360`
- * `http://localhost:44360/privacy`
- * `http://localhost:44360/tou`
+ * https://localhost:3978/
+ * https://localhost:3978/privacy
+ * https://localhost:3978/tou
-### Review the source code
+<details>
+<summary><b>Review the source code</b></summary>
#### Startup.cs
-This project was created from an ASP.NET Core 2.2 Web Application empty template with the **Advanced - Configure for HTTPS** check box selected at setup. The MVC services are registered by the dependency injection framework's `ConfigureServices()` method. Additionally, the empty template does not enable serving static content by default, so the static files middleware is added to the `Configure()` method using the following code:
+This project was created from an ASP.NET Core 3.1 web application empty template with the **Advanced - Configure for HTTPS** check box selected at setup. The MVC services are registered by the dependency injection framework's `ConfigureServices()` method. Additionally, the empty template does not enable serving static content by default, so the static files middleware is added to the `Configure()` method using the following code:
```csharp public void ConfigureServices(IServiceCollection services)
These are the different views in ASP.NET Core MVC:
The controllers use the `ViewBag` property to transfer values dynamically to the views.
+</details>
+
+### Establish a secure tunnel to your tab
+
+At the command prompt in the root of your project directory run the following command to establish a secure tunnel to your tab:
+
+```cmd
+ngrok http 3978 --host-header=localhost
+```
+
+Ensure that you keep the command prompt with ngrok running and make a note of the URL.
+
+### Update your application
+
+1. Go to the **Views** > **Shared** folder and open **_Layout.cshtml**, and add the following to the <head> tags section:
+
+ ```html
+ <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script>
+ <script src="https://statics.teams.cdn.office.net/sdk/v1.6.0/js/MicrosoftTeams.min.js"></script>
+ ```
+
+ > [!IMPORTANT]
+ > Do not copy and paste the `<script src="...">` URLs from this page, as they do not represent the latest version. To get the latest version of the SDK, always go to [Microsoft Teams JavaScript API](https://www.npmjs.com/package/@microsoft/teams-js).
+
+1. At the top of the `script` tag, insert a call to `microsoftTeams.initialize();`.
+
+1. Go to the **Tab** folder and open **Tab.cshtml**
+
+ Within **Tab.cshtml** the application presents the user with two option buttons for displaying the tab with either a red or gray icon. Choosing the **Select Gray** or **Select Red** button triggers `saveGray()` or `saveRed()`, respectively, sets `settings.setValidityState(true)`, and enables the **Save** button on the configuration page. This code lets Teams know that you have completed the configuration requirements and the installation can proceed. The parameters of `settings.setSettings` are set. Finally, `saveEvent.notifySuccess()` is called to indicate that the content URL has been successfully resolved.
+
+1. Update the `websiteUrl` and `contentUrl` values in each function with the HTTPS ngrok URL to your tab.
+
+ Your code should now include the following with **y8rCgT2b** replaced with your ngrok URL:
+
+ ```javascript
+
+ let saveGray = () => {
+ microsoftTeams.settings.registerOnSaveHandler(function (saveEvent) {
+ microsoftTeams.settings.setSettings({
+ websiteUrl: `https://y8rCgT2b.ngrok.io`,
+ contentUrl: `https://y8rCgT2b.ngrok.io/gray/`,
+ entityId: "grayIconTab",
+ suggestedDisplayName: "MyNewTab"
+ });
+ saveEvent.notifySuccess();
+ });
+ }
+
+ let saveRed = () => {
+ microsoftTeams.settings.registerOnSaveHandler(function (saveEvent) {
+ microsoftTeams.settings.setSettings({
+ websiteUrl: `https://y8rCgT2b.ngrok.io`,
+ contentUrl: `https://y8rCgT2b.ngrok.io/red/`,
+ entityId: "redIconTab",
+ suggestedDisplayName: "MyNewTab"
+ });
+ saveEvent.notifySuccess();
+ });
+ }
+ ```
+
+1. Make sure to save the updated **Tab.cshtml**.
+
+### Build and run your application
+
+1. In Visual Studio, press **F5** or choose **Start Debugging** from the **Debug** menu.
+
+1. Verify that **ngrok** is running and working properly by opening your browser and going to your content page via the ngrok HTTPS URL that was provided in your command prompt window.
+
+ > [!TIP]
+ > You need to have both your application in Visual Studio and ngrok running to complete the steps provided in this article. If you need to stop running your application in Visual Studio to work on it, **keep ngrok running**. It listens and resumes routing your application's request when it restarts in Visual Studio. If you have to restart the ngrok service it returns a new URL and you have to update your application with the new URL.
+
+### Update your app package with Developer Portal
+
+1. Go to Microsoft Teams. If you use the [web-based version](https://teams.microsoft.com), you can inspect your front-end code using your browser's [developer tools](~/tabs/how-to/developer-tools.md).
+
+1. Go to **Developer portal** in Teams.
+
+1. Open **Apps** and select **Import app**.
-* Open a command prompt in the root of your project directory and run the following command:
+1. The name of your app package is **tab.zip**. It's available in the following path:
```bash
- ngrok http https://localhost:443560 -host-header="localhost:44360"
+ /bin/Debug/netcoreapp3.1/tab.zip
```
-* Ngrok will listen to requests from the internet and will route them to your application when it is running on port 44355. It should resemble `https://y8rCgT2b.ngrok.io/` where **y8rCgT2b** is replaced by your ngrok alpha-numeric HTTPS URL.
+1. Select **tab.zip** and open it in the Developer Portal.
-* Ensure that you keep the command prompt with ngrok running and make a note of the URL.
+1. A default **App ID** is created and populated in **Basic information** section.
-### Update your application
+1. Add the Short and Long description for your app in **Descriptions**.
-Within **Tab.cshtml** the application presents the user with two option buttons for displaying the tab with either a red or gray icon. Choosing the **Select Gray** or **Select Red** button, triggers `saveGray()` or `saveRed()`, respectively, sets `settings.setValidityState(true)`, and enables the **Save** button on the configuration page. This code lets Teams know that you have completed the configuration requirements and the installation can proceed. On save, the parameters of `settings.setSettings` are set. Finally, `saveEvent.notifySuccess()` is called to indicate that the content URL has been successfully resolved.
+1. In **Developer Information**, add the required details and in **Website (must be a valid HTTPS URL)** give your ngrok HTTPS URL.
+1. In **App URLs**, update the Privacy policy to `https://<yourngrokurl>/privacy` and Terms of use to `https://<yourngrokurl>/tou` and save.
-
+1. In **App features**, select Personal app and enter the Name and update the **Content URL** with `https://<yourngrokurl>/personalTab`. Leave the Website URL field blank.
+
+1. Select **Save**.
+
+1. In the Domains section, domains from your tabs must contain your ngrok URL without the HTTPS prefix `<yourngrokurl>.ngrok.io`.
+
+### Preview your app in Teams
+
+1. Select **Preview in Teams** from the Developer Portal toolbar. The Developer Portal informs you that your app is sideloaded successfully.
+
+1. Select **Manage your apps**. Your app is listed in the sideloaded apps.
+
+1. Find your app using the search, select &#x25CF;&#x25CF;&#x25CF;.
+
+1. Select the **View details** option. The app details window appears for your app.
+
+1. Select &nbsp;:::image type="content" source="~/assets/images/tab-images/app-dropdown.png" alt-text="Channel tab ASPNET uploaded" border="true":::&nbsp; > **Add to team** to load the tab on Teams. Your tab is now available in Teams.
+
+ :::image type="content" source="~/assets/images/tab-images/channeltabaspnetuploaded.png" alt-text="Channel tab ASPNET MVC uploaded" border="true":::
+ ## Next step
platform Cards Reference https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/cards/cards-reference.md
The following code shows an example of an Adaptive Card:
#### Additional information on Adaptive Cards
+You can pass dynamic values in an Adaptive Card using the dollar symbol ($) and curly braces. For more information, see [Adaptive Cards Templating](/adaptive-cards/templating/).
+
+Example:
+
+```json
+{
+ "type": "TextBlock",
+ "text": "${titleText}",
+ "size": "default",
+ "weight": "bolder"
+}
+
+```
+ Bot Framework reference: * [Adaptive Cards Node](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=javascript#send-an-adaptive-card&preserve-view=true)
platform Provision https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/provision.md
When you create a new project, you can use all the Azure resources. The ARM temp
## Customize resource provision
-Teams Toolkit enables you to use an infrastructure as code approach to define what Azure resources you want to provision, and how you want to configure. The tool uses ARM template to define Azure resources. The ARM template is a set of bicep files that defines the infrastructure and configuration for your project. You can customize Azure resources by modifying the ARM template. For more information, see [bicep document](/azure/azure-resource-manager/bicep.md).
+Teams Toolkit enables you to use an infrastructure as code approach to define what Azure resources you want to provision, and how you want to configure. The tool uses ARM template to define Azure resources. The ARM template is a set of bicep files that defines the infrastructure and configuration for your project. You can customize Azure resources by modifying the ARM template. For more information, see [bicep document](/azure/azure-resource-manager/bicep).
Provision with ARM involves changing the following sets of files, parameters and templates:
platform Add Outgoing Webhook https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/add-outgoing-webhook.md
Responses from your Outgoing Webhooks appear in the same reply chain as the orig
> > * You can send Adaptive Card, Hero card, and text messages as attachment with an Outgoing Webhook. > * Cards support formatting. For more information, see [format cards with markdown](~/task-modules-and-cards/cards/cards-format.md?tabs=adaptive-md%2Cconnector-html#format-cards-with-markdown).
+> * Adaptive Card in Outgoing Webhooks only support `openURL` card actions.
The following codes are examples of an Adaptive Card response: