Updates from: 04/09/2021 04:06:34
Service Microsoft Docs article Related commit history on GitHub Change details
platform Debugging Local Testing Calling Meeting Bots https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/bots/calls-and-meetings/debugging-local-testing-calling-meeting-bots.md
keywords: local development ngrok tunnel
Last updated 11/18/2018
-# How to develop calling and online meeting bots on your local PC
+# Develop calling and online meeting bots on your local PC
In [Run and debug your app](../../concepts/build-and-test/debug.md) we explain how to use [ngrok](https://ngrok.com) to create a tunnel between your local computer and the internet. In this topic, learn how you can also use ngrok and your local PC to develop bots that support calls and online meetings.
-Messaging bots use HTTP, but calls and online meeting bots use the lower-level TCP. Ngrok supports TCP tunnels in addition to HTTP tunnels; you'll learn how, below.
+Messaging bots use HTTP, but calls and online meeting bots use the lower-level TCP. Ngrok supports TCP tunnels in addition to HTTP tunnels.
-## Configuring ngrok.yml
+## Configure ngrok.yml
-Go to [ngrok](https://ngrok.com) and sign up for a free account or log into your existing account. Once you've logged in, go to the [dashboard](https://dashboard.ngrok.com) and get your authtoken.
+Go to [ngrok](https://ngrok.com) and sign up for a free account or log into your existing account. After you've signed in, go to the [dashboard](https://dashboard.ngrok.com) and get your authtoken.
-Create an ngrok configuration file `ngrok.yml` (see [here](https://ngrok.com/docs#config) for more information on where this file can be located) and add this line:
+Create an ngrok configuration file `ngrok.yml` and add the following line. For more information on where the file can be located, see [ngrok](https://ngrok.com/docs#config):
`authtoken: <Your-AuthToken>`
-## Setting up signaling
+## Set up signaling
-In [Calls and online meetings bots](./calls-meetings-bots-overview.md), we discussed call signaling ΓÇö how bots detect and respond to new calls and events during a call. Call signaling events are sent via HTTP POST to the bot's calling endpoint.
+In [Calls and online meetings bots](./calls-meetings-bots-overview.md), we discussed call signaling on how bots detect and respond to new calls and events during a call. Call signaling events are sent through HTTP POST to the bot's calling endpoint.
-As with the bot's messaging API, in order for the Real-time Media Platform to talk to your bot, your bot must be reachable over the internet. Ngrok makes this simple ΓÇö add the following lines to your ngrok.yml:
+As with the bot's messaging API, in order for the Real-time Media Platform to talk to your bot, your bot must be reachable over the internet. Ngrok makes this simple. Add the following lines to your ngrok.yml:
```yaml tunnels:
tunnels:
proto: http ```
-## Setting up local media
+## Set up local media
> [!NOTE] > This section is only required for application-hosted media bots and can be skipped if you don't host media yourself. Application-hosted media uses certificates and TCP tunnels. The following steps are required: -- Ngrok's public TCP endpoints have fixed URLs. They are `0.tcp.ngrok.io`, `1.tcp.ngrok.io`, and so on. You should have a DNS CNAME entry for your service that points to these URLs. In this example, let's say `0.bot.contoso.com` refers to `0.tcp.ngrok.io`, `1.bot.contoso.com` refers to `1.tcp.ngrok.io`, and so on.-- A SSL certificate is required for your URLs. To make it easy, use a SSL certificate issued to a wild card domain. In this case, it would be `*.bot.contoso.com`. This SSL certificate is validated by the media SDK, so it should match your bot's public URL. Note the thumbprint and install it in your machine certificates.-- Now, setup a TCP tunnel to forward the traffic to localhost. Write the following lines into your ngrok.yml:
+1. Ngrok's public TCP endpoints have fixed URLs. They are `0.tcp.ngrok.io`, `1.tcp.ngrok.io`, and so on. You must have a DNS CNAME entry for your service that points to these URLs. For example, let's say `0.bot.contoso.com` refers to `0.tcp.ngrok.io`, `1.bot.contoso.com` refers to `1.tcp.ngrok.io`, and so on.
+2. A SSL certificate is required for your URLs. To make it easy, use a SSL certificate issued to a wild card domain. In this case, it would be `*.bot.contoso.com`. This SSL certificate is validated by the media SDK, so it must match your bot's public URL. Note the thumbprint and install it in your machine certificates.
+3. Now, setup a TCP tunnel to forward the traffic to localhost. Write the following lines into your ngrok.yml:
```yaml media:
Now that the ngrok configuration is ready, launch it:
`ngrok.exe start -all -config <Path to your ngrok.yml>`
-This starts ngrok and defines the public URLs which provide the tunnels to your localhost. The output looks like the following:
+This starts ngrok and defines the public URLs which provide the tunnels to your localhost. Following is an example of the output:
```cmd Forwarding http://signal.ngrok.io -> localhost:12345
Here, `12345` is the signaling port, `8445` is the application-hosted port, and
### Update code
-Once ngrok is up and running, update the code to use the config you just set up.
+After ngrok is up and running, update the code to use the config you just set up.
#### Update signaling -- In the BotBuilder call, change the `NotificationUrl` to the signaling URL provided by ngrok.
+In the BotBuilder call, change the `NotificationUrl` to the signaling URL provided by ngrok.
```csharp statefulClientBuilder.SetNotificationUrl(
statefulClientBuilder.SetNotificationUrl(
> [!NOTE] > Replace signal with the one provided by ngrok and the `NotificationEndpoint` with the controller path that receives notification.
-> **IMPORTANT**: The URL in `SetNotificationUrl` must be HTTPS.
-
-> **IMPORTANT**: Your local instance must be listening to HTTP traffic on the signaling port. The requests made by the calls and online meetings platform will reach the bot as localhost HTTP traffic unless end-to-end encryption is set up.
+> [!IMPORTANT]
+> * The URL in `SetNotificationUrl` must be HTTPS.
+>
+> Your local instance must be listening to HTTP traffic on the signaling port. The requests made by the calls and online meetings platform will reach the bot as localhost HTTP traffic unless end-to-end encryption is set up.
#### Update media
-Update your `MediaPlatformSettings` to the following.
+Update your `MediaPlatformSettings` as following:
```csharp var mediaPlatform = new MediaPlatformSettings
var mediaPlatform = new MediaPlatformSettings
``` > [!NOTE]
-> The certificate thumbprint provided above should match the Service FQDN. That is why the DNS entries are required.
-
-## Next steps
-
-Your bot can now run locally and all the flows work from your localhost.
+> The certificate thumbprint provided in the `MediaPlatformSettings` must match the Service FQDN. That is why the DNS entries are required.
## Caveats
platform Locally With An Ide https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/bots/how-to/debug/locally-with-an-ide.md
description: Testing and debugging your bot locally with an IDE
+ # Test and debug your bot locally
-When testing your bot you need to take into consideration both the context(s) you want your bot to run in, as well as any functionality you may have added to your bot that requires data specific to Microsoft Teams. Make sure that the method you chose to test your bot aligns with its functionality.
+When testing your bot you need to take into consideration both the contexts you want your bot to run in, and any functionality you may have added to your bot that requires data specific to Microsoft Teams. Make sure that the method you choose to test your bot aligns with its functionality.
## Test by uploading to Teams The most comprehensive way to test your bot is by creating an app package and uploading it to Teams. This is the only method to test the full functionality available to your bot, across all scopes.
-There are two methods for uploading your app. You can either use [App Studio](~/concepts/build-and-test/app-studio-overview.md) to help you, or you can manually [create an app package](~/concepts/build-and-test/apps-package.md) and [upload your app](~/concepts/deploy-and-publish/apps-upload.md). If you need to alter your manifest and re-upload your app, you should [delete your bot](#deleting-a-bot-from-teams) before uploading your altered app package.
+There are two methods for uploading your app:
+* Use [App Studio](~/concepts/build-and-test/app-studio-overview.md)
+* [Create an app package](~/concepts/build-and-test/apps-package.md) manually, and then [upload your app](~/concepts/deploy-and-publish/apps-upload.md).
+
+> [!NOTE]
+> If you need to alter your manifest and re-upload your app, you must [delete your bot](#delete-a-bot-from-teams) before uploading your altered app package.
## Debug your bot locally
-If you are hosting your bot locally during development you'll need to use a tunneling service like [ngrok](https://ngrok.com/) in order to test your bot. Once you've downloaded and installed ngrok, run the below command to start the tunneling service (you may need to add ngrok to your path).
+If you are hosting your bot locally during development, you need to use a tunneling service like [ngrok](https://ngrok.com/) in order to test your bot. After you download and install ngrok, add `ngrok` to your path, and run the following command to start the tunneling service:
```bash ngrok http <port> -host-header=localhost:<port> ```
-Use the https endpoint provided by ngrok in your app manifest. If you close your command window and restart you'll get a new URL, and you'll need to update your bot endpoint address to use that one as well.
+Use the https endpoint provided by ngrok in your app manifest.
+
+> [!NOTE]
+> If you close your command window and restart, a new URL is generated and you need to update your bot endpoint address to use it.
-## Testing your bot without uploading to Teams
+## Test your bot without uploading to Teams
-Occasionally it may be necessary to test your bot without installing it as an app in Teams. We provide two methods for doing so below. Testing your bot without installing it as an app can be useful to ensure your bot is available and responding, however it will not allow you to test the full breadth of Microsoft Teams functionality you may have added to your bot. If you need to fully test your bot, please follow the instructions for [testing by uploading](#test-by-uploading-to-teams).
+Occasionally it may be necessary to test your bot without installing it as an app in Teams. We provide two methods for testing the bot. Testing your bot without installing it as an app can be useful to ensure your bot is available and responding, however it won't allow you to test the full breadth of Microsoft Teams functionality you may have added to your bot. If you need to fully test your bot, see [testing by uploading](#test-by-uploading-to-teams).
### Use the Bot Emulator
-The Bot Framework Emulator is a desktop application that allows bot developers to test and debug their bots, either locally or remotely. Using the emulator, you can chat with your bot and inspect the messages that your bot sends and receives. This can be useful for verifying that your bot is available and responding, however the emulator will not allow you to test any Teams-specific functionality you've added to your bot, nor will responses from your bot be an accurate visual representation of how they will be rendered in Teams. If you need to test either of those things it is best to [upload your bot](#test-by-uploading-to-teams).
+The Bot Framework Emulator is a desktop application that permits bot developers to test and debug their bots locally or remotely. The emulator helps you to chat with your bot and inspect the messages that your bot sends and receives. This can be useful for verifying that your bot is available and responding. However, the emulator does not permit you to test any Teams-specific functionality you have added to the bot, nor the responses from your bot are an accurate visual representation of how they are rendered in Teams. If you need to test either of those things it is best to [upload your bot](#test-by-uploading-to-teams).
-Complete instructions on the Bot Framework Emulator can be found [here](/azure/bot-service/bot-service-debug-emulator?view=azure-bot-service-4.0).
+For more information, see [complete instructions on the Bot Framework Emulator](/azure/bot-service/bot-service-debug-emulator?view=azure-bot-service-4.0&preserve-view=true).
-### Talk to your bot directly by Id
+### Talk to your bot directly by ID
->[!Important]
->Talking to your bot by Id is intended for basic testing purposes only. Any Teams-specific functionality you've added to your bot will not work.
+> [!Important]
+> Talking to your bot by ID is intended for basic testing purposes only. Any Teams-specific functionality you have added to your bot fails to work.
-You can also initiate a conversation with your bot by using its Id. Two methods for doing so are given below. When a bot has been added through one of these methods it will not be addressable in channel conversations, and you cannot take advantage of other Microsoft Teams app capabilities like tabs or messaging extensions.
+You can also initiate a conversation with your bot by using its ID. When a bot has been added through one of these methods it is not addressable in channel conversations and you cannot take advantage of other Microsoft Teams app capabilities like tabs or messaging extensions. You can initiate a conversation in one of the following ways:
-1. On the [Bot Dashboard](https://dev.botframework.com/bots) page for your bot, under **Channels**, select **Add to Microsoft Teams**. Microsoft Teams will launch with a personal chat with your bot.
-2. Directly reference your bot's app ID from within Microsoft Teams:
- * On the [Bot Dashboard](https://dev.botframework.com/bots) page for your bot, under **Details**, copy the **Microsoft App ID** for your bot.
+* On the [Bot Dashboard](https://dev.botframework.com/bots) page for your bot, under **Channels**, select **Add to Microsoft Teams**. Microsoft Teams launches a personal chat with your bot.
+
+* Directly reference your bot's app ID from within Microsoft Teams:
+ 1. On the [Bot Dashboard](https://dev.botframework.com/bots) page for your bot, under **Details**, copy the **Microsoft App ID** for your bot.
- ![Getting the AppID for the bot](~/assets/images/bots_appid_botframework.png)
+ ![Getting the AppID for the bot](~/assets/images/bots_appid_botframework.png)
- * From within Microsoft Teams, on the **Chat** pane, select the **Add chat** icon. For **To:**, paste your bot's Microsoft App ID.
+ 2. Open Microsoft Teams, on the **Chat** pane, select the **Add chat** icon. In **To:**, paste your bot's Microsoft App ID.
- ![Getting the AppID for the bot](~/assets/images/bots_uploading.png)
+ ![Uploading bots](~/assets/images/bots_uploading.png)
- The app ID should resolve to your bot name.
+ The app ID must resolve to your bot name.
- * Select your bot and send a message to initiate a conversation.
- * Alternatively, you can paste your bot's app ID in the search box in the top left in Microsoft Teams. In the search results page, navigate to the People tab to see your bot and to start chatting with it.
+ 3. Select your bot and send a message to initiate a conversation.
+ Alternatively, you can paste your bot's app ID in the search box in the top left in Microsoft Teams. In the search results page, navigate to the **People** tab to see your bot and to start chatting with it.
-Your bot will receive the `conversationUpdate` event just like bots added to a team, but without the team information in the `channelData` object.
+Your bot receives the `conversationUpdate` event as you add the bots to a team, without the team information in the `channelData` object.
-## Blocking a bot in personal chat
+## Block a bot in personal chat
-Note that users can choose to block your bot from sending personal chat messages. They may toggle this by right-clicking your bot in the chat channel and choosing **Block bot conversation**. This means your bots will continue to send messages but the user will not receive those messages.
+Users can choose to block your bot from sending personal chat messages. They may toggle this by right-clicking your bot in the chat channel and choosing **Block bot conversation**. This means, your bots continues to send messages, however, the user does not receive the messages.
![Blocking a bot](~/assets/images/bots/botdisable.png)
-## Removing a bot from a team
+## Remove a bot from a team
+
+Users can delete the bot by choosing the trash-can icon on the bots list in their team's view. This only removes the bot from that team's use, individual users can still interact in personal context. Bots in personal context cannot be disabled or removed by users.
+
+## Disable a bot in Teams
-Users can delete the bot by choosing the trash-can icon on the bots list in their teams view. Note that this only removes the bot from that team's use; individual users will still be able to interact in personal context.
+To stop your bot from receiving messages, go to your **Bot Dashboard** and edit the Microsoft Teams channel. Clear the **Enable on Microsoft Teams** option. This prevents users from interacting with the bot, however, it will still be discoverable and users will still be able to add it to Teams.
-Bots in personal context cannot be disabled or removed by a user, short of completely removing the bot from Teams.
+## Delete a bot from Teams
-## Disabling a bot in Teams
+To remove your bot completely from Teams, go to your **Bot Dashboard** and edit the Microsoft Teams channel. Choose the **Delete** button at the bottom. This prevents users from discovering, adding, and interacting with your bot. This does not remove the bot from other user's Teams instances, however, it stops functioning for them as well.
-To stop your bot receiving messages, go to your Bot Dashboard and edit the Microsoft Teams channel. Clear the **Enable on Microsoft Teams** option. This prevents users from interacting with the bot, but it will still be discoverable and users will still be able to add it to teams.
+## See also
-## Deleting a bot from Teams
+> [!div class=nextstep]
+> [Debug your bot with inspection middleware](/azure/bot-service/bot-service-debug-inspection-middleware)
-To remove your bot completely from Teams, go to your Bot Dashboard and edit the Microsoft Teams channel. Choose the **Delete** button at the bottom. This prevents users from discovering, adding, or interacting with your bot. Note that this does not remove the bot from other users' Teams instances, although it will cease functioning for them as well.
+> [!div class=nextstep]
+> [Debug your calling and meeting bot locally](~/bots/calls-and-meetings/debugging-local-testing-calling-meeting-bots.md)
platform App Studio Overview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/build-and-test/app-studio-overview.md
description: Get started building great apps in Microsoft Teams using App Studio
keywords: getting started app studio teams + # Quickly develop apps with App Studio for Microsoft Teams App Studio makes it easy to start creating or integrating your own Microsoft Teams apps, whether you develop custom apps for your enterprise or SaaS applications for teams around the world by streamlining the creation of the manifest and package for your app and providing useful tools like the Card Editor and a React control library.
Once you are in App Studio, click on the *Manifest editor* tab where you can eit
## App Studio Features
+This section covers features, such as conversation, manifest editor, details, and capabilities. You can customize your capabilities using app customization.
+ ### Conversation This is where you can see what [cards you create in App Studio](#card-editor) look like in Teams when you test them by sending them to yourself.
The details section of the Manifest Editor defines the high-level description of
The capabilities section of the Manifest Editor is where the app's capabilities are defined and where details of each of those capabilities are listed.
+> [!NOTE]
+> The app customization feature is currently available in developer preview only.
+>
+> As a best practice, you must provide customization guidelines for app users and customers to follow when customizing your app. For more information, see [customize apps in Microsoft Teams](/MicrosoftTeams/customize-apps).
++ ##### Tabs * **Team Tabs.** A team tab becomes part of a channel and provides quick access to team information and resources. For example, the Planner tab for a channel contains a single plan; the Power BI tab maps to a specific report. Users can drill down to the relevant context, but they should not be able to navigate outside the tab. The Power BI tab, for instance, doesn't enable navigation to other Power BI reports, but it does enable the *Go to website* button that launches the report in the main Power BI website.
This section allows you to add a [conversational bot](~/bots/what-are-bots.md) t
If you have not yet registered a bot with the Bot Framework, click *Register* to create a new one. Once youΓÇÖre done registering your bot, come back to this section of the Manifest Editor to enter its name and Bot Framework ID.
-Once you have supplied your bot's information, you can now optionally define a list of commands that your bot can suggest to users. Add the name of the command, a description of the command which indicates its syntax and arguments, and the scope(s) to which this command should apply.
+After you have supplied your bot's information, you can now optionally define a list of commands that your bot can suggest to users. Add the name of the command, a description of the command which indicates its syntax and arguments, and the scope(s) to which this command should apply.
Note that if you have defined your bot to only support one scope, commands specified for the unsupported scope will be ignored. You can edit the scopes your bot supports at any time.
Note that if you have defined your bot to only support one scope, commands speci
This section allows you to add a connector to your app. If you already have registered an Office 365 connector, choose *Set up* and enter the name and ID of the connector. If you want a new connector click *Register* to be taken to the Connector Developer Dashboard in your browser.
+> [!NOTE]
+> App customization enables admins to change the look-and-feel of the apps loaded through bots, messaging extensions, tabs, and connectors. For example, if the Teams admin customizes the name of an app from *Contoso* to *Contoso Agent*, then the app will appear with the new name *Contoso Agent* to users. However, while adding a connector to a chat, in the list the connectors will still show the name of the app as *Contoso*.
++ ##### Messaging Extensions [Messaging extensions](~/messaging-extensions/what-are-messaging-extensions.md) are a powerful way for users to engage with your app within Microsoft Teams. Users can query for information from your service and post that information in the form of cards, right into the channel or chat conversation.
platform Debug https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/build-and-test/debug.md
keywords: teams run debug apps
-# Choosing a setup to test and debug your Microsoft Teams app
+# Choose a setup to test and debug your Microsoft Teams app
-Microsoft Teams apps can contain one or more capabilities, and the ways to run or even host them may be different. When it comes to debugging, in general, we have the following ways to run your Microsoft Teams app:
+Microsoft Teams apps contain one or more capabilities and the ways to run or even host them are different. For debugging, use one of the following ways:
-* **Purely local**&emsp;For bots, you can test your experience in the Bot Emulator. For other content, you can run locally in your browser and address content through `http://localhost`.
-* **Locally hosted, in Teams**&emsp;This involves running locally with tunneling software and [creating a package](~/concepts/build-and-test/apps-package.md) to [upload](~/concepts/deploy-and-publish/apps-upload.md) into Teams. This allows you to easily run and debug your app within the Teams client.
-* **Cloud-hosted, in Teams** This truly simulates (or is) production-level support for a Teams app. It involves uploading your solution to your externally accessible server or cloud provider of choice (we recommend Azure, of course) and [creating a package](~/concepts/build-and-test/apps-package.md) to [upload](~/concepts/deploy-and-publish/apps-upload.md) into Teams.
+* **Purely local**: For bots, you can test your experience in the Bot Emulator. For other content, you can run locally in your browser and address content through `http://localhost`.
+* **Locally hosted in Teams**: This involves running the app locally in tunneling software and [creating a package](~/concepts/build-and-test/apps-package.md) to [upload](~/concepts/deploy-and-publish/apps-upload.md) into Teams. This permits you to easily run and debug your app within the Teams client.
+* **Cloud-hosted in Teams**: This truly simulates the production level support for a Teams app. It involves uploading your solution to your externally accessible server or cloud provider of choice and [creating a package](~/concepts/build-and-test/apps-package.md) to [upload](~/concepts/deploy-and-publish/apps-upload.md) into Teams.
-For purely local or local Teams testing, you run the experience from your own computer. This allows you to actually compile and run within your IDE, and take full advantage of such techniques as breakpoints and step debugging. For production-scale debugging and testing, we recommend that you follow your own company guidelines to ensure you are able to support testing, staging, and deployment through your own processes.
+Run the experience from your own computer for purely local or local Teams testing. By doing this, you can compile and run within your integrated development environment and take full advantage of techniques, such as breakpoints and step debugging.
-In general we recommend you use multiple manifests and packages to allow you to maintain separation between production and development services. For example, you might choose to register separate development and production bots and create appropriate packages to upload them in your testing environment. We also recommend you upload and test your production package before submitting your app for publishing in our app store, or distributing to customers.
+> [!NOTE]
+> For production-scale debugging and testing, we recommend that you follow your own company guidelines to ensure you are able to support testing, staging, and deployment through your own processes.
+
+Use multiple manifests and packages to maintain separation between production and development services. For example, you might choose to register separate development and production bots and create appropriate packages to upload them in your testing environment. We also recommend, you upload and test your production package before submitting your app for publishing in our app store or distributing to customers.
## Purely local > [!NOTE]
-> Running this way does not give you access to Teams app functionality or Teams-specific bot functions like roster calls and other channel-specific functionality. In addition, some capabilities may be allowed by the Bot Framework in the Bot Emulator that might not function when running in Microsoft Teams.
+> Running the bot locally does not give you access to Teams app functionality or Teams-specific bot functions like roster calls and other channel-specific functionality. In addition, some capabilities are permitted by the Bot Framework in the Bot Emulator that might not function when running in Microsoft Teams.
-Your bot can be run within the Bot Emulator. This enables you to test some of the core logic of the bot, see a rough layout of messages, and perform simple tests. Here are the steps:
+Your bot can run within the Bot Emulator. This enables you to test some of the core logic of the bot, see a rough layout of messages, and perform simple tests. Following are the steps:
-* Run the code locally
-* Launch the Bot Emulator and set the URL:
- * Node.js: `http://localhost:3978/api/messages`
- * .NET/C#: `http://localhost:3979/api/messages`
-* Leave the Microsoft app ID and Microsoft app password blank, to match the default environment variables.
+1. Run the code locally.
+2. Launch the Bot Emulator and set the URL:
+ * Node.js: `http://localhost:3978/api/messages`
+ * .NET/C#: `http://localhost:3979/api/messages`
+3. Leave the Microsoft app ID and Microsoft app password blank, to match the default environment variables.
## Locally hosted
-Because Microsoft Teams is an entirely cloud-based product, it requires all services it accesses to be available publicly using HTTPS endpoints. Therefore, to enable your app to work within Teams, you need to either publish the code to the cloud of your choice, or make our local running instance externally accessible. We can do the latter with tunneling software.
+Microsoft Teams is an entirely cloud-based product, it requires all services it accesses to be available publicly using HTTPS endpoints. Therefore, to enable your app to work within Teams, you need to either publish the code to the cloud of your choice or make our local running instance externally accessible. We can do the latter with tunneling software.
-Although you can use any tool of choice, we use and recommend [ngrok](https://ngrok.com/download), which creates an externally addressable URL for a port you open locally on your machine. To set up ngrok in preparation for running your Microsoft Teams app locally:
+Although you can use any tool of your choice, we use and recommend [ngrok](https://ngrok.com/download), which creates an externally addressable URL for a port you open locally on your machine.
-* In a terminal application, go the directory where you have ngrok.exe installed. You may want to add it as a path variable to avoid this step.
-* Run, for example, `ngrok http 3978 --host-header=localhost:3978`, or replace the port number as needed.
+**To set up ngrok in preparation for running your Microsoft Teams app locally**
-This launches ngrok to listen on the port you specify. In return, it gives you an externally addressable URL, valid for as long as ngrok is running.
+1. Go to the directory where you have ngrok.exe installed in a terminal application. You may want to add it as a path variable to avoid this step.
+2. Run, for example, `ngrok http 3978 --host-header=localhost:3978`, or replace the port number as needed.
+ This launches ngrok to list on the port you specify. In return, it gives you an externally addressable URL valid for as long as ngrok is running.
> [!NOTE] > If you stop and restart ngrok, the URL changes.
-To use ngrok in your project, and depending on the capabilities you are using, you must replace all URL references in your code, configuration, and/or manifest.json file to use this URL endpoint.
+To use ngrok in your project based on the capabilities you are using, you must replace all URL references in your code, configuration, and manifest.json file to use this URL endpoint.
-For example, for bots registered in the Microsoft Bot Framework, update the bot's messaging endpoint to use this new ngrok endpoint. For example, `https://2d1224fb.ngrok.io/api/messages`. You can validate that ngrok is working by testing bot response in the Bot Framework portal's Test chat window. (Again, like the emulator, this test doesn't allow you to access Teams-specific functionality.)
+For bots registered in the Microsoft Bot Framework, update the bot's messaging endpoint to use this new ngrok endpoint. For example, `https://2d1224fb.ngrok.io/api/messages`. You can validate that ngrok is working by testing the bot response in the Bot Framework portal's Test chat window. Again, like the emulator, this test does not permit you to access Teams-specific functionality.
> [!NOTE]
-> To update the messaging endpoint for a bot, you must use the Bot Framework. Click on your bot in [your list of bots in Bot Framework](https://dev.botframework.com/bots). You do not need to migrate your bot to Microsoft Azure. You can also update your messaging endpoint through [App Studio](~/concepts/build-and-test/app-studio-overview.md).
+> To update the messaging endpoint for a bot, you must use the Bot Framework. Select your bot in [your list of bots in Bot Framework](https://dev.botframework.com/bots). You do not need to migrate your bot to Microsoft Azure. You can also update your messaging endpoint through [App Studio](~/concepts/build-and-test/app-studio-overview.md).
## Cloud-hosted
-You can use any externally addressable service to host your development and production code and their HTTPS endpoints. There is no expectation that your capabilities reside on the same service. We do require that all domains being accessed from your Microsoft Teams apps be listed in the [`validDomains`](~/resources/schem#validdomains) object in the manifest.json file.
+You can use any externally addressable service to host your development and production code and their HTTPS endpoints. There is no expectation that your capabilities reside on the same service. We require all domains to be accessed from your Microsoft Teams apps listed in the [`validDomains`](~/resources/schem#validdomains) object in the `manifest.json` file.
> [!NOTE]
-> To ensure a secure environment, be explicit about the exact domain and subdomains you reference, and those domains must be in your control. For example, `*.azurewebsites.net` would not be recommended, but `contoso.azurewebsites.net` would.
+> To ensure a secure environment, be explicit about the exact domain and subdomains you reference and those domains must be in your control. For example, `*.azurewebsites.net` is not recommended, however `contoso.azurewebsites.net` is recommended.
-## Loading and running
+## Load and run your experience
-In general, to load and run your experience within Microsoft Teams, you need to create a package and upload it into Teams, using the following guidance:
+To load and run your experience within Microsoft Teams, you need to create a package and upload it into Teams. For more information, see:
* [Create the package for your Microsoft Teams app](~/concepts/build-and-test/apps-package.md) * [Upload your app in Microsoft Teams](~/concepts/deploy-and-publish/apps-upload.md)+
+## Next step
+
+> [!div class="nextstepaction"]
+> [Add test data to your environment](~/concepts/build-and-test/test-data.md)
+
platform Prepare Your O365 Tenant https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/build-and-test/prepare-your-o365-tenant.md
description: How to get started with Teams in Microsoft 365
keywords: Configure Microsoft 365 tenant Teams uploading + # Prepare your Microsoft 365 tenant
-If you are a Microsoft 365 subscriber, you can develop apps for Microsoft Teams with one of the following [plans](https://products.office.com/business/compare-more-office-365-for-business-plans):
+Microsoft 365 subscribers can develop apps for Microsoft Teams with one of the following plans:
* Basic * Standard
If you are a Microsoft 365 subscriber, you can develop apps for Microsoft Teams
* Developer * Education, Education Plus, and Education E5
-Microsoft Teams will also be available to customers who subscribed to E4 prior to its [retirement](https://support.office.com//article/important-information-for-office-365-enterprise-e4-customers-f9572348-43a2-43fa-a3d8-3b6c9c042147).
+> [!NOTE]
+> For more information on Microsoft 365 subscriptions, see [plans](https://products.office.com/business/compare-more-office-365-for-business-plans).
+>
+> Microsoft Teams is also available to customers who subscribed to E4 prior to its [retirement](https://support.office.com//article/important-information-for-office-365-enterprise-e4-customers-f9572348-43a2-43fa-a3d8-3b6c9c042147).
-## Just need a development environment?
+## Create your development environment
-If you don't currently have a Microsoft 365 account, you can sign up for a [Microsoft 365 Developer Program](https://developer.microsoft.com/microsoft-365/dev-program) subscription. It's *free* for 90 days and will continually renew as long as you're using it for development activity. If you have a Visual Studio *Enterprise* or *Professional* subscription, both programs include a free Microsoft 365 [developer subscription](https://aka.ms/MyVisualStudioBenefits), active for the life of your Visual Studio subscription. *See* [Set up a Microsoft 365 developer subscription](https://docs.microsoft.com/office/developer-program/office-365-developer-program-get-started).
+If you do not have a Microsoft 365 account, you must sign up for a [Microsoft 365 Developer Program](https://developer.microsoft.com/microsoft-365/dev-program) subscription. The subscription is free for 90 days and continues to renew as long as you are using it for development activity. If you have a Visual Studio Enterprise or Professional subscription, both programs include a free Microsoft 365 [developer subscription](https://aka.ms/MyVisualStudioBenefits). It is active for as long as your Visual Studio subscription is active. For more inforamtion, see [Set up a Microsoft 365 developer subscription](https://docs.microsoft.com/office/developer-program/office-365-developer-program-get-started).
-## Enable Microsoft Teams for your organization
+## Enable Microsoft Teams for your organization
-If Microsoft Teams has not been enabled for your organization, you'll need to do that first. Take a look at our detailed guidance for [enabling Teams for your organization](/microsoftteams/enable-features-office-365).
+Enable Microsoft Teams for your organization and take a look at our detailed guidance for [enabling Teams for your organization](/microsoftteams/enable-features-office-365).
## Enable custom Teams apps and turn on custom app uploading
-Turn on custom app sideloading for your developer tenant as follows:
+**To turn on the custom app uploading or sideloading for your developer tenant**
-1. Login to [Microsoft 365 admin center](https://admin.microsoft.com/Adminportal/Home?source=applauncher#/homepage#/) with your admin credential.
+1. Sign in to [Microsoft 365 admin center](https://admin.microsoft.com/Adminportal/Home?source=applauncher#/homepage#/) with your admin credentials.
-2. Select **Show All** --> **Teams**.
+2. Select **Show All** > **Teams**.
-![image of admin center menu](~/assets/images/prepare-test-tenant/admin-center.png)
+ ![image of admin center menu](~/assets/images/prepare-test-tenant/admin-center.png)
-> [!Note]
-> It can take up to 24 hours for the "Teams" option to appear. During interim, you can [Upload your custom app to a Teams environment](/microsoftteams/upload-custom-apps#validate) for testing and validation.
+ > [!Note]
+ > It can take up to 24 hours for the **Teams** option to appear. You can [upload your custom app to a Teams environment](/microsoftteams/upload-custom-apps#validate) for testing and validation in that time.
-3. Navigate to **Teams apps** --> **Setup Policies** --> **Global(Org-wide default)**
+3. Navigate to **Teams apps** > **Setup Policies** > **Global**.
-![turn on sideload view](~/assets/images/prepare-test-tenant/turn-on-sideload.png)
+ ![turn on sideload view](~/assets/images/prepare-test-tenant/turn-on-sideload.png)
4. Toggle **upload custom apps** to the **on** position.
-5. Select **Save** to save the changes.
+5. Select **Save**.
+ Your test tenant can permit custom app sideloading.
+
+ > [!Note]
+ > It can take up to 24 hours for the sideloading to be active. During interim, you can use **upload for \<your tenant>** to test your app.
+
+ ![updload app view](~/assets/images/prepare-test-tenant/upload-for-contoso.png)
+
+For complete information on how these settings interact, see [Manage custom app policies and settings in Microsoft Teams](https://docs.microsoft.com/microsoftteams/teams-custom-app-policies-and-settings) and [Manage app setup policies in Microsoft Teams](https://docs.microsoft.com/microsoftteams/teams-app-setup-policies).
-That's it! Your test tenant will now allow custom app sideloading.
+## Next step
-> [!Note]
-> It can take up to 24 hours before sideloading is enabled. During interim, you can use **upload for \<your tenant>** to test your app.
+> [!div class="nextstepaction"]
+> [Choose a test setup](~/concepts/build-and-test/debug.md)
+>
-![updload app view](~/assets/images/prepare-test-tenant/upload-for-contoso.png)
-For complete information on how these settings interact, *See*, [Manage custom app policies and settings in Microsoft Teams](https://docs.microsoft.com/microsoftteams/teams-custom-app-policies-and-settings) and [Manage app setup policies in Microsoft Teams](https://docs.microsoft.com/microsoftteams/teams-app-setup-policies).
platform Test App Overview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/build-and-test/test-app-overview.md
+
+ Title: Test your app overview
+description: Describes the process to test your Teams custom app in Microsoft 365
+
+keywords: Configure Microsoft 365 tenant Teams uploading test app
++
+# Test your app
+
+After integrating your app with Microsoft Teams, you must test your app before publishing it. The ultimate goal is to get as many users for your app, therefore, ensure to test the app on multiple devices that users could use. For testing your app:
+
+* Prepare your Microsoft 365 tenant
+* Choose a workspace to test and debug your app
+* Add test data to your Microsoft 365 tenant
+
+## Prepare your Microsoft 365 tenant
+
+Before you start testing your app, prepare your Microsoft 365 test tenant and enable custom Teams app allow you to upload your app. You must sign-up for Microsoft 365 developer program and manage the Teams settings for your organization. Set up your developer subscription and configure it through [prepare your Microsoft 365 Tenant](~/concepts/build-and-test/prepare-your-o365-tenant.md).
+
+## Test and debug
+
+To test and debug your app, you must create at least one workspace. You can select a test setup, such as local host or cloud-based host to test and debug the app. Guidance to debug your Teams app is provided to load and run your app experience. For more information, see [choose a set up and run your Microsoft Teams app](~/concepts/build-and-test/debug.md).
+
+Test your bot locally. For more information, see [debug your bot locally with an IDE](~/bots/how-to/debug/locally-with-an-ide.md). You can also debug your bot with [inspection middleware](/azure/bot-service/bot-service-debug-inspection-middleware?view=azure-bot-service-4.0&tabs=csharp&preserve-view=true) and [adaptive tools](/azure/bot-service/bot-service-debug-adaptive-tools?view=azure-bot-service-4.0&preserve-view=true).
+
+To view the console logs, view or modify html, css, and network requests during runtime, add breakpoints to your JavaScript code, and perform interactive debugging access the DevTools. For more information, see [Access the DevTools for Teams tabs](~/tabs/how-to/developer-tools.md).
+
+## Add test data to your Microsoft 365 tenant
+
+Add the test data to Microsoft 365 test tenant. For more information, see [add test data to your Office 365 test tenant](~/concepts/build-and-test/test-data.md), and complete all the prerequisites before you start uploading your test data.
+
+## See also
+
+> [!div class="nextstepaction"]
+> [Debug your tab](~/tabs/how-to/developer-tools.md)
+
+> [!div class="nextstepaction"]
+> [Debug your bots](~/bots/how-to/debug/locally-with-an-ide.md)
+
+> [!div class="nextstepaction"]
+> [Test RSC permissions](~/graph-api/rsc/test-resource-specific-consent.md)
+
+## Next step
+
+> [!div class="nextstepaction"]
+> [Prepare your Microsoft 365 tenant](~/concepts/build-and-test/prepare-your-o365-tenant.md)
platform Test Data https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/build-and-test/test-data.md
Last updated 11/01/2019
With a Microsoft 365 developer subscription, you can use your Microsoft Teams app with test teams, channels, and users.
-## Before you start
+## Prerequisites
-If you don't already have a test tenant, you will need to join the Office 365 developer program and sign up for a developer subscription. You'll also need to install the necessary PowerShell modules. For whatever tenant you use you'll need to have global administrator permissions to run the scripts.
+1. [Join the Microsoft 365 Developer Program](/office/developer-program/office-365-developer-program), if you do not have a test tenant.
+2. [Set up a Microsoft 365 Developer Subscription](/office/developer-program/office-365-developer-program-get-started).
+3. [Use sample data packs with your Microsoft 365 developer subscription to install the Users content pack](/office/developer-program/install-sample-packs).
+4. [Install the Teams PowerShell module](https://www.powershellgallery.com/packages/MicrosoftTeams/1.0.2).
+5. [Install the Azure AD PowerShell module](/powershell/azure/active-directory/install-adv2?view=azureadps-2.0#installing-the-azure-ad-module&preserve-view=true).
-1. [Join the Microsoft 365 Developer Program](/office/developer-program/office-365-developer-program)
-2. [Set up a Microsoft 365 Developer Subscription](/office/developer-program/office-365-developer-program-get-started)
-3. [Use sample data packs with your Microsoft 365 developer subscription to install the Users content pack](/office/developer-program/install-sample-packs)
-4. [Install the Teams PowerShell module](https://www.powershellgallery.com/packages/MicrosoftTeams/1.0.2)
-5. [Install the Azure AD PowerShell module](/powershell/azure/active-directory/install-adv2?view=azureadps-2.0#installing-the-azure-ad-module&preserve-view=true)
+> [!NOTE]
+> For any tenant that you use, you must get the global administrator permissions to run the scripts.
-## (Optional) Enable custom app sideloading
+## Enable custom app sideloading
-By default, only global admins or Teams service admins can upload custom apps into the tenant app catalog. You can also allow users to upload custom apps to Teams. For more information, [manage app setup policies in Teams](/microsoftteams/teams-app-setup-policies).
+Enabling custom app sideloading is optional. By default, only global admins or Teams service admins can upload custom apps into the tenant app catalog. You can also allow users to upload custom apps to Teams. For more information, see [manage app setup policies in Teams](/microsoftteams/teams-app-setup-policies).
## Create teams and channels
-Save the following snippet as an XML (.xml) and note where you've saved it. This XML defines the structure of the teams and channels that will be created - along with its members.
-
-```xml
-<?xml version="1.0"?>
-<Teams>
- <Team Name="Store Portal" ID="storeportal" Description="" Type="Private" Creator="admin">
- <Members>
- <Member UserName="AlexW" IsOwner="false"/>
- <Member UserName="PattiF" IsOwner="false"/>
- <Member UserName="PradeepG" IsOwner="false"/>
- <Member UserName="JoniS" IsOwner="false"/>
- <Member UserName="JohannaL" IsOwner="false"/>
- <Member UserName="NestorW" IsOwner="false"/>
- <Member UserName="IsaiahL" IsOwner="false"/>
- <Member UserName="AdeleV" IsOwner="false"/>
- <Member UserName="LeeG" IsOwner="false"/>
- <Member UserName="MeganB" IsOwner="true"/>
- <Member UserName="LynneR" IsOwner="false"/>
- <Member UserName="GradyA" IsOwner="false"/>
- <Member UserName="LidiaH" IsOwner="false"/>
- <Member UserName="DiegoS" IsOwner="false"/>
- <Member UserName="MiriamG" IsOwner="true"/>
- </Members>
- <Channels>
- <Channel Name="Sales" ID="sales" Description="" Creator="Admin" />
- <Channel Name="Inventory" ID="inventory" Description="" Creator="Admin" />
- <Channel Name="Los Angeles Store 239" ID="losangelesstore239" Description="" Creator="Admin" />
- <Channel Name="Seattle Store 121" ID="seattlestore121" Description="" Creator="Admin" />
- <Channel Name="Online" ID="online" Description="" Creator="Admin" />
- <Channel Name="Store Layout" ID="storelayout" Description="" Creator="Admin" />
- <Channel Name="Promotions" ID="promotions" Description="" Creator="Admin" />
- </Channels>
- </Team>
- <Team Name="Mark 8 Project Team" ID="Mark8ProjectTeam" Description="Welcome to the team that we've assembled to create the Mark 8." Type="Private" Creator="admin">
- <Members>
- <Member UserName="meganb" IsOwner="true" />
- <Member UserName="alexw" IsOwner="false" />
- <Member UserName="lynner" IsOwner="false" />
- <Member UserName="isaiahl" IsOwner="false" />
- <Member UserName="leeg" IsOwner="false" />
- <Member UserName="pradeepg" IsOwner="false" />
- <Member UserName="lidiah" IsOwner="false" />
- <Member UserName="diegos" IsOwner="false" />
- <Member UserName="johannal" IsOwner="false" />
- <Member UserName="miriamg" IsOwner="false" />
- <Member UserName="adelev" IsOwner="false" />
- <Member UserName="jonis" IsOwner="false" />
- <Member UserName="nestorw" IsOwner="false" />
- <Member UserName="gradya" IsOwner="false" />
- <Member UserName="pattif" IsOwner="false" />
- </Members>
- <Channels>
- <Channel Name="Research and Development" ID="researchanddevelopment" Description="Channel for Research and Development!" Creator="meganb" />
- <Channel Name="Design" ID="design" Description="Discuss design projects." Creator="meganb" />
- <Channel Name="Digital Assets Web" ID="digitalassetsweb" Description="Discuss digital assets." Creator="meganb" />
- <Channel Name="Go to Market Plan" ID="gotomarketplan" Description="Our go-to-market plan!" Creator="meganb" />
- </Channels>
- </Team>
- <Team Name="District 9 Road Safety Audit" ID="district9roadsafetyaudit" Description="" Type="Private" Creator="admin">
- <Members>
- <Member UserName="meganb" IsOwner="true" />
- <Member UserName="alexw" IsOwner="false" />
- <Member UserName="lynner" IsOwner="false" />
- <Member UserName="isaiahl" IsOwner="false" />
- <Member UserName="leeg" IsOwner="false" />
- <Member UserName="pradeepg" IsOwner="false" />
- <Member UserName="lidiah" IsOwner="false" />
- <Member UserName="diegos" IsOwner="false" />
- <Member UserName="johannal" IsOwner="false" />
- <Member UserName="miriamg" IsOwner="false" />
- <Member UserName="adelev" IsOwner="false" />
- <Member UserName="jonis" IsOwner="false" />
- <Member UserName="nestorw" IsOwner="false" />
- <Member UserName="gradya" IsOwner="false" />
- <Member UserName="pattif" IsOwner="false" />
- </Members>
- <Channels>
- <Channel Name="Audit Planning" ID="auditplanning" Description="" Creator="Admin" />
- <Channel Name="Delivery" ID="delivery" Description="" Creator="Admin" />
- <Channel Name="Findings" ID="findings" Description="" Creator="Admin" />
- <Channel Name="Recommended Actions" ID="recommendedactions" Description="" Creator="Admin" />
- <Channel Name="Survey" ID="survey" Description="" Creator="Admin" />
- </Channels>
- </Team>
- <Team Name="ACC-1000 Product Team" ID="acc1000productteam" Description="" Type="Private" Creator="admin" >
- <Members>
- <Member UserName="meganb" IsOwner="true" />
- <Member UserName="alexw" IsOwner="false" />
- <Member UserName="lynner" IsOwner="false" />
- <Member UserName="isaiahl" IsOwner="false" />
- <Member UserName="leeg" IsOwner="false" />
- <Member UserName="pradeepg" IsOwner="false" />
- <Member UserName="lidiah" IsOwner="false" />
- <Member UserName="diegos" IsOwner="false" />
- <Member UserName="johannal" IsOwner="false" />
- <Member UserName="miriamg" IsOwner="false" />
- <Member UserName="adelev" IsOwner="false" />
- <Member UserName="jonis" IsOwner="false" />
- <Member UserName="nestorw" IsOwner="false" />
- <Member UserName="gradya" IsOwner="false" />
- <Member UserName="pattif" IsOwner="false" />
- </Members>
- <Channels>
- <Channel Name="Corporate Communication" ID="corporatecommunication" Description="" Creator="Admin" />
- <Channel Name="Lean Process Improvement" ID="corporatecommunication" Description="" Creator="Admin" />
- <Channel Name="Training and Certification" ID="trainingandcertification" Description="" Creator="Admin" />
- <Channel Name="Production" ID="production" Description="" Creator="Admin" />
- <Channel Name="Research and Development" ID="researchanddevelopment" Description="" Creator="Admin" />
- <Channel Name="Supplier Collaboration" ID="suppliercollaboration" Description="" Creator="Admin" />
- </Channels>
- </Team>
-</Teams>
-```
-
-Save the following snippet as a PowerShell script (.ps1) and note where you've saved it. This script executes the steps to create the teams and channels and add members to them.
-
-```powershell
-Param(
- [Parameter(Mandatory = $true)]
-
- # This specifies the location of your configuration XML.
-
- [string] $teamsFilePath
-)
-
-[xml]$XmlDocument = Get-Content -Path $teamsFilePath.ToString()
-
-if ($XmlDocument.Teams.Team.Count -gt 0) {
-
- try {
-
- # 1. Login with the global administrator account for your O365 Developer Program tenant. This script will then use these credentials to connect to the powershell modules for Azure Active Directory and Microsoft Teams
-
- $creds = Get-Credential
-
- # Connecting to AAD PowerShell
- Connect-AzureAD -Credential $creds | Out-Null
-
- # Connect to Microsoft Teams PowerShell
- Connect-MicrosoftTeams -Credential $creds | Out-Null
-
- Write-Host "Connected to Microsoft 365 and configuring your organization with test teams and channels"
-
- # 2. Create the teams as specified in the XML.
-
- foreach ($team in $XmlDocument.Teams.Team ) {
- try {
- $group = New-Team -DisplayName $team.Name -Description $teams.description -visibility public
- Write-Host "Successfully created team: " $group.DisplayName
- }
- catch {
- Write-Host "Unable to create team: $_"
- }
-
- # 3. Add users to the newly created teams.
- foreach ($user in $team.Members.Member) {
+1. Save the following snippet as a **.xml** file and note the file path. This XML defines the structure of the team and channel that is created along with its members:
+
+ ```xml
+ <?xml version="1.0"?>
+ <Teams>
+ <Team Name="Store Portal" ID="storeportal" Description="" Type="Private" Creator="admin">
+ <Members>
+ <Member UserName="AlexW" IsOwner="false"/>
+ <Member UserName="PattiF" IsOwner="false"/>
+ <Member UserName="PradeepG" IsOwner="false"/>
+ <Member UserName="JoniS" IsOwner="false"/>
+ <Member UserName="JohannaL" IsOwner="false"/>
+ <Member UserName="NestorW" IsOwner="false"/>
+ <Member UserName="IsaiahL" IsOwner="false"/>
+ <Member UserName="AdeleV" IsOwner="false"/>
+ <Member UserName="LeeG" IsOwner="false"/>
+ <Member UserName="MeganB" IsOwner="true"/>
+ <Member UserName="LynneR" IsOwner="false"/>
+ <Member UserName="GradyA" IsOwner="false"/>
+ <Member UserName="LidiaH" IsOwner="false"/>
+ <Member UserName="DiegoS" IsOwner="false"/>
+ <Member UserName="MiriamG" IsOwner="true"/>
+ </Members>
+ <Channels>
+ <Channel Name="Sales" ID="sales" Description="" Creator="Admin" />
+ <Channel Name="Inventory" ID="inventory" Description="" Creator="Admin" />
+ <Channel Name="Los Angeles Store 239" ID="losangelesstore239" Description="" Creator="Admin" />
+ <Channel Name="Seattle Store 121" ID="seattlestore121" Description="" Creator="Admin" />
+ <Channel Name="Online" ID="online" Description="" Creator="Admin" />
+ <Channel Name="Store Layout" ID="storelayout" Description="" Creator="Admin" />
+ <Channel Name="Promotions" ID="promotions" Description="" Creator="Admin" />
+ </Channels>
+ </Team>
+ <Team Name="Mark 8 Project Team" ID="Mark8ProjectTeam" Description="Welcome to the team that we've assembled to create the Mark 8." Type="Private" Creator="admin">
+ <Members>
+ <Member UserName="meganb" IsOwner="true" />
+ <Member UserName="alexw" IsOwner="false" />
+ <Member UserName="lynner" IsOwner="false" />
+ <Member UserName="isaiahl" IsOwner="false" />
+ <Member UserName="leeg" IsOwner="false" />
+ <Member UserName="pradeepg" IsOwner="false" />
+ <Member UserName="lidiah" IsOwner="false" />
+ <Member UserName="diegos" IsOwner="false" />
+ <Member UserName="johannal" IsOwner="false" />
+ <Member UserName="miriamg" IsOwner="false" />
+ <Member UserName="adelev" IsOwner="false" />
+ <Member UserName="jonis" IsOwner="false" />
+ <Member UserName="nestorw" IsOwner="false" />
+ <Member UserName="gradya" IsOwner="false" />
+ <Member UserName="pattif" IsOwner="false" />
+ </Members>
+ <Channels>
+ <Channel Name="Research and Development" ID="researchanddevelopment" Description="Channel for Research and Development!" Creator="meganb" />
+ <Channel Name="Design" ID="design" Description="Discuss design projects." Creator="meganb" />
+ <Channel Name="Digital Assets Web" ID="digitalassetsweb" Description="Discuss digital assets." Creator="meganb" />
+ <Channel Name="Go to Market Plan" ID="gotomarketplan" Description="Our go-to-market plan!" Creator="meganb" />
+ </Channels>
+ </Team>
+ <Team Name="District 9 Road Safety Audit" ID="district9roadsafetyaudit" Description="" Type="Private" Creator="admin">
+ <Members>
+ <Member UserName="meganb" IsOwner="true" />
+ <Member UserName="alexw" IsOwner="false" />
+ <Member UserName="lynner" IsOwner="false" />
+ <Member UserName="isaiahl" IsOwner="false" />
+ <Member UserName="leeg" IsOwner="false" />
+ <Member UserName="pradeepg" IsOwner="false" />
+ <Member UserName="lidiah" IsOwner="false" />
+ <Member UserName="diegos" IsOwner="false" />
+ <Member UserName="johannal" IsOwner="false" />
+ <Member UserName="miriamg" IsOwner="false" />
+ <Member UserName="adelev" IsOwner="false" />
+ <Member UserName="jonis" IsOwner="false" />
+ <Member UserName="nestorw" IsOwner="false" />
+ <Member UserName="gradya" IsOwner="false" />
+ <Member UserName="pattif" IsOwner="false" />
+ </Members>
+ <Channels>
+ <Channel Name="Audit Planning" ID="auditplanning" Description="" Creator="Admin" />
+ <Channel Name="Delivery" ID="delivery" Description="" Creator="Admin" />
+ <Channel Name="Findings" ID="findings" Description="" Creator="Admin" />
+ <Channel Name="Recommended Actions" ID="recommendedactions" Description="" Creator="Admin" />
+ <Channel Name="Survey" ID="survey" Description="" Creator="Admin" />
+ </Channels>
+ </Team>
+ <Team Name="ACC-1000 Product Team" ID="acc1000productteam" Description="" Type="Private" Creator="admin" >
+ <Members>
+ <Member UserName="meganb" IsOwner="true" />
+ <Member UserName="alexw" IsOwner="false" />
+ <Member UserName="lynner" IsOwner="false" />
+ <Member UserName="isaiahl" IsOwner="false" />
+ <Member UserName="leeg" IsOwner="false" />
+ <Member UserName="pradeepg" IsOwner="false" />
+ <Member UserName="lidiah" IsOwner="false" />
+ <Member UserName="diegos" IsOwner="false" />
+ <Member UserName="johannal" IsOwner="false" />
+ <Member UserName="miriamg" IsOwner="false" />
+ <Member UserName="adelev" IsOwner="false" />
+ <Member UserName="jonis" IsOwner="false" />
+ <Member UserName="nestorw" IsOwner="false" />
+ <Member UserName="gradya" IsOwner="false" />
+ <Member UserName="pattif" IsOwner="false" />
+ </Members>
+ <Channels>
+ <Channel Name="Corporate Communication" ID="corporatecommunication" Description="" Creator="Admin" />
+ <Channel Name="Lean Process Improvement" ID="corporatecommunication" Description="" Creator="Admin" />
+ <Channel Name="Training and Certification" ID="trainingandcertification" Description="" Creator="Admin" />
+ <Channel Name="Production" ID="production" Description="" Creator="Admin" />
+ <Channel Name="Research and Development" ID="researchanddevelopment" Description="" Creator="Admin" />
+ <Channel Name="Supplier Collaboration" ID="suppliercollaboration" Description="" Creator="Admin" />
+ </Channels>
+ </Team>
+ </Teams>
+ ```
+
+2. Save the following snippet as a PowerShell script (.ps1) and note where you have saved it. This script executes the steps to create the team and channel, and add members to them:
+
+ ```powershell
+ Param(
+ [Parameter(Mandatory = $true)]
+
+ # This specifies the location of your configuration XML.
+
+ [string] $teamsFilePath
+ )
+
+ [xml]$XmlDocument = Get-Content -Path $teamsFilePath.ToString()
+
+ if ($XmlDocument.Teams.Team.Count -gt 0) {
+
+ try {
+
+ # 1. Login with the global administrator account for your O365 Developer Program tenant. This script uses these credentials to connect to the powershell modules for Azure Active Directory and Microsoft Teams
+
+ $creds = Get-Credential
+
+ # Connecting to AAD PowerShell
+ Connect-AzureAD -Credential $creds | Out-Null
+
+ # Connect to Microsoft Teams PowerShell
+ Connect-MicrosoftTeams -Credential $creds | Out-Null
+
+ Write-Host "Connected to Microsoft 365 and configuring your organization with test teams and channels"
+
+ # 2. Create the teams as specified in the XML.
+
+ foreach ($team in $XmlDocument.Teams.Team ) {
try {
- $newUserPrincipalName = (Get-AzureADUser -SearchString $user.UserName).UserPrincipalName
+ $group = New-Team -DisplayName $team.Name -Description $teams.description -visibility public
+ Write-Host "Successfully created team: " $group.DisplayName
+ }
+ catch {
+ Write-Host "Unable to create team: $_"
+ }
+
+ # 3. Add users to the newly created teams.
+ foreach ($user in $team.Members.Member) {
+ try {
+ $newUserPrincipalName = (Get-AzureADUser -SearchString $user.UserName).UserPrincipalName
- if($user.IsOwner -eq $true){
- Add-TeamUser -GroupId $group.GroupId -User $newUserPrincipalName -Role Owner | Out-Null
- }else{
- Add-TeamUser -GroupId $group.GroupId -User $newUserPrincipalName | Out-Null
+ if($user.IsOwner -eq $true){
+ Add-TeamUser -GroupId $group.GroupId -User $newUserPrincipalName -Role Owner | Out-Null
+ }else{
+ Add-TeamUser -GroupId $group.GroupId -User $newUserPrincipalName | Out-Null
+ }
+
+ Write-Host "Successfully added user : " $user.UserName
+ }
+ catch {
+ Write-Host "Unable to add team user: $_"
}
- Write-Host "Successfully added user : " $user.UserName
}
- catch {
- Write-Host "Unable to add team user: $_"
+
+ # 4. Add a set of channels to each newly created team
+ foreach ($channel in $team.Channels.Channel) {
+ try {
+ # Adding each team channel
+ New-TeamChannel -GroupId $group.GroupId -DisplayName $channel.Name -Description $channel.Description | Out-Null
+ Write-Host "Successfully created channel: " $channel.Name
+ }
+ catch {
+ Write-Host "Unable to add new Team Channel: $_"
+ }
}
+ Clear-Variable -Name group
}
- # 4. Add a set of channels to each newly created team
- foreach ($channel in $team.Channels.Channel) {
- try {
- # Adding each team channel
- New-TeamChannel -GroupId $group.GroupId -DisplayName $channel.Name -Description $channel.Description | Out-Null
- Write-Host "Successfully created channel: " $channel.Name
- }
- catch {
- Write-Host "Unable to add new Team Channel: $_"
- }
- }
+ Clear-Variable -Name creds
- Clear-Variable -Name group
- }
+ # 5. Disconnect from all PowerShell sessions
- Clear-Variable -Name creds
-
- # 5. Disconnect from all PowerShell sessions
-
- Write-Host "Completed execution and disconnecting from Microsoft 365 PowerShell sessions."
- Disconnect-MicrosoftTeams
- Disconnect-AzureAD
+ Write-Host "Completed execution and disconnecting from Microsoft 365 PowerShell sessions."
+ Disconnect-MicrosoftTeams
+ Disconnect-AzureAD
+ }
+ catch {
+ Write-Host "Unable to complete the operation: $_"
+ }
}
- catch {
- Write-Host "Unable to complete the operation: $_"
+ else {
+ Write-Host "Content file has invalid data."
}
-}
-else {
- Write-Host "Content file has invalid data."
-}
-```
+ ```
+
+3. Open a Windows PowerShell session in Administrator mode, and run the script that you just saved.
+4. When you are prompted to provide the credentials, enter the Global Administrator credentials you received when you first signed up for your developer subscription.
+
+ > [!Note]
+ > Do not close your PowerShell session as the script takes several minutes to execute. If you have modified the users in your subscription from what is created in the default content pack, some users may not be added to Teams. As the script executes it displays successful or failed actions.
+
+5. After the script has finished execution, you can sign in to the Teams client with one of the user accounts and view the newly created teams.
+
+## See also
-Open a Windows PowerShell session in Administrator mode. Run the script that you just saved. You'll be prompted to provide the credentials - use the Global Administrator credentials you received when you first signed up for your developer subscription.
+> [!div class="nextstepaction"]
+> [Debug your tab](~/tabs/how-to/developer-tools.md)
+
+> [!div class="nextstepaction"]
+> [Debug your bots](~/bots/how-to/debug/locally-with-an-ide.md)
-> [!Note]
-> The script will take several minutes to execute - do not close your PowerShell session. If you've modified the users in your subscription from what is created in the default content pack, some users may not be added to teams. As the script executes it will output successful or failed actions.
+> [!div class="nextstepaction"]
+> [Test RSC permissions](~/graph-api/rsc/test-resource-specific-consent.md)
-Once the script has finished execution, you can login to the Teams client with one of the user accounts and view the newly created teams.
platform Detail Page Checklist https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/deploy-and-publish/appsource/prepare/detail-page-checklist.md
Here's a view in [App Studio](https://aka.ms/InstallTeamsAppStudio):
<br>`1.third`<br> >**[Unordered List](https://www.markdownguide.org/basic-syntax/#unordered-lists)**<br> ` - short` <br>`- bulleted` <br>`- list`<br>
->**Newline**. `Place <br> at the end of a line.` <br>
+>**Newline**. Use a `\n` character to designate a newline.
>**Escape.** Use an inline backslash to escape special characters. `\*asterisk`. **Example in Markdown format**
platform Design Teams App Overview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/design/design-teams-app-overview.md
Understand how people add, use, and manage Teams apps to make the most of each c
* [Task modules](../../task-modules-and-cards/task-modules/design-teams-task-modules.md) * [Adaptive Cards](../../task-modules-and-cards/cards/design-effective-cards.md)
+## App customization
+
+Understand how the Teams admin can customize or rebrand the app based on the organization's need. This customization is enabled if you define the `configurableProperties` in the manifest schema. For more information, see [Customize apps in Microsoft Teams](/MicrosoftTeams/customize-apps).
+
+> [!NOTE]
+> This feature is currently available in developer preview only.
+>
+> App customization enables admins to change the look-and-feel of the apps loaded through bots, messaging extensions, tabs, and connectors. For example, if the Teams admin customizes the name of an app from *Contoso* to *Contoso Agent*, then the app will appear with the new name *Contoso Agent* to users. However, while adding a connector to a chat, in the list the connectors will still show the name of the app as *Contoso*.
+>
+> As a best practice, you must provide customization guidelines for app users and customers to follow when customizing your app. For more information, see [customize apps in Microsoft Teams](/MicrosoftTeams/customize-apps).
+ ## Tools and samples
-The following tools can help designers and developers get started.
+The following tools can help designers and developers get started:
### Microsoft Teams UI Kit
platform Test Resource Specific Consent https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/graph-api/rsc/test-resource-specific-consent.md
Title: Test resource-specific consent in Teams
+ Title: Test resource-specific consent permissions in Teams
description: Details testing resource-specific consent in Teams using Postman
-localization_priority: Normal
+localization_priority: Normal
keywords: teams authorization OAuth SSO AAD rsc Postman Graph
-# Test resource-specific consent permissions in Teams
+# Test resource-specific consent permissions in Teams
-Resource-specific consent (RSC) is a Microsoft Teams and Graph API integration that enables your app to use API endpoints to manage specific teams within an organization. Please *see* [Resource-specific consent (RSC) ΓÇö Microsoft Teams Graph API](resource-specific-consent.md).
+Resource-specific consent (RSC) is a Microsoft Teams and Graph API integration that enables your app to use API endpoints to manage specific teams within an organization. For more information, see [Resource-specific consent (RSC) ΓÇö Microsoft Teams Graph API](resource-specific-consent.md).
> [!NOTE]
->To test the RSC permissions, your Teams app manifest file must include a **webApplicationInfo** key populated with the following fields:
+> To test the RSC permissions, your Teams app manifest file must include a **webApplicationInfo** key populated with the following fields:
>
-> - **id** ΓÇö your Azure AD app id, *see* [Register your app in the Azure AD portal](resource-specific-consent.md#register-your-app-with-microsoft-identity-platform-via-the-azure-ad-portal).
-> - **resource** ΓÇö any string, *see* the note in [Update your Teams app manifest](resource-specific-consent.md#update-your-teams-app-manifest)
-> - **application permissions** ΓÇö RSC permissions for your app, *see* [Resource-specific Permissions](resource-specific-consent.md#resource-specific-permissions).
+> - **id**: Your Azure AD app ID, see [Register your app in the Azure AD portal](resource-specific-consent.md#register-your-app-with-microsoft-identity-platform-via-the-azure-ad-portal).
+> - **resource**: Any string, see the note in [Update your Teams app manifest](resource-specific-consent.md#update-your-teams-app-manifest)
+> - **application permissions**: RSC permissions for your app, see [Resource-specific Permissions](resource-specific-consent.md#resource-specific-permissions).
```json "webApplicationInfo":{
Resource-specific consent (RSC) is a Microsoft Teams and Graph API integration t
} ```
->[!IMPORTANT]
->In your app manifest, only include the RSC permissions that you want your app to have.
+> [!IMPORTANT]
+> In your app manifest, only include the RSC permissions that you want your app to have.
## Test added RSC permissions using the Postman app
-To check whether the RSC permissions are being honored by the API request payload, you'll need to copy the [RSC JSON test code](test-rsc-json-file.md) into your local environment and update the following values:
+To check whether the RSC permissions are being honored by the API request payload, you need to copy the [RSC JSON test code](test-rsc-json-file.md) into your local environment and update the following values:
-1. `azureADAppId` ΓÇö your app's Azure AD app id.
-1. `azureADAppSecret` ΓÇö your Azure AD app secret (password)
-1. `token_scope` ΓÇö the scope is required to get a token - set the value to https://graph.microsoft.com/.default
-1. `teamGroupId` ΓÇö you can get the team group id from the Teams client as follows:
+* `azureADAppId`: Your app's Azure AD app ID
+* `azureADAppSecret`: Your Azure AD app secret (password)
+* `token_scope`: The scope is required to get a token - set the value to https://graph.microsoft.com/.default
+* `teamGroupId`: You can get the team group id from the Teams client as follows:
-> [!div class="checklist"]
->
-> * In the Teams client, select **Teams** from the far left nav bar .
-> * Select the team where the app is installed from the dropdown menu.
-> * Select the **More options** icon (&#8943;)
-> * Select **Get link to team**
-> * Copy and save the **groupId** value from the string.
+ > [!div class="checklist"]
+ >
+ > * In the Teams client, select **Teams** from the far left navigation bar .
+ > * Select the team where the app is installed from the dropdown menu.
+ > * Select the **More options** icon (&#8943;)
+ > * Select **Get link to team**
+ > * Copy and save the **groupId** value from the string.
-### Using Postman
+### Use Postman
-> [!div class="checklist"]
->
-> * Open the [Postman](https://www.postman.com) app.
-> * Select **File** => **Import** => **Import file** to upload the updated JSON file from your environment.
-> * Select the **Collections** tab.
-> * Select the chevron (>) next to the **Test RSC** to expand the details view and see the API requests.
+1. Open the [Postman](https://www.postman.com) app.
+2. Select **File** > **Import** > **Import file** to upload the updated JSON file from your environment.
+3. Select the **Collections** tab.
+4. Select the chevron **>** next to the **Test RSC** to expand the details view and see the API requests.
+
+Execute the entire permissions collection for each API call. The permissions that you specified in your app manifest must succeed, while those not specified must fail with an HTTP 403 status code. Check all of the response status codes to confirm that the behavior of the RSC permissions in your app meet expectations.
-Execute the entire permissions collection for each API call. The permissions that you specified in your app manifest should succeed, while those not specified should fail with an HTTP 403 status code. Check all of the response status codes to confirm that the behavior of the RSC permissions in your app meet expectations.
+> [!NOTE]
+> To test specific DELETE and READ API calls, add those instance scenarios to the JSON file.
->[!NOTE]
->To test specific DELETE and READ API calls, please add those instance scenarios to the JSON file.
+## Test revoked RSC permissions using [Postman](https://www.postman.com/)
-## Test revoked RSC permissions using [Postman](https://www.postman.com/)
+1. Uninstall the app from the specific team.
+2. Follow the steps for [Test added RSC permissions using Postman](#test-added-rsc-permissions-using-the-postman-app).
+3. Check all the response status codes to confirm that the specific API calls, **succeeded, have failed with an HTTP 403 status code**.
-> [!div class="checklist"]
->
-> * Uninstall the app from the specific team.
-> * Follow the steps above for [Test added RSC permissions using Postman](#test-added-rsc-permissions-using-the-postman-app).
-> * Check all of the response status codes to confirm that the specific API calls that succeeded have failed with an HTTP 403 status code.
+## See also
> [!div class="nextstepaction"]
->
-> [Learn more: Microsoft Graph API and Teams](/graph/api/resources/teams-api-overview?view=graph-rest-1.0)
+> [Microsoft Graph API and Teams](/graph/api/resources/teams-api-overview?view=graph-rest-1.0&preserve-view=true)
platform Developer Preview Features https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/resources/dev-preview/developer-preview-features.md
keywords: teams preview developer features
The developer preview includes the following new features:
+## App customization
+
+You can now define a select set of properties, which a Teams admin can customize or rebrand based on their organization's need. For more information, see [app customization feature](~/concepts/design/design-teams-app-overview.md).
+ ## Tabs single sign-on (SSO) You can now use [single sign-on (SSO)](~/tabs/how-to/authentication/auth-aad-sso.md) to login and authenticate a user on desktop and mobile using the Teams JavaScript SDK from a web content page. One of the benefits is that a user never has to sign-in; and once they've consented to the app using their profile: they will automatically be signed-in to their tab (including mobile).
Our developer preview is available in manifest versions 1.5 and greater. Our cur
## Calls and online meeting bots
-With the addition of [Microsoft Graph APIs for calls and online meetings](/graph/api/resources/communications-api-overview?view=graph-rest-beta), Microsoft Teams apps can now interact with users in rich ways using voice and video. These APIs allow you to add new app features such as interactive voice response (IVR), call control, and access to real-time audio and/or video streams for calls and meetings, including desktop and app sharing.
+With the addition of [Microsoft Graph APIs for calls and online meetings](/graph/api/resources/communications-api-overview?view=graph-rest-beta&preserve-view=true), Microsoft Teams apps can now interact with users in rich ways using voice and video. These APIs allow you to add new app features such as interactive voice response (IVR), call control, and access to real-time audio and/or video streams for calls and meetings, including desktop and app sharing.
We've added a new section on how to create and develop calls and online meetings bots, starting with the [overview](~/bots/calls-and-meetings/calls-meetings-bots-overview.md). + ## Image enlarge support It is now possible for bots to indicate which images shared in Adaptive Cards in Teams are allowed to be enlarged. This is useful for scenarios like sharing detailed step-by-step visual guides via bots which might be hard to read for users otherwise. To make an image expandable, just flag it `allowExpand: true` as shown below.
platform Manifest Schema Dev Preview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/resources/schema/manifest-schema-dev-preview.md
For more information on the features available see: [Features in the Public Deve
"contoso.com", "mysite.someplace.com", "othersite.someplace.com"
- ]
+ ],
+ "configurableProperties": [
+ "name",
+ "shortDescription",
+ "longDescription",
+ "smallImageUrl",
+ "largeImageUrl",
+ "accentColor",
+ "websiteUrl",
+ "privacyUrl",
+ "termsOfUseUrl"
+ ]
} ```
Specify your AAD App ID and Graph information to help users seamlessly sign into
|Name| Type| Maximum size | Required | Description| |||||| |`id`|String|36 characters|Γ£ö|AAD application id of the app. This id must be a GUID.|
-|`resource`|String|2048 characters|Γ£ö|Resource url of app for acquiring auth token for SSO.|
+|`resource`|String|2048 characters|Γ£ö|Resource url of app for acquiring auth token for SSO.|
+
+## configurableProperties
+
+**Optional** - array
+
+The `configurableProperties` block defines the app properties that Teams admin can customize. For more information, see [customize apps in Microsoft Teams](/MicrosoftTeams/customize-apps).
+
+> [!NOTE]
+> A minimum of one property must be defined. You can define a maximum of nine properties in this block.
+> As a best practice, you must provide customization guidelines for app users and customers to follow when customizing your app.
+
+You can define any of the following properties:
+* `name`: Allows admin to change the app's display name.
+* `shortDescription`: Allows admin to change the app's short description.
+* `longDescription`: Allows admin to change the app's detailed description.
+* `smallImageUrl`: It is `outline` property in the `icons` block of the manifest.
+* `largeImageUrl`: It is the `color` property in the `icons` block of the manifest.
+* `accentColor`: It is the color to use in conjunction with and as a background for your outline icons.
+* `developerUrl`: It is the https:// URL to the developer's website.
+* `privacyUrl`: It is the https:// URL to the developer's privacy policy.
+* `termsOfUseUrl`: It is the https:// URL to the developer's terms of use.
++
platform Manifest Schema https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/resources/schema/manifest-schema.md
The following schema sample shows all extensibility options.
] }, "defaultInstallScope": "meetings",
- "defaultGroupCapability": {"meetings": "tab" , "team": "bot", "groupchat": "bot"}
+ "defaultGroupCapability": {
+ "meetings": "tab",
+ "team": "bot",
+ "groupchat": "bot"
+ }
} ```
Define the properties your app uses to post a user activity feed.
``` ***
->
->
++
platform Developer Tools https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/tabs/how-to/developer-tools.md
description: Describes how to get to the DevTools when using the Microsoft Teams
keywords: devtools debug mobile chrome desktop client developer tools + # DevTools for Microsoft Teams tabs
-When Teams is running in a browser, itΓÇÖs easy to access the browser's DevTools: F12 (on Windows) or Command-Option-I (on MacOS). The DevTools gives you access to:
+When Teams is running in a browser, it is easy to access the browser's DevTools: F12 on Windows or Command-Option-I on MacOS. The DevTools gives you access to:
1. View console logs.
-1. View/modify html, css, and network requests during runtime.
-1. Add breakpoints to your JavaScript code, and perform interactive debugging.
+1. View or modify HTML, CSS, and network requests during runtime.
+1. Add breakpoints to your JavaScript code and perform interactive debugging.
-The feature is only available in desktop and Android clients after Developer Preview has been enabled. See [How do I enable Developer Preview](~/resources/dev-preview/developer-preview-intro.md) for more information.
+> [!NOTE]
+> The feature is only available in desktop and Android clients after **Developer Preview** has been enabled. For more information, see [How do I enable developer preview](~/resources/dev-preview/developer-preview-intro.md).
-## Accessing DevTools in the Desktop
+## Access DevTools in the Desktop
-While the web version of Teams and the desktop version of teams are almost exactly the same, there are some differences, particularly with respect to authentication. Sometimes the only way to figure out whatΓÇÖs going on is to use the DevTools. Here's how to get to them from the Teams desktop client. To use DevTools in the desktop client:
+While the web version and the desktop version of Teams are almost exactly the same, there are some differences with respect to authentication. Sometimes the only way to figure out what is going on is to use the DevTools. To use DevTools in the desktop client, you must:
-1. Make sure you have enabled [developer preview](~/resources/dev-preview/developer-preview-intro.md)
+1. Ensure you have enabled [developer preview](~/resources/dev-preview/developer-preview-intro.md).
1. Open up a tab so you have something to inspect with the DevTools.
-1. Open the DevTools one of the following ways:
+1. Open the DevTools in one of the following ways:
* **Windows**: Select the Teams icon in the desktop tray.
- * **macOS**: Select the Teams icon in the Dock.
-
-The following screenshot shows DevTools inspecting an element in a tab configuration dialog:
+ * **MacOS**: Select the Teams icon in the Dock.
+
+ The following image shows DevTools inspecting an element in a tab configuration dialog:
-![Tab and DevTools](~/assets/images/dev-preview/tab-and-devtools.png)
+ ![Tab and DevTools](~/assets/images/dev-preview/tab-and-devtools.png)
-## Accessing DevTools from an Android client
+## Access DevTools from an Android client
-You can also enable the DevTools from the Teams Android client.
+You can also enable the DevTools from the Teams Android client. To enable DevTools, you must:
-1. Make sure you have enabled [developer preview](~/resources/dev-preview/developer-preview-intro.md)
-1. Connect your device to your desktop computer, and setup your Android device for [remote debugging](https://developers.google.com/web/tools/chrome-devtools/remote-debugging/)
+1. Enable the [developer preview](~/resources/dev-preview/developer-preview-intro.md).
+1. Connect your device to your desktop computer, and setup your Android device for [remote debugging](https://developers.google.com/web/tools/chrome-devtools/remote-debugging/).
1. In your Chrome browser, open `chrome://inspect/#devices`.
-1. Click **inspect** below the tab you wish to debug, as in the screenshot below.
+1. Select **inspect** under the tab you wish to debug, as in the following image:
-![Android DevTools](~/assets/images/android-devtools.png)
+ ![Android DevTools](~/assets/images/android-devtools.png)
platform Cards Reference https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/cards/cards-reference.md
Title: Cards Reference
+ Title: Cards reference
description: Describes all the cards and card actions available to bots in Teams keywords: bots cards reference + # Cards reference
-The cards listed in this section are supported in bots for Microsoft Teams. They are based on cards defined by the Bot Framework, but Teams does not support all Bot Framework cards and has added some of its own. Differences are called out in the references in this document.
+The cards listed in this document are supported in bots for Microsoft Teams. They are based on cards defined by the Bot Framework, but Teams does not support all Bot Framework cards and instead some Teams cards have been added. Differences are called out in the references in this document.
## Card examples
-You can find additional information on how to use cards in the documentation for the Bot Builder SDK (v3). Code samples are also available in the Microsoft/BotBuilder-Samples repository on GitHub.
+You can find additional information on how to use cards in the documentation for the Bot Builder SDK v3. Code samples are also available in the Microsoft/BotBuilder-Samples repository on GitHub.
* .NET * [Add cards as attachments to messages](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=csharp#send-an-adaptive-card&preserve-view=true)
- * [Cards sample code (Bot Builder v4)](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/csharp_dotnetcore/06.using-cards)
+ * [Cards sample code Bot Builder v4](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/csharp_dotnetcore/06.using-cards)
* Node.js * [Add cards as attachments to messages](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=javascript#send-an-adaptive-card&preserve-view=true)
- * [Cards sample code (Bot Builder v4)](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/javascript_nodejs/06.using-cards)
+ * [Cards sample code Bot Builder v4](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/javascript_nodejs/06.using-cards)
## Types of cards
This table shows the types of cards available to you:
| Card type | Description | | | |
-| [Adaptive card](#adaptive-card) | Highly customizable card that can contain any combination of text, speech, images, buttons and input fields. |
-| [Hero card](#hero-card) | Typically contains a single large image, one or more buttons, and a small amount of text. |
-| [List card](#list-card) | A scrolling list of items. |
-| [Office 365 connector card](#office-365-connector-card) | Flexible layout with multiple sections, fields, images and actions. |
-| [Receipt card](#receipt-card) | Provides a receipt to the user. |
-| [Signin card](#signin-card) | Enables a bot to request that a user sign in. |
-| [Thumbnail card](#thumbnail-card) | Typically contains a single thumbnail image, some short text, and one or more buttons. |
-| [Card collections](#card-collections) | Used to return multiple items in a single response. |
+| [Adaptive card](#adaptive-card) | This card is highly customizable card that can contain any combination of text, speech, images, buttons, and input fields. |
+| [Hero card](#hero-card) | This card typically contains a single large image, one or more buttons, and a small amount of text. |
+| [List card](#list-card) | This card is a scrolling list of items. |
+| [Office 365 connector card](#office-365-connector-card) | This card has a flexible layout with multiple sections, fields, images, and actions. |
+| [Receipt card](#receipt-card) | This card provides a receipt to the user. |
+| [Signin card](#signin-card) | This card enables a bot to request that a user signs in. |
+| [Thumbnail card](#thumbnail-card) | This card typically contains a single thumbnail image, some short text, and one or more buttons. |
+| [Card collections](#card-collections) | This cards is used to return multiple items in a single response. |
## Common properties for all cards
This table shows the types of cards available to you:
The card can contain an inline image by including a link to the publicly available image. For performance purposes, it is highly recommended you host the image on a public content-delivery network (CDN).
-Images are scaled up or down in size while maintaining the aspect ratio to cover the image area, and then cropped from center to achieve the appropriate aspect ratio for the card.
+Images are scaled up or down in size while maintaining the aspect ratio to cover the image area. Images are then cropped from center to achieve the appropriate aspect ratio for the card.
-Images must be at most 1024×1024, in PNG, JPEG, or GIF format, and animated GIF is not supported.
+Images must be at most 1024×1024, in PNG, JPEG, or GIF format, and do not support animated GIF.
| Property | Type | Description | | | | |
-| url | URL | HTTPS URL to the image |
-| alt | String | Accessible description of the image |
+| url | URL | HTTPS URL to the image. |
+| alt | String | Accessible description of the image. |
+
+> [!NOTE]
+> If a card includes an image URL that goes through a redirect before the final image, the redirect in image URL is not supported. This occurs for images shared on the public cloud.
### Buttons
-Buttons are shown stacked at the bottom of the card. Button text is always on a single line and will be truncated if the text exceeds the button width. Any additional buttons beyond the maximum number supported by the card will not be shown.
+Buttons are shown stacked at the bottom of the card. Button text is always on a single line and is truncated if the text exceeds the button width. Any additional buttons beyond the maximum number supported by the card are not shown.
-See [Card Actions](~/task-modules-and-cards/cards/cards-actions.md) for more information.
+For more information, see [card actions](~/task-modules-and-cards/cards/cards-actions.md).
### Card formatting
-See [Card Formatting](~/task-modules-and-cards/cards/cards-format.md) for more information on text formatting in cards.
+For more information on text formatting in cards, see [card formatting](~/task-modules-and-cards/cards/cards-format.md).
## Adaptive card
-An adaptive card is a customizable card that can contain any combination of text, speech, images, buttons, and input fields. See [Adaptive Cards v1.2.0](https://github.com/microsoft/AdaptiveCards/releases/tag/v1.2.0).
+An adaptive card is a customizable card that can contain any combination of text, speech, images, buttons, and input fields. See [adaptive cards v1.2.0](https://github.com/microsoft/AdaptiveCards/releases/tag/v1.2.0).
### Support for adaptive cards
An adaptive card is a customizable card that can contain any combination of text
| Γ£ö | Γ£ö | Γ£û | Γ£ö | > [!NOTE]
-> * Teams platform supports v1.2 or earlier of Adaptive card features.
-> * Media elements are currently not supported in Adaptive card v1.2 on the Teams platform.
+> * Teams platform supports v1.2 or earlier of adaptive card features.
+> * Media elements are currently not supported in adaptive card v1.2 on the Teams platform.
### Example of an adaptive card
An adaptive card is a customizable card that can contain any combination of text
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)
+* [Adaptive cards Node.js](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=javascript#send-an-adaptive-card&preserve-view=true)
* [Adaptive card C#](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=csharp#send-an-adaptive-card&preserve-view=true) ## Hero card
-A card that typically contains a single large image, one or more buttons and text.
+A card that typically contains a single large image, one or more buttons, and text.
### Support for hero cards
-| Bots in Teams | Messaging Extensions | Connectors | Bot Framework |
+| Bots in Teams | Messaging extensions | Connectors | Bot Framework |
| | | | | | Γ£ö | Γ£ö | Γ£û | Γ£ö |
A card that typically contains a single large image, one or more buttons and tex
| | | | | title | Rich text | Title of the card. Maximum 2 lines. | | subtitle | Rich text | Subtitle of the card. Maximum 2 lines.|
-| text | Rich text | Text appears under the subtitle; see [Card formatting](~/task-modules-and-cards/cards/cards-format.md) for formatting options. |
-| images | Array of images | Image displayed at top of card. Aspect ratio 16:9. |
+| text | Rich text | Text appears under the subtitle. For formatting options, see [card formatting](~/task-modules-and-cards/cards/cards-format.md). |
+| images | Array of images | Image displayed at the top of the card. Aspect ratio 16:9. |
| buttons | Array of action objects | Set of actions applicable to the current card. Maximum 6. |
-| tap | Action object | This action will be activated when the user taps on the card itself. |
+| tap | Action object | Activated when the user taps on the card itself. |
### Example of a hero card
A card that typically contains a single large image, one or more buttons and tex
Bot Framework reference:
-* [Hero card Node](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=javascript#send-a-hero-card&preserve-view=true)
+* [Hero card Node.js](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=javascript#send-a-hero-card&preserve-view=true)
* [Hero card C#](/azure/bot-service/bot-builder-howto-add-media-attachments?view=azure-bot-service-4.0&tabs=csharp#send-a-hero-card&preserve-view=true) ## List card
The list card has been added by Teams to provide functions beyond what the list
| Property | Type | Description | | | | | | title | Rich text | Title of the card. Maximum 2 lines.|
-| items | Array of list items ||
+| items | Array of list items ||
| buttons | Array of action objects | Set of actions applicable to the current card. Maximum 6. | ### Example of a list card
The list card has been added by Teams to provide functions beyond what the list
## Office 365 connector card
-The Office 365 Connector card is supported in Teams, not in Bot Framework. This card provides a flexible layout with multiple sections, fields, images, and actions. This card encapsulates a connector card so that it can be used by bots. See the notes section for differences between connector cards and the O365 card.
+The Office 365 connector card is supported in Teams, not in Bot Framework. This card provides a flexible layout with multiple sections, fields, images, and actions. This card encapsulates a connector card so that it can be used by bots. For differences between connector cards and the O365 card, see [Notes on the Office 365 connector card](#notes-on-the-office-365-connector-card).
### Support for Office 365 connector cards
The Office 365 Connector card is supported in Teams, not in Bot Framework. This
| | | | | title | Rich text | Title of the card. Maximum 2 lines. | | summary | Rich text | Summary of the card. Maximum 2 lines. |
-| text | Rich text | Text appears under the subtitle; see [Card formatting](~/task-modules-and-cards/cards/cards-format.md) for formatting options. |
+| text | Rich text | Text appears under the subtitle. For formatting options, see [card formatting](~/task-modules-and-cards/cards/cards-format.md). |
| themeColor | HEX string | Color that overrides the accentColor provided from the application manifest. | ### Notes on the Office 365 connector card
One important difference between using connector cards from a connector and usin
* For a connector, the endpoint receives the card payload through HTTP POST. * For a bot, the `HttpPOST` action triggers an `invoke` activity that sends only the action ID and body to the bot.
-Each connector card can display a maximum of 10 sections, and each section can contain a maximum of 5 images and 5 actions.
+Each connector card can display a maximum of ten sections, and each section can contain a maximum of five images and five actions.
> [!NOTE]
-> Any additional sections, images, or actions in a message will not appear.
+> Any additional sections, images, or actions in a message do not appear.
-All text fields support Markdown and HTML. You can control which sections use Markdown or HTML by setting the `markdown` property in a message. By default, `markdown` is set to `true`; if you want to use HTML instead, set `markdown` to `false`.
+All text fields support markdown and HTML. You can control which sections use markdown or HTML by setting the `markdown` property in a message. By default, `markdown` is set to `true`. If you want to use HTML instead, set `markdown` to `false`.
If you specify the `themeColor` property, it overrides the `accentColor` property in the app manifest.
To specify the rendering style for `activityImage`, you can set `activityImageTy
| Value | Description | | | |
-| `avatar` | Default; `activityImage` will be cropped as a circle. |
-| `article` | `activityImage` will be displayed as a rectangle and retain its aspect ratio. |
+| `avatar` | Default; `activityImage` is cropped as a circle. |
+| `article` | `activityImage` is displayed as a rectangle and retains its aspect ratio. |
-For all other details about connector card properties, see the [Actionable message card reference](/outlook/actionable-messages/card-reference). The only connector card properties that Microsoft Teams does not currently support are as follows:
+For all other details about connector card properties, see [actionable message card reference](/outlook/actionable-messages/card-reference). The only connector card properties that Microsoft Teams does not currently support are as follows:
* `heroImage` * `hideOriginalBody`
-* `startGroup` (always treated as `true` in Teams)
+* `startGroup` always treated as `true` in Teams
* `originator` * `correlationId`
Teams supports receipt card. It is a card that enables a bot to provide a receip
Bot Framework reference:
-* [Receipt card Node](/javascript/api/botframework-schema/receiptcard?view=botbuilder-ts-latest&preserve-view=true)
+* [Receipt card Node.js](/javascript/api/botframework-schema/receiptcard?view=botbuilder-ts-latest&preserve-view=true)
* [Receipt card C#](/dotnet/api/microsoft.bot.schema.receiptcard?view=botbuilder-dotnet-stable&preserve-view=true) ## Signin card
-Signin card enables a bot to request a user to sign in. Supported in Teams in a slightly different form than is found in the Bot Framework. The signin card in Teams is similar to the signin card in the Bot Framework except that the signin card in Teams only supports two actions: `signin` and `openUrl`.
+Signin card enables a bot to request a user to sign in. It is supported in Teams in a slightly different form than is found in the Bot Framework. The signin card in Teams is similar to the signin card in the Bot Framework except that the signin card in Teams only supports two actions: `signin` and `openUrl`.
-The **signin action** can be used from any card in Teams, not just the signin card. For more details on authentication, see [Microsoft Teams authentication flow for bots](~/bots/how-to/authentication/auth-flow-bot.md).
+The signin action can be used from any card in Teams, not just the signin card. For more information on authentication, see [Microsoft Teams authentication flow for bots](~/bots/how-to/authentication/auth-flow-bot.md).
-### Support for Signin cards
+### Support for signin cards
| Bots in Teams | Messaging extensions | Connectors | Bot Framework | | | | | |
The **signin action** can be used from any card in Teams, not just the signin ca
Bot Framework reference:
-* [Signin card Node](/javascript/api/botframework-schema/signincard?view=botbuilder-ts-latest&preserve-view=true)
+* [Signin card Node.js](/javascript/api/botframework-schema/signincard?view=botbuilder-ts-latest&preserve-view=true)
* [Signin card C#](/dotnet/api/microsoft.bot.schema.signincard?view=botbuilder-dotnet-stable&preserve-view=true) ## Thumbnail card
A card that typically contains a single thumbnail image, one or more buttons, an
| | | | | title | Rich text | Title of the card. Maximum 2 lines.| | subtitle | Rich text | Subtitle of the card. Maximum 2 lines.|
-| text | Rich text | Text appears under the subtitle; see [Card formatting](~/task-modules-and-cards/cards/cards-format.md) for formatting options. |
-| images | Array of images | Image displayed at top of card. Aspect ratio 1:1 (square). |
+| text | Rich text | Text appears under the subtitle. For formatting options, see [card formatting](~/task-modules-and-cards/cards/cards-format.md). |
+| images | Array of images | Image displayed at the top of the card. Aspect ratio 1:1 square. |
| buttons | Array of action objects | Set of actions applicable to the current card. Maximum 6. |
-| tap | Action object | This action will be activated when the user taps on the card itself. |
+| tap | Action object | Activated when the user taps on the card itself. |
### Example of a thumbnail card
A card that typically contains a single thumbnail image, one or more buttons, an
Bot Framework reference:
-* [Thumbnail card Node](/javascript/api/botframework-schema/thumbnailcard?view=botbuilder-ts-latest&preserve-view=true)
+* [Thumbnail card Node.js](/javascript/api/botframework-schema/thumbnailcard?view=botbuilder-ts-latest&preserve-view=true)
* [Thumbnail card C#](/dotnet/api/microsoft.bot.schema.thumbnailcard?view=botbuilder-dotnet-stable&preserve-view=true) ## Card collections Teams supports Card collections.
-Card collections: `builder.AttachmentLayout.carousel` and `builder.AttachmentLayout.list`. These collections contain adaptive, hero, or thumbnail cards.
+Card collections include `builder.AttachmentLayout.carousel` and `builder.AttachmentLayout.list`. These collections contain adaptive, hero, or thumbnail cards.
## Carousel collection
The [carousel layout](/azure/bot-service/bot-builder-howto-add-media-attachments
| Γ£ö | Γ£û | Γ£û | Γ£ö | > [!NOTE]
-> A carousel can display a maximum of 10 cards per message.
+> A carousel can display a maximum of ten cards per message.
### Properties of a carousel card
-Properties of a Carousel card are same as those of the Hero and Thumbnail cards.
+Properties of a carousel card are same as those of the hero and thumbnail cards.
### Example of a carousel collection
Properties of a Carousel card are same as those of the Hero and Thumbnail cards.
### Syntax for carousel collections
-`builder.AttachmentLayoutTypes.Carousel`
+`builder.AttachmentLayoutTypes.Carousel` is the syntax for carousel collections.
## List collection
The list layout shows a vertically stacked list of cards, optionally with associ
Properties are the same as for the hero or thumbnail card.
-A list can display a maximum of 10 cards per message.
+A list can display a maximum of ten cards per message.
> [!NOTE] > Some combinations of list cards are not yet supported on iOS and Android. ### Syntax for list collections
-`builder.AttachmentLayout.list`
+`builder.AttachmentLayout.list` is the syntax for list collections.
## Cards not supported in Teams
-The following cards are implemented by the Bot Framework, but are NOT supported by Teams.
+The following cards are implemented by the Bot Framework, but are not supported by Teams:
* Animation cards * Audio cards
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/whats-new.md
The change log lists changes to the Microsoft Teams platform and this document s
| **Date** | **Notes** | **Changed topics** | | -- | | |
+|04/08/2021| App customization feature is now available in developer preview.|[Design teams app overview](concepts/design/design-teams-app-overview.md#app-customization), [App studio overview](concepts/build-and-test/app-studio-overview.md#connectors), and [Manifest schema](resources/schem) |
|03/18/2021|Notice: **Please update to version 4.10 or above of the Bot Framework SDK** as we've started with the deprecation process for `TeamsInfo.getMembers` and `TeamsInfo.GetMembersAsync`. | [Bot API Changes for Team/Chat Members](resources/team-chat-member-api-changes.md) | |03/05/2021|Notice: Tabs will no longer have margins surrounding their experiences. Tab developers should review and update their apps. | [Removing tab margins](resources/removing-tab-margins.md) | |03/05/2021 | Default install scope and group capability is in developer preview.| [Default install scope and group capability](concepts/deploy-and-publish/apps-upload.md#add-a-default-install-scope-and-group-capability) |