Updates from: 11/24/2022 03:04:55
Service Microsoft Docs article Related commit history on GitHub Change details
platform Bot Basics https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/bot-basics.md
Now that you've familiarized yourself with bot activity handlers, let us see how
> [!div class="nextstepaction"] > [Conversation basics](~/bots/how-to/conversations/conversation-basics.md)+
+## See also
+
+* [Build bots for Teams](what-are-bots.md)
+* [Teams JavaScript client SDK](../tabs/how-to/using-teams-client-sdk.md)
+* [App manifest schema for Teams](../resources/schem)
+* [API reference for the Bot Framework Connector service](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference)
+* [Get Teams specific context for your bot](how-to/get-teams-context.md)
platform Bot Features https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/bot-features.md
this.onMessage(async (context, next) => {
## See also
-* [Calls and meetings bots](~/bots/calls-and-meetings/calls-meetings-bots-overview.md)
-* [Bot conversations](~/bots/how-to/conversations/conversation-basics.md)
-* [Bot command menus](~/bots/how-to/create-a-bot-commands-menu.md)
+* [Build bots for Teams](what-are-bots.md)
* [Create custom triggers in Bot Framework Composer](/composer/how-to-create-custom-triggers)
-* [Authentication flow for bots in Microsoft Teams](~/bots/how-to/authentication/auth-flow-bot.md)
-* [Use task modules from bots](~/task-modules-and-cards/task-modules/task-modules-bots.md)
-* [Publish your bot to Azure](/azure/bot-service/bot-builder-deploy-az-cli)
* [API reference for the Bot Framework Connector service](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference)
+* [Publish your bot to Azure](/azure/bot-service/bot-builder-deploy-az-cli)
+* [Authentication flow for bots in Microsoft Teams](how-to/authentication/auth-flow-bot.md)
+* [Channel and group chat conversations with a bot](how-to/conversations/channel-and-group-conversations.md)
platform Call Notifications https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/call-notifications.md
For more information, see [validate inbound requests](https://github.com/microso
## See also
+* [Build bots for Teams](../what-are-bots.md)
+* [Calls and online meetings bots](calls-meetings-bots-overview.md)
+* [Work with the cloud communications API in Microsoft Graph](/graph/api/resources/communications-api-overview)
+* [Authentication flow for bots in Microsoft Teams](../how-to/authentication/auth-flow-bot.md)
* [Set up an auto attendant](/microsoftteams/create-a-phone-system-auto-attendant) * [Set up auto answer for Microsoft Teams Rooms on Android and Teams video phone devices](/microsoftteams/set-up-auto-answer-on-teams-android)
platform Calls Meetings Bots Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/calls-meetings-bots-overview.md
Title: Calls and online meetings bots
-description: In this module, learn how your Microsoft Teams apps can interact with users using voice and video using Microsoft Graph APIs for calls and online meetings and learn about real-time media streams
+description: Learn how your Microsoft Teams apps can interact with users using voice and video using Microsoft Graph APIs for calls and online meetings and learn about real-time media streams
ms.localizationpriority: medium
To use these Graph APIs in a Teams app, you create a bot and specify some additi
In addition, the Real-time Media Platform enables bots to interact with Teams calls and meetings using real-time voice, video, and screen sharing. A bot that participates in audio or video calls and online meetings is a regular Microsoft Teams bot with few extra features used to register the bot.
-The Teams app manifest with two additional settings `supportsCalling` and `supportsVideo`, Graph permissions for your bot's Microsoft App ID, and tenant admin consent enable you to register the bot. In registering a calls and meetings bot for Teams, the Webhook URL is mentioned, which is the webhook endpoint for all incoming calls to your bot. An application-hosted media bot requires the Microsoft.Graph.Communications.Calls.Media .NET library to access the audio and video media streams, and the bot must be deployed on a Windows Server machine or Windows Server guest Operating System (OS) in Azure. Bots on Teams supports only a specific set of media formats for audio and video content.
+The Teams app manifest with two more settings `supportsCalling` and `supportsVideo`, Graph permissions for your bot's Microsoft App ID, and tenant admin consent enable you to register the bot. In registering a calls and meetings bot for Teams, the Webhook URL is mentioned, which is the webhook endpoint for all incoming calls to your bot. An application-hosted media bot requires the Microsoft.Graph.Communications.Calls.Media .NET library to access the audio and video media streams, and the bot must be deployed on a Windows Server machine or Windows Server guest Operating System (OS) in Azure. Bots on Teams support only a specific set of media formats for audio and video content.
Now, you must understand some core concepts, terminology, and conventions. ## Terminologies
-The following core concepts, terminology, and conventions guide you through the use of calls and online meetings bots:
+The following core concepts, terminology, and conventions guide you by using calls and online meetings bots:
* Audio or video calls * Call types
Calls are either peer-to-peer between a person and your bot, or multiparty betwe
Following are the different call types and permissions required for the call:
-* A user can initiate a peer-to-peer call with your bot or invite your bot into an existing multiparty call. The multiparty call is not enabled yet in the Teams user interface.
+* A user can initiate a peer-to-peer call with your bot or invite your bot into an existing multiparty call. The multiparty call isn't enabled yet in the Teams user interface.
> [!NOTE] > User initiated calls to a bot are currently not supported on Teams mobile platform.
-* Graph permissions are not necessary for a user to initiate a peer-to-peer call with your bot. Additional permissions are needed for your bot to participate in a multiparty call, or for your bot to initiate a peer-to-peer call with a user.
-* A call can start as peer-to-peer and eventually become a multiparty call. Your bot can initiate multiparty calls by inviting others, provided your bot has the proper permissions. If your bot does not have permissions to participate in group calls and if a participant adds another participant to the call, your bot is dropped from the call.
+* Graph permissions aren't necessary for a user to initiate a peer-to-peer call with your bot. Additional permissions are needed for your bot to participate in a multiparty call, or for your bot to initiate a peer-to-peer call with a user.
+* A call can start as peer-to-peer and eventually become a multiparty call. Your bot can initiate multiparty calls by inviting others, provided your bot has the proper permissions. If your bot doesn't have permissions to participate in group calls and if a participant adds another participant to the call, your bot is dropped from the call.
### Signals
There are two types of signals, incoming call and in-call. Following are the dif
### Calls and online meetings
-From a Teams user's perspective, there are two kinds of online meetings, ad hoc and scheduled. From a bot's perspective, both online meetings are the same. To a bot, an online meeting is a multiparty call between a set of participants and includes meeting coordinates. Meeting coordinates are the metadata for the meeting including `botId`, `chatId` associated with the meeting, `joinUrl`, `startTime` or `endTime`, and so on.
+From a Teams user's perspective, there are two kinds of online meetings, unplanned and scheduled. From a bot's perspective, both online meetings are the same. To a bot, an online meeting is a multiparty call between a set of participants and includes meeting coordinates. Meeting coordinates are the metadata for the meeting including `botId`, `chatId` associated with the meeting, `joinUrl`, `startTime` or `endTime`, and so on.
### Real-time media
-When a bot is participating in a call or online meeting, it must deal with audio and video streams. When users talk on a call, show themselves on a webcam, or present their screens in a meeting, to a bot it is shown as audio and video streams. If a bot wants to say something as simple as, **press 0 to reach the operator** in an interactive voice response (IVR) scenario, it requires playing a .WAV file. Collectively, this is referred to as media or real-time media.
+When a bot is participating in a call or online meeting, it must deal with audio and video streams. When users talk on a call, show themselves on a webcam, or present their screens in a meeting, to a bot it's shown as audio and video streams. If a bot wants to say something as simple as, **press 0 to reach the operator** in an interactive voice response (IVR) scenario, it requires playing a .WAV file. Collectively, this is referred to as media or real-time media.
-Real-time media refers to scenarios where media must be processed in real-time, as opposed to playback of previously recorded audio or video. Dealing with media streams, particularly real-time media streams, is extremely complex. Microsoft has created the Real-time Media Platform to handle these scenarios and to offload as much of the traditional heavy lifting of real-time media processing as possible. When the bot answers an incoming call or joins a new or existing call, it needs to tell the Real-time Media Platform how media is handled. If you are building an IVR application, you can offload the expensive audio processing to Microsoft. Alternately, if your bot requires direct access to media streams, that scenario is also supported. There are two types of media processing:
+Real-time media refers to scenarios where media must be processed in real-time, as opposed to playback of previously recorded audio or video. Dealing with media streams, real-time media streams, is complex. Microsoft has created the Real-time Media Platform to handle these scenarios and to offload as much of the traditional heavy lifting of real-time media processing as possible. When the bot answers an incoming call or joins a new or existing call, it needs to tell the Real-time Media Platform how media is handled. If you're building an IVR application, you can offload the expensive audio processing to Microsoft. Alternately, if your bot requires direct access to media streams, that scenario is also supported. There are two types of media processing:
-* **Service-hosted media**: Bots focus on managing application workflow, such as routing calls and offload audio processing to the Microsoft Real-time Media Platform. With service-hosted media, you have several options to implement and host your bot. A service-hosted media bot can be implemented as a stateless service as it does not process media locally. Service-hosted media bots can use the following APIs:
+* **Service-hosted media**: Bots focus on managing application workflow, such as routing calls and offload audio processing to the Microsoft Real-time Media Platform. With service-hosted media, you have several options to implement and host your bot. A service-hosted media bot can be implemented as a stateless service as it doesn't process media locally. Service-hosted media bots can use the following APIs:
* `PlayPrompt` for playing an audio clip. * `Record` for recording audio clips.
Real-time media refers to scenarios where media must be processed in real-time,
## See also
-* [Graph API reference](/graph/api/resources/communications-api-overview?view=graph-rest-beta&preserve-view=true)
-* [Sample apps](https://github.com/microsoftgraph/microsoft-graph-comms-samples)
-* [Registering a bot that supports calls and online meetings](./registering-calling-bot.md)
-* [Graph permissions for calls and online meetings bots](./registering-calling-bot.md#add-graph-permissions)
-* [How to develop calling and online meeting bots on your computer](./debugging-local-testing-calling-meeting-bots.md)
+* [Build bots for Teams](../what-are-bots.md)
+* [Work with the cloud communications API in Microsoft Graph](/graph/api/resources/communications-api-overview)
+* [Add Graph permissions](registering-calling-bot.md#add-graph-permissions)
+* [Develop calling and online meeting bots on your local PC](debugging-local-testing-calling-meeting-bots.md)
+* [Enable an event as online meeting in Outlook calendar](/graph/outlook-calendar-online-meetings?tabs=http)
* [Requirements and considerations for application-hosted media bots](./requirements-considerations-application-hosted-media-bots.md)
-* [Technical information on handling incoming call notifications](./call-notifications.md)
+* [App manifest schema for Teams](../../resources/schem)
+* [Teams recording policy](/MicrosoftTeams/teams-recording-policy)
* [Set up an auto attendant](/microsoftteams/create-a-phone-system-auto-attendant) * [Set up auto answer for Microsoft Teams Rooms on Android and Teams video phone devices](/microsoftteams/set-up-auto-answer-on-teams-android)
-* [Teams recording policy](/MicrosoftTeams/teams-recording-policy)
-* [Work with communications API in Microsoft Graph](/graph/api/resources/communications-api-overview?view=graph-rest-beta&preserve-view=true)
-* [Enable an event as online meeting in Outlook calendar](/graph/outlook-calendar-online-meetings?tabs=http)
platform Real Time Media Concepts https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/real-time-media-concepts.md
Application-hosted media bots require .NET or C# and Windows Server. For more in
## Next step > [!div class="nextstepaction"]
-> [Register a calling bot](~/bots/calls-and-meetings/registering-calling-bot.md)
+> [Register calls and meetings bot for Microsoft Teams](registering-calling-bot.md)
## See also
-[Supported media formats for bots](~/resources/media-formats.md)
+* [Build bots for Teams](../what-are-bots.md)
+* [Calls and online meetings bots](calls-meetings-bots-overview.md)
+* [Supported media formats for bots](~/resources/media-formats.md)
platform Registering Calling Bot https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/registering-calling-bot.md
Follow the [step-by-step guide](../../sbs-calling-and-meeting.yml) to set up Tea
## See also
-* [Incoming call notifications](~/bots/calls-and-meetings/call-notifications.md)
+* [Build bots for Teams](../what-are-bots.md)
+* [Calls and online meetings bots](calls-meetings-bots-overview.md)
* [Develop calling and online meeting bots on your local PC](~/bots/calls-and-meetings/debugging-local-testing-calling-meeting-bots.md) * [View app permission and grant admin consent](/MicrosoftTeams/app-permissions-admin-center)
-* [Working with the cloud communications API in Microsoft Graph](/graph/api/resources/communications-api-overview)
+* [Work with the cloud communications API in Microsoft Graph](/graph/api/resources/communications-api-overview)
+* [Webhooks and connectors](../../webhooks-and-connectors/what-are-webhooks-and-connectors.md)
platform Requirements Considerations Application Hosted Media Bots https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/requirements-considerations-application-hosted-media-bots.md
Application-hosted media bots samples are as follows:
## Next step > [!div class="nextstepaction"]
-> [Supported media formats](~/resources/media-formats.md)
+> [Supported media formats for bots](../../resources/media-formats.md)
## See also * [Graph Calling SDK Documentation](https://microsoftgraph.github.io/microsoft-graph-comms-samples/docs/)
+* [Sample applications](https://github.com/microsoftgraph/microsoft-graph-comms-samples/tree/master/Samples/V1.0Samples/LocalMediaSamples)
* The bots require more compute and network bandwidth capacity than messaging bots and incur higher operational costs. A real-time media bot developer must carefully measure the bot's scalability, and ensure the bot doesn't accept more simultaneous calls than it can manage. A video-enabled bot can sustain only one or two concurrent media sessions per CPU core if using the raw RGB24 or NV12 video formats. * The Real-time Media Platform doesn't currently take advantage of any Graphics Processing Units (GPU) available on the VM to off-load H.264 video encoding or decoding. Instead, video encode and decode are done in software on the CPU. If a GPU is available, the bot takes advantage of it for its own graphics rendering, for example, if the bot is using a 3D graphics engine. * The VM instance hosting the real-time media bot must have at least 2 CPU cores. For Azure, a Dv2-series virtual machine is recommended. For other Azure VM types, a system with 4 virtual CPUs (vCPU) is the minimum size required. For more information about Azure VM types, see [Azure documentation](/azure/virtual-machines/windows/sizes-general).-
-The next section provides samples that illustrate different local media scenarios.
-
-## Samples and additional resources
-
-* [Sample applications](https://github.com/microsoftgraph/microsoft-graph-comms-samples/tree/master/Samples/V1.0Samples/LocalMediaSamples)
-* [Graph calling SDK documentation](https://microsoftgraph.github.io/microsoft-graph-comms-samples/docs/)
platform Bots Filesv4 https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/bots-filesv4.md
Follow the [step-by-step guide](../../sbs-file-handling-in-bot.yml) to upload fi
## See also
-[Protected APIs in Microsoft Teams](/graph/teams-protected-apis)
+* [Build bots for Teams](../what-are-bots.md)
+* [Authentication flow for bots in Microsoft Teams](authentication/auth-flow-bot.md)
+* [Have a personal (one-on-one) conversation with a Microsoft Teams bot](../../resources/bot-v3/bot-conversations/bots-conv-personal.md)
+* [Get Teams specific context for your bot](get-teams-context.md)
+* [App manifest schema for Teams](../../resources/schem)
+* [Protected APIs in Microsoft Teams](/graph/teams-protected-apis)
platform Channel And Group Conversations https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/channel-and-group-conversations.md
Follow the [step-by-step guide](../../../sbs-teams-conversation-bot.yml), create
## Next step > [!div class="nextstepaction"]
-> [Subscribe to conversation events](~/bots/how-to/conversations/subscribe-to-conversation-events.md)
+> [Conversation events in your Teams bot](subscribe-to-conversation-events.md)
## See also
-* [Get Teams context](~/bots/how-to/get-teams-context.md)
+* [Build bots for Teams](../../what-are-bots.md)
+* [Authenticate users in Microsoft Teams](../../../concepts/authentication/authentication.md)
+* [Task modules](../../../task-modules-and-cards/what-are-task-modules.md)
+* [Upload file in Teams using bot](../../../sbs-file-handling-in-bot.yml)
+* [Get Teams specific context for your bot](../get-teams-context.md)
* [Create private channel on behalf of user](/graph/api/channel-post#example-2-create-private-channel-on-behalf-of-user) * [Connect a bot to Web Chat channel](/azure/bot-service/bot-service-channel-connect-webchat)
platform Channel Messages With Rsc https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/channel-messages-with-rsc.md
this.onMessage(async (context, next) => {
## See also
-* [Bot conversations](/microsoftteams/platform/bots/how-to/conversations/conversation-basics)
+* [Build bots for Teams](../../what-are-bots.md)
* [Resource-specific consent](/microsoftteams/resource-specific-consent)
-* [Test resource-specific consent](/microsoftteams/platform/graph-api/rsc/test-resource-specific-consent)
+* [Test resource-specific consent](../../../graph-api/rsc/test-resource-specific-consent.md#prerequisites)
* [Upload custom app in Teams](~/concepts/deploy-and-publish/apps-upload.md)
+* [Authorization permissions](../../../resources/schem#authorization)
* [List replies to messages in a channel](/graph/api/chatmessage-list-replies?view=graph-rest-1.0&tabs=http&preserve-view=true)
platform Conversation Basics https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/conversation-basics.md
You can add single sign-on authentication to your conversation bot using the fol
> [!div class="nextstepaction"] > [Messages in bot conversations](~/bots/how-to/conversations/conversation-messages.md)+
+## See also
+
+* [Build bots for Teams](../../what-are-bots.md)
+* [Bot activity handlers](../../bot-basics.md)
+* [Update and delete messages sent from bot](../update-and-delete-bot-messages.md)
+* [Adaptive Cards](../../../task-modules-and-cards/cards/people-picker.md)
+* [API reference for the Bot Framework Connector service](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference)
platform Conversation Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/conversation-messages.md
The general retry guidance for each status code is listed in the following table
## Next step > [!div class="nextstepaction"]
-> [Bot command menus](~/bots/how-to/create-a-bot-commands-menu.md)
+> [Create a commands menu](../create-a-bot-commands-menu.md)
## See also
-* [Send proactive messages](~/bots/how-to/conversations/send-proactive-messages.md)
+* [Build bots for Teams](../../what-are-bots.md)
+* [Bot activity handlers](../../bot-basics.md)
+* [Send proactive messages](send-proactive-messages.md)
* [Subscribe to conversation events](~/bots/how-to/conversations/subscribe-to-conversation-events.md) * [Send and receive files through the bot](~/bots/how-to/bots-filesv4.md)
-* [Send tenant ID and conversation ID to the request headers of the bot](~/bots/how-to/conversations/request-headers-of-the-bot.md)
+* [Send tenant ID and conversation ID to the request headers of the bot](request-headers-of-the-bot.md)
* [Localize your app](../../../concepts/build-and-test/apps-localization.md)
platform Request Headers Of The Bot https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/request-headers-of-the-bot.md
ms.localizationpriority: medium
# Request headers of the bot
-The current outgoing requests to the bot don't contain in the header or URL any information that helps bots route the traffic without unpacking the entire payload. The activities are sent to the bot through a URL similar to https://<your_domain>/api/messages. Requests are received to show the conversation ID and tenant ID in the headers.
+The current outgoing requests to the bot don't contain in the header or URL any information that helps bots route the traffic without unpacking the entire payload. The activities are sent to the bot through a URL similar to `https://<your_domain>/api/messages`. Requests are received to show the conversation ID and tenant ID in the headers.
## Request header fields
Two non-standard request header fields are added to all the requests sent to bot
If the tenant or conversation ID isn't present in the activity or wasn't validated on the service side, the value is empty. ![Request header fields](~/assets/images/bots/requestheaderfields.png)+
+## See also
+
+* [Build bots for Teams](../../what-are-bots.md)
+* [Conversation basics](conversation-basics.md)
+* [Bot activity handlers](../../bot-basics.md)
+* [Messages in bot conversations](conversation-messages.md)
platform Send Proactive Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/send-proactive-messages.md
The following table provides a simple code sample that incorporates basic conver
| Start new thread in a channel | Demonstrates creating a new thread in a channel. | [View](https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/csharp_dotnetcore/58.teams-start-new-thread-in-channel) | [View](https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/58.teams-start-new-thread-in-channel) | [View](https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/python/58.teams-start-thread-in-channel) | | Proactive installation of app and sending proactive notifications | This sample shows how you can use proactive installation of app for users and send proactive notifications by calling Microsoft Graph APIs. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-proactive-installation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-proactive-installation/nodejs) | NA | | Proactive Messaging | This is a sample that shows how to save user's conversation reference information to send proactive reminder message using Bots. | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-proactive-messaging-teamsfx) | NA |
+| Teams proactive messaging samples | The samples help with building proactive messaging apps in Microsoft Teams getting the conversation coordinates, and sending messages reliably. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-proactive-messaging/csharp) | NA | NA |
> [!div class="nextstepaction"] > [More code sample of proactive messaging](/samples/officedev/msteams-samples-proactive-messaging/msteams-samples-proactive-messaging/)
The following table provides a simple code sample that incorporates basic conver
## See also
-* [**Teams proactive messaging code samples**](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-proactive-messaging/csharp)
-* [Channel and group chat conversations with a bot](~/bots/how-to/conversations/channel-and-group-conversations.md)
-* [Respond to the task module submit action](~/messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md)
+* [Build bots for Teams](../../what-are-bots.md)
+* [Channel and group chat conversations with a bot](channel-and-group-conversations.md)
+* [Respond to the task module submit action](../../../messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md)
* [Send proactive notifications to users](/azure/bot-service/bot-builder-howto-proactive-message)
-* [Build your first bot app using JavaScript](../../../sbs-gs-bot.yml)
-* [Build notification bot with JavaScript to send a proactive message](../../../sbs-gs-notificationbot.yml)
+* [Messages in bot conversations](conversation-messages.md)
+* [Build notification bot to send proactive messages](../../../sbs-gs-notificationbot.yml)
* [TurnContext](/javascript/api/botbuilder-core/turncontext?view=botbuilder-ts-latest"&preserve-view=true")
platform Subscribe To Conversation Events https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/subscribe-to-conversation-events.md
async def on_reactions_removed(
The bot receives an `installationUpdate` event when you install a bot to a conversation thread. Uninstallation of the bot from the thread also triggers the event. On installing a bot, the **action** field in the event is set to *add*, and when the bot is uninstalled the **action** field is set to *remove*. > [!NOTE]
-> When you upgrade an application, and then add or remove a bot, the action also triggers the `installationUpdate` event. The **action** field is set to *add-upgrade* if you add a bot or *remove-upgrade* if you remove a bot.
+> When you upgrade an application, the bot receives the `installationUpdate` event only to add or remove a bot from the manifest. For all other cases, the `installationUpdate` event isn't triggered. The **action** field is set to *add-upgrade* if you add a bot or *remove-upgrade* if you remove a bot.
### Install update event
It's important to know that new events can be added anytime in the future and yo
> [!div class="nextstepaction"] > [Send proactive messages](~/bots/how-to/conversations/send-proactive-messages.md)+
+## See also
+
+* [Build bots for Teams](../../what-are-bots.md)
+* [API reference for the Bot Framework Connector service](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference)
+* [Channel and group chat conversations with a bot](channel-and-group-conversations.md)
+* [Receive all conversation messages with RSC](channel-messages-with-rsc.md)
+* [Create Teams conversation bot](../../../sbs-teams-conversation-bot.yml)
platform Create A Bot Commands Menu https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/create-a-bot-commands-menu.md
Following are the command menu best practices:
## Next step > [!div class="nextstepaction"]
-> [Channel and group conversations](~/bots/how-to/conversations/channel-and-group-conversations.md)
+> [Channel and group chat conversations with a bot](conversations/channel-and-group-conversations.md)
+
+## See also
+
+* [Build bots for Teams](../what-are-bots.md)
+* [App manifest schema for Teams](../../resources/schem)
+* [Messages in bot conversations](conversations/conversation-messages.md)
platform Format Your Bot Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/format-your-bot-messages.md
For card support, see [card formatting](~/task-modules-and-cards/cards/cards-for
## Next step > [!div class="nextstepaction"]
-> [Update and delete bot messages](~/bots/how-to/update-and-delete-bot-messages.md)
+> [Update and delete messages sent from bot](update-and-delete-bot-messages.md)
+
+## See also
+
+* [Build bots for Teams](../what-are-bots.md)
+* [Designing your Microsoft Teams bot](../design/bots.md)
+* [Adaptive Cards](../../task-modules-and-cards/what-are-cards.md#adaptive-cards)
platform Get Teams Context https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/get-teams-context.md
Response body
## Next step > [!div class="nextstepaction"]
-> [Send and receive files through the bot](~/bots/how-to/bots-filesv4.md)
+> [Send and receive files using bot](bots-filesv4.md)
## See also
+* [Build bots for Teams](../what-are-bots.md)
+* [Task modules](../../task-modules-and-cards/what-are-task-modules.md)
+* [Authenticate users in Microsoft Teams](../../concepts/authentication/authentication.md)
+* [Bot activity handlers](../bot-basics.md)
* [Localize your app](../../concepts/build-and-test/apps-localization.md) * [Get the profile photo of a user, a group, a team, or an Outlook contact](/graph/api/profilephoto-get)
platform Rate Limit https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/rate-limit.md
The following table provides the per thread limit for all bots:
## Next step > [!div class="nextstepaction"]
-> [Calls and meetings bots](~/bots/calls-and-meetings/calls-meetings-bots-overview.md)
+> [Calls and online meetings bots](../calls-and-meetings/calls-meetings-bots-overview.md)
## See also
-[Manage a long-running operation](/azure/bot-service/bot-builder-howto-long-operations-guidance?view=azure-bot-service-4.0&preserve-view=true)
+* [Build bots for Teams](../what-are-bots.md)
+* [Manage a long-running operation](/azure/bot-service/bot-builder-howto-long-operations-guidance?view=azure-bot-service-4.0&preserve-view=true)
platform Update And Delete Bot Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/update-and-delete-bot-messages.md
ms.localizationpriority: medium
-# Update and delete messages sent from bot
+# Update and delete messages sent from bot
[!INCLUDE [pre-release-label](~/includes/v4-to-v3-pointer-bots.md)]
The following code sample demonstrates basics of conversations:
## Next step > [!div class="nextstepaction"]
-> [Get Teams context](~/bots/how-to/get-teams-context.md)
+> [Get Teams specific context for your bot](get-teams-context.md)
+
+## See also
+
+* [Build bots for Teams](../what-are-bots.md)
+* [Conversation basics](conversations/conversation-basics.md)
+* [Cards](../../task-modules-and-cards/what-are-cards.md)
platform What Are Bots https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/what-are-bots.md
You can add single sign-on authentication to your conversation bot using the fol
## See also
-* [Create a bot for Teams](../resources/bot-v3/bots-create.md)
* [How Microsoft Teams bots work](/azure/bot-service/bot-builder-basics-teams)
-* [Register calls and meetings bot for Microsoft Teams](~/bots/calls-and-meetings/registering-calling-bot.md)
-* [Add authentication to your Teams bot](~/bots/how-to/authentication/add-authentication.md)
-* [Bot activity handlers](~/bots/bot-basics.md)
-* [Conversation events in your Teams bot](~/bots/how-to/conversations/subscribe-to-conversation-events.md)
+* [Designing your Microsoft Teams bot](design/bots.md)
+* [Create a bot for Teams](../resources/bot-v3/bots-create.md)
+* [Test and debug your Microsoft Teams bot](../resources/bot-v3/bots-test.md)
* [Build your first bot app using JavaScript](../sbs-gs-bot.yml)
-* [Build notification bot with JavaScript](../sbs-gs-notificationbot.yml)
+* [Add authentication to your Teams bot](how-to/authentication/add-authentication.md)
+* [Use task modules from bots](../task-modules-and-cards/task-modules/task-modules-bots.md)
+* [Create Incoming Webhooks](../webhooks-and-connectors/how-to/add-incoming-webhook.md)
platform App Fundamentals Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/app-fundamentals-overview.md
Building an awesome Teams app is all about finding the right combination of features to meet your user's needs. The design, features, and capabilities of an app stem from this purpose.
-At its heart, Teams is a collaboration platform. It's also a social platform, is natively cross-platform, sits at the heart of Office 365, and offers a personal canvas for you to create apps.
+At its heart, Teams is a collaboration platform. It's also a social platform and is natively cross-platform that sits at the heart of Office 365 and offers personal canvas for you to create apps.
In this section, learn how to:
In this section, learn how to:
Teams as a platform offers you toolkits, libraries, and apps at every stage of app development. Let's break it down to app building lifecycle: * [Before you build](#before-you-build) * [During build](#during-build)
Understanding the user and their concern are the first indicators of how a Teams
### During build
-* **Create and Build app project**: With Teams, you can choose the build environment that best suits your app requirement. Use Teams Toolkit or other SDKs, such as C#, Blazor, Node.js, and more to get started.
+* **Create and build app project**: With Teams, you can choose the build environment that best suits your app requirement. Use Teams Toolkit or other SDKs, such as C#, Blazor, Node.js, and more to get started.
* **Design your app UI**: Use Teams UI Toolkit and UI Library to design your app's layout. * **Use Teams as a platform**: Teams platform helps you build a single- or multi-capability app. Your Teams app is supported by the integrated products and services that strengthen the app experience.
- :::image type="content" source="../assets/images/overview/teams-solution.png" alt-text="Conceptual representation of the Teams solution.":::
+ :::image type="content" source="../assets/images/overview/teams-solution.png" alt-text="Diagram that shows the conceptual representation of the Teams solution.":::
Your apps appear on Teams as Tabs, Bots, Messaging Extensions, Connectors and Webhooks, or as a multi-capability app. These capabilities are powered at the backend by Azure, Microsoft Graph, SharePoint, and Power apps that help automate tasks and processes.
The following table includes Teams features and availability for GCC, GCC-High,
| Features | GCC | GCC-High | DOD | |-||||
-| Teams owned apps as in internally developed apps | ✔️ App is enabled if it has GCC | ✔️ App is enabled if it has GCC-High | ✔️ App is enabled if it has DOD |
-| Microsoft apps | ✔️ Microsoft apps compliant with GCC | ✔️ Microsoft apps compliant with GCC-High | ✔️ Microsoft apps compliant with DOD |
+| Teams owned apps as in internally developed apps | ✔️ App is enabled if it has GCC. | ✔️ App is enabled if it has GCC-High. | ✔️ App is enabled if it has DOD. |
+| Microsoft apps | ✔️ Microsoft apps compliant with GCC. | ✔️ Microsoft apps compliant with GCC-High. | ✔️ Microsoft apps compliant with DOD. |
| 3P or third-party apps | ✔️ Third-party apps are available. Disabled by default and tenant admin use their own discretion to enable it. | ❌ | ❌ |
-| Bots | ✔️ | ❌ | ❌ |
+| Bots | ✔️ | ✔️ | ❌ |
| Custom or Lob tab apps | ✔️ | ✔️ | ✔️ |
-| Sideloading apps | ✔️ | ❌ | ❌ |
-| Custom or Lob bots | ✔️ | ❌ | ❌ |
-| Custom messaging extensions | ❌ | ❌ | ❌ |
-| Custom connectors | ❌ | ❌ | ❌ |
+| Sideloading apps | ✔️ | ✔️ | ❌ |
+| Custom or Lob bots | ✔️ | ✔️ | ❌ |
+| Custom message extensions | ✔️ | ✔️ | ❌ |
+| Custom connectors | ✔️ | ❌ | ❌ |
-**Compliance UI**: By enabling third-party communications, customers accept that such communication is being processed through the third party and not Microsoft. The customer is solely responsible for mitigating risks associated with connecting with third party bots in their services. Microsoft doesn't endorse and makes no warranties, express, or implied concerning the security of third parties the customer allows to connect with their service. Enabling bots will extend your system boundary beyond this tenant based on the bot you choose to leverage. It is your responsibility to ensure that this meets your compliance requirements including FedRAMP, DFARS, ITAR, etc. It is your responsibility to evaluate the risk and compliance of any endpoint and URL that you connect to.
+**Compliance UI**: By enabling third-party communications, customers accept that such communication is being processed through the third party and not Microsoft. The customer is solely responsible for mitigating risks associated with connecting with third party bots in their services. Microsoft doesn't endorse and makes no warranties, express, or implied concerning the security of third parties the customer allows to connect with their service. Enabling bots will extend your system boundary beyond this tenant based on the bot you choose to leverage. It is your responsibility to ensure that this meets your compliance requirements including FedRAMP, DFARS, ITAR, and so on. It is your responsibility to evaluate the risk and compliance of any endpoint and URL that you connect to.
The following list helps to identify the availability of GCC, GCC-High, and DOD for the features:
platform Include Saas Offer https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/include-saas-offer.md
For complete instructions and API reference, see the [SaaS Fulfillment APIs docu
* When users are assigned a subscription plan, notify them through a Teams bot or email. In the messaging, include information on how to add the app to Teams and get started. * Support the idea of multiple admins. In other words, multiple users in the same org can purchase and manage their own subscriptions.
-## Manage license for third party apps in Teams
-
-Teams allows independent software vendors (ISVs) admins or users to manage SaaS licenses for third party apps purchased from Teams storefront. ISV admins or users can easily assign, unassign, use, and track SaaS licenses.
-
-To enable license management for an app in Teams, follow the steps:
-
-1. [Create an offer in Partner Center](#create-an-offer-in-partner-center)
-1. [Update your Teams app](#update-your-teams-app)
-1. [Post purchase](#post-purchase)
-1. [Integrate with Graph Usage Right API](#integrate-with-graph-usage-right-api)
-
-### Create an offer in Partner Center
-
-1. Sign in to [Partner Center](https://partner.microsoft.com/) and select **Partner Center**.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/partner-center-home-page.png" alt-text="The screenshots shows how to login to the Partner Center account.":::
-
-1. In the **Home** page, select **Marketplace offers** tab to define commercial marketplace offers.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/home-page.png" alt-text="The screenshots shows the home page and Marketplace offer tab in the Partner Center.":::
-
-1. Select **Overview** from the left pane.
-
-1. Select **New Offer** > **Software as a Service**.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/commercial-marketplace.png" alt-text="The screenshots shows the marketplace offer page where you can select new offer.":::
-
-1. Enter **Offer ID** and **Offer alias** and select **Create**.
-
- > [!NOTE]
- > If you're creating an offer for testing purpose, add the text **-ISVPILOT** to the end of your offer alias. This indicates the certification team that the offer is for testing purposes. Microsoft delete offers with **-ISVPILOT** periodically. So, don't use this tag for reasons other than testing the license management capability.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/saas.png" alt-text="The screenshots shows how to enter Offer ID and Offer alias in the Partner Center.":::
-
-1. In Offer setup page, under setup details, select the checkbox **Yes, I would like Microsoft to manage customer licenses on my behalf**.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/saas-isvpilot.png" alt-text="The screenshots shows the offer setup page to setup license to manage for your app within Teams.":::
-
- > [!NOTE]
- >
- > * This is a one-time setting and you can't change it once your offer is published. This allows the customer to manage licenses for your app within Teams.
- > * The App manifest supports only one offer for an app. Choose an appropriate license management solution for all the plans available in your offer and you can't change this option after the offer is pushed to live.
-
-1. Select **Save draft**.
-
-1. Select **Plan overview** from the left pane, and then select **Create new plan**.
-
- > [!NOTE]
- > You need to add at least one plan.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/plan-overview.png" alt-text="The screenshots shows plan overview to create a new plan for your apps in the Partner Center.":::
-
-1. Enter Plan ID and Plan name, and then select **Create**.
-
-1. Enter the **Plan name** and **Plan description**.
-
- > [!NOTE]
- > The plan information displays on Teams marketplace and [Appsource](https://appsource.microsoft.com/) under offer listing (plans section).
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/plan-listing.png" alt-text="The screenshots shows plan page to add plan name and plan description for your app.":::
-
-1. Select **Save draft**.
-
-1. Select **Pricing and availability** from the left pane.
-
-1. Add pricing and availability details.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/pricing-availability.png" alt-text="The screenshots shows pricing and availability page to add SaaS offer for your app.":::
-
-1. Select **Save draft**.
-
-1. Select **Plan overview** at the top of the page to go to the listing page that shows all the plans you've created for this offer.
-
- :::image type="content" source="~/assets/images/first-party-license-mgt/list-of-plans-created.png" alt-text="The screenshots shows plan listing page with service ID, pricing model, availability, status and action.":::
-
-1. Copy the service ID of the plan you created to integrate with Microsoft Graph Usage Rights API.
-
-### Update your Teams app
-
-Update your Teams app to map to the paid functionality and [Map your Teams app](https://aka.ms/TMTG) to your offer and publish.
-
-### Post purchase
-
-1. After activation, customer is redirected from landing page to Teams License Management.
-
-1. Upon successful completion of subscription purchase, the customer is redirected to the app landing page for subscription activation. This is the existing experience for user purchasing [monetized apps in Teams](https://aka.ms/TMTG).
-
-1. After the customer activates the subscription purchase on landing page, customer is redirected to subscriptions page in Teams via a [redirect URL](https://teams.microsoft.com/_#/subscriptionManagement) link or button that the customer selects on the publisher landing page.
-
-### Integrate with Graph Usage Right API
-
-Integrate with Graph Usage Right API to manage user permissions at the time of app launch by a customer who has a purchase license. You're required to determine the userΓÇÖs permissions for the app with a Graph call to the Usage Rights API.
-
-You can call Graph APIs to determine if the currently logged in user with a valid subscription of the plan has access to your app. To call Graph UsageRight API to check user permissions, follow the steps:
-
-1. Get user OBO token: [Get access on behalf of a user - Microsoft Graph | Microsoft Docs](/graph/auth-v2-user).
-
-1. Call Graph to get userΓÇÖs object ID: [Use the Microsoft Graph API - Microsoft Graph | Microsoft Docs](/graph/use-the-api).
-
-1. Call UsageRights API to determine the user has License to the plan [List user usageRights - Microsoft Graph beta | Microsoft Docs](/graph/api/user-list-usagerights?view=graph-rest-beta&tabs=http&preserve-view=true).
-
- > [!NOTE]
- > You need to have minimum `User.Read` permissions to call UsageRights.
- > The UsageRights API is currently in beta version. After the version is updated to V1, ISV users should upgrade from beta to V1 version.
-
-### Check license usage in Partner Center analytics
-
-1. Sign in to [Partner Center](https://partner.microsoft.com/).
-1. In the left pane, go to **Commercial Marketplace > Analyze > Licensing**.
-1. Select **Plan and Tenant** in the reporting widget to see the month wise usage.
- ## Build a landing page for subscription management When someone finishes buying a subscription plan for your app in the Teams store, the commercial marketplace will direct them to your landing page where they can manage the subscription (such as assign a license to a specific user in their org).
-Select **No, I would prefer to manage customer licenses myself** in such cases.
- For complete instructions, see [build the landing page for your SaaS offer](/azure/marketplace/azure-ad-transactable-saas-landing-page).
-When someone finishes buying a subscription plan for your app and wants to stay in the Teams, without directing them to your landing page, select **Yes, I would like Microsoft to manage customer licenses on my behalf**.
-
-For more information, see [manage license for third party apps in Teams](#manage-license-for-third-party-apps-in-teams).
- ### Best practices for landing pages Consider the following approaches when building a landing page for the Teams app youΓÇÖre monetizing. See an example landing page in the [end-user purchasing experience](#end-user-purchasing-experience).
platform Monetize Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/monetize-overview.md
With a transactable Software as a Service (SaaS) offer, you can test the end-to-
:::column-end::: :::row-end:::
-**Manage license for third party apps in Teams**
-
-Using Microsoft license management, independent software vendors (ISVs) can manage SaaS license purchased in Teams to easily assign, unassign, use, and track SaaS licenses. For more information, see [Manage license for third party apps in Teams](include-saas-offer.md#manage-license-for-third-party-apps-in-teams).
- ## Next step [Include a SaaS offer with your Microsoft Teams app](~/concepts/deploy-and-publish/appsource/prepare/include-saas-offer.md)
platform Location Capability https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/location-capability.md
Title: Integrate location capabilities-
-description: Learn how to use Teams JavaScript client SDK to leverage location capabilities using Code snippets and samples.
++
+description: Learn how to use Teams JavaScript client SDK to leverage location capabilities using Code snippets and samples
+keywords: location map capabilities native device permissions
ms.localizationpriority: high
# Integrate location capabilities
-You can integrate the location capabilities of native device with your Teams app.
+You can integrate the location capabilities within your Teams app using [Microsoft Teams JavaScript client SDK](/javascript/api/overview/msteams-client?view=msteams-client-js-latest&preserve-view=true), which provides well-defined APIs and the necessary tools for your app to access the userΓÇÖs [native device capabilities](native-device-permissions.md). The location capability is available for the Teams web client, desktop, and mobile.
+
+## Advantages
-You can use [Microsoft Teams JavaScript client SDK](/javascript/api/overview/msteams-client?view=msteams-client-js-latest&preserve-view=true), which provides the tools necessary for your app to access the userΓÇÖs [native device capabilities](native-device-permissions.md). Use the location APIs, such as [getLocation](/javascript/api/@microsoft/teams-js/location.locationprops) and [showLocation](/javascript/api/@microsoft/teams-js/location.locationprops?) to integrate the capabilities within your app.
+ You can use the location APIs, such as [getLocation](/javascript/api/@microsoft/teams-js/location.locationprops) and [showLocation](/javascript/api/@microsoft/teams-js/location.locationprops?) to integrate the capabilities within your app.
[!INCLUDE [sdk-include](~/includes/sdk-include.md)]
-## Advantages of integrating location capabilities
+The advantage of integrating location capabilities in your Teams apps is to leverage location functionality in Teams web client, desktop, and mobile using [Microsoft Teams JavaScript client SDK](/javascript/api/overview/msteams-client?view=msteams-client-js-latest&preserve-view=true). The following scenarios showcase the advantages of location capabilities:
-The main advantage of integrating location capabilities in your Teams apps is that it allows web app developers on Teams platform to leverage location functionality with Microsoft Teams JavaScript client SDK.
+* Share authentic health data of cellular towers with the management. The management can compare any mismatch between captured location information and the data submitted by maintenance staff.
+* Locate technical support staff in a specified area. The app asks support staff to share their current location, which management can use to allocate IT ticket to the nearest support person after checking their profile.
+* Report the location after completing a job in the field. The job processing app asks for permission to find the location. After the user grants permission, the app detects the exact location. The user may also select a location by dragging a pin to the job completion location over the map.
+* Capture attendance through selfies inside the retail store. The store manager can track the attendance of the workers by asking them to share a selfie through an attendance app. The location data gets captured and is sent along with the image. This scenario is applicable mainly to the frontline workers.
-Following examples show how the integration of location capabilities is used in different scenarios:
+# [Mobile](#tab/mobile)
-* In a factory, the supervisor can track the attendance of workers by asking them to take a selfie in the vicinity of the factory and share it through the specified app. The location data also gets captured and sent along with the image.
-* The location capabilities enable the maintenance staff of a service provider to share authentic health data of cellular towers with the management. The management can compare any mismatch between captured location information and the data submitted by maintenance staff.
+The following image depicts web app experience of getLocation API:
-To integrate location capabilities, you must update the app manifest file and call the APIs. For effective integration, you must have a good understanding of [code snippets](#code-snippets) for calling the location APIs.
-It's important to familiarize yourself with the [API response errors](#error-handling) to handle the errors in your Teams app.
+ <!-- ![Mobile app experience for location capabilities](../../assets/images/tabs/location-picker-mobile.png) -->
+
+ :::image type="content" source="~/assets/images/tabs/location-picker-mobile.png" alt-text="Illustration shows the location picker." border="true":::
-> [!NOTE]
-> Currently, Microsoft Teams supports for location capabilities is available for mobile clients only.
+# [Desktop](#tab/desktop)
+
+The following image depicts web app experience of getLocation API:
+
+ :::image type="content" source="~/assets/images/tabs/location-picker-desktop.png" alt-text="Location picker in desktop." border="true":::
+++
+To integrate location capabilities, you must:
+
+* [Update the app manifest file](#update-manifest) and call the APIs.
+* Have working knowledge of [code snippets](#code-snippets) for calling the [location APIs](#location-apis).
+* Handle errors in your Teams app with the help of [API response errors](#error-handling).
## Update manifest
-Update your Teams app [manifest.json](../../resources/schem#devicepermissions) file by adding the `devicePermissions` property and specifying `geolocation`. It allows your app to ask for requisite permissions from users before they start using the location capabilities. The update for app manifest is as follows:
+Update your Teams app [manifest.json](../../resources/schem#devicepermissions) file by adding the `devicePermissions` property and specifying `geolocation`. It allows your app to ask for required permissions from users before they start using the location capabilities. The update for app manifest is as follows:
``` json "devicePermissions": [
Update your Teams app [manifest.json](../../resources/schem#
## Location APIs
-You must use the following set of APIs to enable your device's location capabilities:
+The following table lists the set of APIs to enable your device's location capabilities:
-| API | Description |
-| | |
-|[getLocation](/javascript/api/@microsoft/teams-js/location.locationprops) | Gives userΓÇÖs current device location or opens native location picker and returns the location chosen by the user. |
-|[showLocation](/javascript/api/@microsoft/teams-js/location.locationprops?) | Shows location on map. |
+| API | Description |Input configuration |
+| | | |
+|`getLocation`|Provides userΓÇÖs current device location or opens native location picker and returns the location chosen by the user. | The `getLocation` API takes the following two input parameters as a part of the [LocationProps](/javascript/api/@microsoft/teams-js/microsoftteams.location?view=msteams-client-js-latest#getLocation_LocationProps___error__SdkError__location__Location_____void_&preserve-view=true) interface: `allowChooseLocation`, `showMap`:<br> The experience is derived from the combination of these two input parameters:<br>- (true, true): A map is launched and the user gets to pick any location on it.<br>- (true, false): A map is launched and the user gets to pick any location on it.<br>- (false, true): A map is launched. The user can only submit the current location.<br>- (false,false): Map is not launched. User's current location is fetched.
+|`showLocation`| Shows location on map. |It takes a single input parameter location, which contains the coordinates of the location to be shown on the map.|
> [!NOTE]
-> The `getLocation()` API comes along with following [input configurations](/javascript/api/@microsoft/teams-js/microsoftteams.location.locationprops), `allowChooseLocation` and `showMap`. <br/> If the value of `allowChooseLocation` is *true*, then the users can choose any location of their choice.<br/> If the value is *false*, then the users cannot change their current location.<br/> If the value of `showMap` is *false*, the current location is fetched without displaying the map. `showMap` is ignored if `allowChooseLocation` is set to *true*.
+> For `getLocation` API:
+>
+> * If `allowChooseLocation` is set to true, then `showMap` is ignored.
+> * `showMap`= false is not supported on Teams web or desktop.
-The following image depicts web app experience of location capabilities:
+For more information on `getLocation` and `showLocation`, see [LocationProps](/javascript/api/@microsoft/teams-js/microsoftteams.location?view=msteams-client-js-latest#getLocation_LocationProps___error__SdkError__location__Location_____void_&preserve-view=true).
-![web app experience for location capabilities](../../assets/images/tabs/location-capability.png)
+> [!IMPORTANT]
+> When your application or services access a Microsoft API that provides a location using the Bing Maps, you understand and agree that any content provided through Bing Maps, including geocodes, can only be used within the Microsoft API through which the content is provided. Your use of Bing Maps is governed by the Bing Maps End User Terms of Use available at [go.microsoft.com](https://go.microsoft.com/?linkid=9710837) and the [Microsoft Privacy Statement](https://go.microsoft.com/fwlink/?LinkID=248686).</br>
+> Further, you must provide a hypertext link to Bing Maps TOU, which is located here, either at the bottom of each page in your Application where the services can be accessed or viewed or within the terms of use of your application. You are responsible for notifying end users of changes to the Bing Maps TOU, and you will comply with Microsoft's reasonable instructions in doing so. You will not encourage or require any end user to breach the terms of the Bing Maps TOU. In the event, an end user breaches the Bing Maps TOU, Microsoft may immediately terminate this agreement.
### Code snippets + # [TeamsJS v2](#tab/teamsjs-v2)
-**Calling `getLocation` API to retrieve the location:**
+* **Call `getLocation` API to retrieve the location:**
```javascript import {location} from "@microsoft/teams-js"
if(location.isSupported()) {
else {/*Handle case where capability isn't supported */} ```
-**Calling `showLocation` API to display the location:**
+* **Call `showLocation` API to display the location:**
```javascript import {location} from "@microsoft/teams-js"
else {/*Handle case where capability isn't supported */}
# [TeamsJS v1](#tab/teamsjs-v1)
-**Calling `getLocation` API to retrieve the location:**
+* **Call `getLocation` API to retrieve the location:**
```javascript let locationProps = {"allowChooseLocation":true,"showMap":true};
microsoftTeams.location.getLocation(locationProps, (err: microsoftTeams.SdkError
}); ```
-**Calling `showLocation` API to display the location:**
+* **Call `showLocation` API to display the location:**
```javascript let location = {"latitude":17,"longitude":17};
You must ensure to handle these errors appropriately in your Teams app. The foll
* [Integrate media capabilities](media-capabilities.md) * [Integrate QR code or barcode scanner capability in Teams](qr-barcode-scanner-capability.md)
-* [Integrate People Picker in Teams](people-picker-capability.md)
+* [Integrate People Picker](people-picker-capability.md)
platform Native Device Permissions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/native-device-permissions.md
Title: Request device permissions for your Microsoft Teams app+ description: How to update your app manifest in order to request access to native features that require user consent, such as scan QR, barcode, image, audio, and video capabilities ms.localizationpriority: medium + # Request device permissions for your Teams app
You can enrich your Teams app with native device capabilities, such as camera, m
> [!NOTE] >
-> * To integrate media capabilities within your Microsoft Teams web client, desktop, and mobile, see [Integrate media capabilities](media-capabilities.md).
+> * To integrate media capabilities within your Teams web client, desktop, and mobile see [Integrate media capabilities](media-capabilities.md).
> * To integrate QR or barcode scanner capability within your Microsoft Teams mobile app, see [Integrate QR or barcode scanner capability in Teams](qr-barcode-scanner-capability.md). > * To integrate location capabilities within your Teams web client, desktop, and mobile, see [Integrate location capabilities](location-capability.md). ## Native device permissions
-You must request the device permissions to access native device capabilities. The device permissions work similarly for all app constructs, such as tabs, task modules, or messaging extensions. The user must go to the permissions page in Teams settings to manage device permissions. You can build richer experiences on the Teams platform with the help of device capabilities, such as:
You must request the device permissions to access native device capabilities. The device permissions work similarly for all app constructs, such as tabs, task modules, or message extensions. The user must go to the permissions page in Teams settings to manage device permissions. By accessing the device capabilities, you can build richer experiences on the Teams platform, such as:
By accessing the device capabilities, you can build richer experiences on the Te
## Access device permissions The [Microsoft Teams JavaScript client SDK](/javascript/api/overview/msteams-client?view=msteams-client-js-latest&preserve-view=true) provides the tools necessary for your Teams app to access the userΓÇÖs [device permissions](#manage-permissions) and build a richer experience.- While access to these features is standard in modern web browsers, you must inform Teams about the features you use by updating your app manifest. This update allows you to ask for permissions while your app runs on the Teams desktop. ## Manage permissions
A user can manage device permissions in Teams settings by selecting **Allow** or
1. Select the app for which you need to choose the settings. 1. Select your desired settings.
- <!-- ![Device permissions mobile settings screen](../../assets/images/tabs/MobilePermissions.png) -->
-
- :::image type="content" source="~/assets/images/tabs/MobilePermissions.png" alt-text="Mobile Permissions.":::
+ :::image type="content" source="~/assets/images/tabs/MobilePermissions.png" alt-text="Mobile Permissions." border="true":::
# [Desktop](#tab/desktop)
A user can manage device permissions in Teams settings by selecting **Allow** or
1. Select **Settings** > **Permissions** from the drop-down menu. 1. Select your desired settings.
- <!-- ![Device permissions desktop settings screen](~/assets/images/tabs/device-permissions.png) -->
- :::image type="content" source="~/assets/images/tabs/device-permissions.png" alt-text="Device permission.":::
For example:
} ```
-* Notifications prompt the user when you call `requestPermission()`:
+* Notifications prompts the user when you call `requestPermission()`:
```JavaScript Notification.requestPermission(function(result) { /* ... */ });
For example:
* To prompt the user to share location on the map interface, Teams app asks permission when you call `getLocation()`:
- # [TeamsJS v2](#tab/teamsjs-v2)
+# [TeamsJS v2](#tab/teamsjs-v2)
- ```JavaScript
+```JavaScript
function getLocation() { location.getLocation({ allowChooseLocation: true, showMap: true }).then((location) => { let currentLocation = JSON.stringify(location); }).catch((error) => { /*Error getting location*/ })}
- ```
+```
- # [TeamsJS v1](#tab/teamsjs-v1)
+# [TeamsJS v1](#tab/teamsjs-v1)
- ```JavaScript
+```JavaScript
function getLocation() { microsoftTeams.location.getLocation({ allowChooseLocation: true, showMap: true }, (error: microsoftTeams.SdkError, location: microsoftTeams.location.Location) => { let currentLocation = JSON.stringify(location); }); }
- ```
+```
- ***
+***
Here's how the device permissions prompts appear to users on mobile and desktop.
-# [Mobile](#tab/mobile)
-
- <!-- ![Tabs mobile device permissions prompt](../../assets/images/tabs/MobileLocationPermission.png) -->
+# [Mobile](#tab/mobile1)
- :::image type="content" source="~/assets/images/tabs/MobileLocationPermission.png" alt-text="Mobile location permission.":::
+ :::image type="content" source="~/assets/images/tabs/MobileLocationPermission.png" alt-text="Mobile location permission." border="true":::
-# [Desktop](#tab/desktop)
+# [Desktop](#tab/desktop1)
<!-- ![Tabs desktop device permissions prompt](~/assets/images/tabs/device-permissions-prompt.png) -->
platform Media Formats https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/media-formats.md
Bots on Microsoft Teams support only the following media formats for audio and v
| Format | More information | | | |
-| Vorbis | http://www.vorbis.com/ |
-| PCM_U8, PCM_S16LE, PCM_S32LE, PCM_F32LE, PCM_S16BE, PCM_S24BE, PCM_MULAW | https://wiki.multimedia.cx/?title=PCM |
-| Ogg | http://www.vorbis.com/ |
-| Matroska | https://matroska.org/ |
-| WAV | https://en.wikipedia.org/wiki/WAV |
-| AAC | https://en.wikipedia.org/wiki/Advanced_Audio_Coding |
-| H264 | https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC |
-| MP3 | https://en.wikipedia.org/wiki/MP3 |
-| Opus | http://opus-codec.org/ |
-| MP4 | https://en.wikipedia.org/wiki/MPEG-4 |
+| Vorbis | <http://www.vorbis.com/> |
+| PCM_U8, PCM_S16LE, PCM_S32LE, PCM_F32LE, PCM_S16BE, PCM_S24BE, PCM_MULAW | <https://wiki.multimedia.cx/?title=PCM> |
+| Ogg | <http://www.vorbis.com/> |
+| Matroska | <https://matroska.org/> |
+| WAV | <https://en.wikipedia.org/wiki/WAV> |
+| AAC | <https://en.wikipedia.org/wiki/Advanced_Audio_Coding> |
+| H264 | <https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC> |
+| MP3 | <https://en.wikipedia.org/wiki/MP3> |
+| Opus | <http://opus-codec.org/> |
+| MP4 | <https://en.wikipedia.org/wiki/MPEG-4> |
## Next step > [!div class="nextstepaction"]
-> [Changes to Teams bot APIs for fetching Team or chat members](~/resources/team-chat-member-api-changes.md)
+> [Teams bot API changes to fetch team or chat members](team-chat-member-api-changes.md)
+
+## See also
+
+* [Build bots for Teams](../bots/what-are-bots.md)
+* [Integrate media capabilities](../concepts/device-capabilities/media-capabilities.md)
platform Team Chat Member Api Changes https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/team-chat-member-api-changes.md
Following are the upcoming API changes:
> [!NOTE] > We recommend you to use the [Graph API](/graph/api/user-get?view=graph-rest-1.0&tabs=http&preserve-view=true#examples) with an access token to retrieve information.+
+## See also
+
+* [Build bots for Teams](../bots/what-are-bots.md)
+* [Overview for using Teams](/graph/teams-concept-overview)
+* [API reference for the Bot Framework Connector service](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference)
platform Troubleshoot https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/troubleshoot.md
Last updated 07/09/2018
# Troubleshoot your Microsoft Teams app
-## Troubleshooting tabs
+## To troubleshoot tabs
-### Accessing the DevTools
+### Access DevTools
You can open [DevTools in the Teams client](~/tabs/how-to/developer-tools.md) for a similar experience as pressing F12 (on Windows) or Command-Option-I (on MacOS) in a browser.
If you aren't seeing your content in the tab view, it could be:
> [!NOTE] > A blank tab appears when the given tab URL redirects to login screen. Login pages donΓÇÖt render in iFrames as a safeguard against clickjacking. Your authentication logic must use a method other than redirect.
+### Changes to my web app aren't reflected in its Teams tab
+
+If you experience consistent or intermittent caching issues where updates to your web app aren't appearing when it's hosted within a Teams tab, check your server cache settings and use [`Cache-Control`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) headers to ensure your desired client caching behavior.
+ ### The Save button isn't enabled on the settings dialog
-Be sure to call `microsoftTeams.settings.setValidityState(true)` once the user has input or selected all required data on your settings page to enable the save button.
+Ensure to call `microsoftTeams.settings.setValidityState(true)` after the user has input or selected all required data on your settings page to enable the save button.
### The tab settings can't be saved on selecting Save
Unless you're doing silent authentication, you must follow the authentication pr
> [!NOTE] > We require all authentication flow to start and end on your domain, which must be listed in the `validDomains` object in your manifest.
-For more information about authentication, see [Authenticate a user](~/concepts/authentication/authentication.md).
+For more information about authentication, see [how to authenticate a user](~/concepts/authentication/authentication.md).
### Static tabs not showing up There's a known issue where updating an existing bot app with a new or updated static tab won't show that tab change when accessing the app from a personal chat conversation. To see the change, you should test on a new user or test instance, or access the bot from the Apps flyout.
-## Troubleshooting bots
+## To troubleshoot bots
### Can't add my bot
-Apps must be enabled by the Office 365 tenant admin for them to be loaded by end users. In some cases, the Office 365 tenant might have multiple SKUs associated with it, and for bots to work in any, they must be enabled in all SKUs. For more information, see [Prepare your Office 365 tenant](~/concepts/build-and-test/prepare-your-o365-tenant.md).
+Apps must be enabled by the Office 365 tenant admin for them to be loaded by end users. In some cases, the Office 365 tenant might have multiple SKUs associated with it, and for bots to work in any, they must be enabled in all SKUs. For more information, see [prepare your Office 365 tenant](~/concepts/build-and-test/prepare-your-o365-tenant.md).
### Can't add bot as a member of a team
-Bots must first be uploaded in a team before it's accessible within any channel of that team. For more information on this process, see [Uploading your app in a team](~/concepts/deploy-and-publish/apps-upload.md).
+Bots must first be uploaded in a team before it's accessible within any channel of that team. For more information on this process, see [how to upload your app in a team](~/concepts/deploy-and-publish/apps-upload.md).
### My bot doesn't get my message in a channel
platform Invoking Task Modules https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md
Task modules can be invoked from tabs, bots, or deep links. The response can be
| Invoked using | Task module with HTML or JavaScript | Task module with Adaptive Card | | | | | | JavaScript in a tab | 1. Use the Teams client SDK function `tasks.startTask()` with an optional `submitHandler(err, result)` callback function. <br/><br/> 2. In the task module code, when the user has performed the actions, call the Teams SDK function `tasks.submitTask()` with a `result` object as a parameter. If a `submitHandler` callback was specified in `tasks.startTask()`, Teams calls it with `result` as a parameter. If there was an error when invoking `tasks.startTask()`, the `submitHandler` function is called with an `err` string instead. <br/><br/> 3. You can also specify a `completionBotId` when calling `teams.startTask()`. Then the `result` is sent to the bot instead. | 1. Call the Teams client SDK function `tasks.startTask()` with a [TaskInfo object](#the-taskinfo-object) and `TaskInfo.card` containing the JSON for the Adaptive Card to show in the task module pop-up. <br/><br/> 2. If a `submitHandler` callback was specified in `tasks.startTask()`, Teams calls it with an `err` string, if there was an error when invoking `tasks.startTask()` or if the user closes the task module pop-up using the X at the upper right. <br/><br/> 3. If the user presses an `Action.Submit` button then its `data` object is returned as the value of `result`. |
-| Bot card button | 1. Bot card buttons, depending on the type of button, can invoke task modules in two ways, a deep link URL or by sending a `task/fetch` message. <br/><br/> 2. If the button's action `type` is `task/fetch` that is `Action.Submit` button type for Adaptive Cards, a `task/fetch invoke` event that is an HTTP POST is sent to the bot. The bot responds to the POST with HTTP 200 and the response body containing a wrapper around the [TaskInfo object](#the-taskinfo-object). For more information, see [invoking a task module using `task/fetch`](~/task-modules-and-cards/task-modules/task-modules-bots.md#invoke-a-task-module-using-taskfetch). Teams displays the task module. <br/><br/> 3. After the user has performed the actions, call the Teams SDK function `tasks.submitTask()` with a `result` object as a parameter. The bot receives a `task/submit invoke` message that contains the `result` object. <br/><br/> 4. You have three different ways to respond to the `task/submit` message, by doing nothing that is the task completed successfully, by displaying a message to the user in a pop-up window, or by invoking another task module window. For more information, see [detailed discussion on `task/submit`](~/task-modules-and-cards/task-modules/task-modules-bots.md#the-flexibility-of-tasksubmit). | <ul><li> Like buttons on Bot Framework cards, buttons on Adaptive Cards support two ways of invoking task modules, deep link URLs with `Action.openUrl` buttons, and `task/fetch` using `Action.Submit` buttons. </li></ul> <br/><br/> <ul><li> Task modules with Adaptive Cards work similarly to the HTML or JavaScript case. The major difference is that since there's no JavaScript when you're using Adaptive Cards, there's no way to call `tasks.submitTask()`. Instead, Teams takes the `data` object from `Action.Submit` and returns it as the payload of the `task/submit` event. For more information, see [flexibility of `task/submit`](~/task-modules-and-cards/task-modules/task-modules-bots.md#the-flexibility-of-tasksubmit). </li></ul> |
+| Bot card button | 1. Bot card buttons, depending on the type of button, can invoke task modules in two ways, a deep link URL or by sending a `task/fetch` message. <br/><br/> 2. If the button's action `type` is `task/fetch` that is `Action.Submit` button type for Adaptive Cards, a `task/fetch invoke` event that is an HTTP POST is sent to the bot. The bot responds to the POST with HTTP 200 and the response body containing a wrapper around the [TaskInfo object](#the-taskinfo-object). For more information, see [invoking a task module using `task/fetch`](~/task-modules-and-cards/task-modules/task-modules-bots.md#invoke-a-task-module-using-taskfetch). Teams displays the task module. <br/><br/> 3. After the user has performed the actions, call the Teams SDK function `tasks.submitTask()` with a `result` object as a parameter. The bot receives a `task/submit invoke` message that contains the `result` object. <br/><br/> 4. You have three different ways to respond to the `task/submit` message, by doing nothing that is the task completed successfully, by displaying a message to the user in a pop-up window, or by invoking another task module window. For more information, see [detailed discussion on `task/submit`](task-modules-bots.md#responds-to-the-tasksubmit-messages). | <ul><li> Like buttons on Bot Framework cards, buttons on Adaptive Cards support two ways of invoking task modules, deep link URLs with `Action.openUrl` buttons, and `task/fetch` using `Action.Submit` buttons. </li></ul> <br/><br/> <ul><li> Task modules with Adaptive Cards work similarly to the HTML or JavaScript case. The major difference is that since there's no JavaScript when you're using Adaptive Cards, there's no way to call `tasks.submitTask()`. Instead, Teams takes the `data` object from `Action.Submit` and returns it as the payload of the `task/submit` event. For more information, see [responds to the `task/submit`messages](task-modules-bots.md#responds-to-the-tasksubmit-messages). </li></ul> |
| Deep link URL <br/>[URL syntax](#task-module-deep-link-syntax) | 1. Teams invokes the task module that is the URL that appears inside the `<iframe>` specified in the `url` parameter of the deep link. There's no `submitHandler` callback. <br/><br/> 2. Within the JavaScript of the page in the task module, call `tasks.submitTask()` to close it with a `result` object as a parameter, the same as when invoking it from a tab or a bot card button. However, completion logic is slightly different. If your completion logic resides on the client that is if there's no bot, there's no `submitHandler` callback, so any completion logic must be in the code preceding the call to `tasks.submitTask()`. Invocation errors are only reported through the console. If you have a bot, then you can specify a `completionBotId` parameter in the deep link to send the `result` object through a `task/submit` event. | 1. Teams invokes the task module that is the JSON card body of the Adaptive Card that is specified as a URL-encoded value of the `card` parameter of the deep link. <br/><br/> 2. The user closes the task module by selecting the X at the upper right of the task module or by pressing an `Action.Submit` button on the card. Since there's no `submitHandler` to call, the user must have a bot to send the value of the Adaptive Card fields. The user must use the `completionBotId` parameter in the deep link to specify the bot to send the data to using a `task/submit invoke` event. | The next section specifies the `TaskInfo` object that defines certain attributes for a task module.
platform Task Modules Bots https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md
Task modules can be invoked from Microsoft Teams bots using buttons on Adaptive
There are two ways of invoking task modules:
-* A new invoke message `task/fetch`: Using the `invoke` [card action](~/task-modules-and-cards/cards/cards-actions.md#action-type-invoke) for Bot Framework cards, or the `Action.Submit` [card action](~/task-modules-and-cards/cards/cards-actions.md#adaptive-cards-actions) for Adaptive cards, with `task/fetch`, task module either a URL or an Adaptive Card, is fetched dynamically from your bot.
+* A new invoke message `task/fetch`: Using the `invoke` [card action](~/task-modules-and-cards/cards/cards-actions.md#action-type-invoke) for Bot Framework cards, or the `Action.Submit` [card action](~/task-modules-and-cards/cards/cards-actions.md#adaptive-cards-actions) for Adaptive Cards, with `task/fetch`, task module either a URL or an Adaptive Card, is fetched dynamically from your bot.
* Deep link URLs: Using the [deep link syntax for task modules](~/task-modules-and-cards/task-modules/invoking-task-modules.md#task-module-deep-link-syntax), you can use the `openUrl` [card action](~/task-modules-and-cards/cards/cards-actions.md#action-type-openurl) for Bot Framework cards or the `Action.OpenUrl` [card action](~/task-modules-and-cards/cards/cards-actions.md#adaptive-cards-actions) for Adaptive Cards, respectively. With deep link URLs, the task module URL or Adaptive Card body is already known to avoid a server round-trip relative to `task/fetch`. > [!IMPORTANT]
There are two ways of invoking task modules:
The next section provides details on invoking a task module using `task/fetch`.
-## Invoke a task module using task/fetch
+## Invoke a task module using `task/fetch`
When the `value` object of the `invoke` card action or `Action.Submit` is initialized and when a user selects the button, an `invoke` message is sent to the bot. In the HTTP response to the `invoke` message, there's a [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#the-taskinfo-object) embedded in a wrapper object, which Teams uses to display the task module. :::image type="content" source="../../assets/images/task-module/task-module-invoke-request-response.png" alt-text="task/fetch request or response":::
-The following steps provide the invoke task module using task/fetch:
+The following steps provide the invoke task module using `task/fetch`:
1. This image shows a Bot Framework hero card with a **Buy** `invoke` [card action](~/task-modules-and-cards/cards/cards-actions.md#action-type-invoke). The value of the `type` property is `task/fetch` and the rest of the `value` object can be of your choice. 1. The bot receives the `invoke` HTTP POST message.
-1. The bot creates a response object and returns it in the body of the POST response with an HTTP 200 response code. For more information on schema for responses, see [the discussion on task/submit](#the-flexibility-of-tasksubmit). The following code provides an example of body of the HTTP response that contains a [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#the-taskinfo-object) embedded in a wrapper object:
+1. The bot creates a response object and returns it in the body of the POST response with an HTTP 200 response code. For more information on schema for responses, see the [discussion on task/submit](#responds-to-the-tasksubmit-messages). The following code provides an example of body of the HTTP response that contains a [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#the-taskinfo-object) embedded in a wrapper object:
```json {
The next section provides details on submitting the result of a task module.
When the user is finished with the task module, submitting the result back to the bot is similar to the way it works with tabs. For more information, see [example of submitting the result of a task module](~/task-modules-and-cards/task-modules/task-modules-tabs.md#example-of-submitting-the-result-of-a-task-module). There are a few differences as follows:
-* HTML or JavaScript that is `TaskInfo.url`: Once you've validated what the user has entered, you call the `microsoftTeams.tasks.submitTask()` SDK function referred to hereafter as `submitTask()` for readability purposes. You can call `submitTask()` without any parameters if you want Teams to close the task module, but you must pass an object or a string to your `submitHandler`. Pass it as the first parameter, `result`. Teams invokes `submitHandler`, `err` is `null`, and `result` is the object or string you passed to `submitTask()`. If you call `submitTask()` with a `result` parameter, you must pass an `appId` or an array of `appId` strings. This allows Teams to validate that the app sending the result is the same one, which invoked the task module. Your bot receives a `task/submit` message including `result`. For more information, see [payload of `task/fetch` and `task/submit` messages](#payload-of-taskfetch-and-tasksubmit-messages).
+* HTML or JavaScript that is `TaskInfo.url`: After you validate what the user has entered, you call the `microsoftTeams.tasks.submitTask()` SDK function referred to hereafter as `submitTask()` for readability purposes. You can call `submitTask()` without any parameters if you want Teams to close the task module, but you must pass an object or a string to your `submitHandler`. Pass it as the first parameter, `result`. Teams invokes `submitHandler`, `err` is `null`, and `result` is the object or string you passed to `submitTask()`. When you call `submitTask()` with the optional `appIds` parameter, Teams validates that the app sending the result is the same that invoked the task module, and helps prevent malicious apps from retrieving the result. Multiple app IDs can be specified because a web app from a single underlying domain can power multiple apps across different environments and branding schemes. Your bot receives a `task/submit` message including `result`. For more information, see [payload of `task/fetch` and `task/submit` messages](#payload-of-taskfetch-and-tasksubmit-messages).
* Adaptive Card that is `TaskInfo.card`: The Adaptive Card body as filled in by the user is sent to the bot through a `task/submit` message when the user selects any `Action.Submit` button.
-The next section provides details on the flexibility of `task/submit`.
+The next section provides details on how to respond to the `task/submit` messages.
-## The flexibility of task/submit
+## Responds to the `task/submit` messages
When the user finishes with a task module invoked from a bot, the bot always receives a `task/submit invoke` message. You have several options when responding to the `task/submit` message as follows:
When the user finishes with a task module invoked from a bot, the bot always rec
The next section provides details on payload of `task/fetch` and `task/submit` messages.
-## Payload of task/fetch and task/submit messages
+## Payload of `task/fetch` and `task/submit` messages
This section defines the schema of what your bot receives when it receives a `task/fetch` or `task/submit` Bot Framework `Activity` object. The following table provides the properties of payload of `task/fetch` and `task/submit` messages:
This section defines the schema of what your bot receives when it receives a `ta
The next section provides an example of receiving and responding to `task/fetch` and `task/submit` invoke messages in Node.js.
-## Example of task/fetch and task/submit invoke messages in Node.js and C#
+## Example
+
+ The following tabs provides `task/fetch` and `task/submit` invoke messages in Node.js and C#:
# [Node.js](#tab/nodejs)
platform Add Incoming Webhook https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/add-incoming-webhook.md
Title: Create an Incoming Webhook
-description: Create Incoming Webhook to Teams app and post external requests to Teams. Remove Incoming Webhook. Sample code(C#,Node.js) to send card using Incoming Webhook.
+description: Create Incoming Webhook to Teams app and post external requests to Teams. Remove Incoming Webhook. Sample code(C#, Node.js) to send card using Incoming Webhook.
ms.localizationpriority: high
# Create Incoming Webhooks
-An Incoming Webhook lets external applications to share content in Microsoft Teams channels. The webhooks are used as tools to track and notify. The webhooks provide a unique URL, to send a JSON payload with a message in card format. Cards are user interface containers that include content and actions related to a single topic. You can use cards in the following capabilities:
+An Incoming Webhook lets external applications to share content in Microsoft Teams channels. The webhooks are used as tools to track and notify. The webhooks provide a unique URL, to send a JSON payload with a message in card format. Cards are user interface containers that include content and actions related to a single article. You can use cards in the following capabilities:
* Bots * Message extensions * Connectors > [!IMPORTANT]
-> You can choose to build notification bot Teams app other than incoming webhooks. They perform similarly but notification bot has more functionalities. For more information, see [Build notification bot with JavaScript](../../sbs-gs-notificationbot.yml) or [incoming webhook notification sample](https://github.com/OfficeDev/TeamsFx-Samples/tree/dev/incoming-webhook-notification). To get started, download [Teams Toolkit](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) now and explore. For more information, see [Teams Toolkit documents](../../toolkit/teams-toolkit-fundamentals.md).
+> You can choose to build notification bot Teams app other than Incoming Webhooks. They perform similarly but notification bot has more functionalities. For more information, see [Build notification bot with JavaScript](../../sbs-gs-notificationbot.yml) or [Incoming Webhook notification sample](https://github.com/OfficeDev/TeamsFx-Samples/tree/dev/incoming-webhook-notification). To get started, download [Teams Toolkit](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) now and explore. For more information, see [Teams Toolkit documents](../../toolkit/teams-toolkit-fundamentals.md).
-See the following video to learn how to create an Incoming Webhooks:
+See the following video to learn how to create Incoming Webhooks:
<br>+ > [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RE4ODcY]
-## Key features of an Incoming Webhook
+## Key features of Incoming Webhooks
The following table provides the features and description of an Incoming Webhook:
The following table provides the features and description of an Incoming Webhook
|Adaptive Cards using an Incoming Webhook | Adaptive Cards can be sent through Incoming Webhooks. For more information, see [Send Adaptive Cards using Incoming Webhooks](../../webhooks-and-connectors/how-to/connectors-using.md#send-adaptive-cards-using-an-incoming-webhook).| |Actionable messaging support|Actionable message cards are supported in all Office 365 groups including Teams. If you send messages through cards, you must use the actionable message card format. For more information, see [legacy actionable message card reference](/outlook/actionable-messages/message-card-reference) and [message card playground](https://messagecardplayground.azurewebsites.net).| |Independent HTTPS messaging support|Cards provide information clearly and consistently. Any tool or framework that can send HTTPS POST requests can send messages to Teams through an Incoming Webhook.|
-|Markdown support|All text fields in actionable messaging cards support basic Markdown. Do not use HTML markup in your cards. HTML is ignored and treated as plain text.|
+|Markdown support|All text fields in actionable messaging cards support basic Markdown. Don't use HTML markup in your cards. HTML is ignored and treated as plain text.|
|Scoped configuration|Incoming Webhook is scoped and configured at the channel level.| |Secure resource definitions|Messages are formatted as JSON payloads. This declarative messaging structure prevents the insertion of malicious code.|
The following table provides the features and description of an Incoming Webhook
> * Teams bots, message extensions, Incoming Webhook, and the Bot Framework support Adaptive Cards. Adaptive Cards is an open cross card platform framework that is used in all platforms such as Windows, Android, iOS, and so on. Currently, [Teams connectors](../../webhooks-and-connectors/how-to/connectors-creating.md) don't support Adaptive Cards. However, it is possible to create a [flow](https://flow.microsoft.com/blog/microsoft-flow-in-microsoft-teams/) that posts Adaptive Cards to a Teams channel. > * For more information on cards and webhooks, see [Adaptive cards and Incoming Webhooks](~/task-modules-and-cards/what-are-cards.md#adaptive-cards-and-incoming-webhooks).
-## Create an Incoming Webhook
+## Create Incoming Webhooks
To add an Incoming Webhook to a Teams channel, follow these steps:
You can create and send actionable messages through Incoming Webhook or Office 3
> [!NOTE] > In Teams, select **Settings** > **Member permissions** > **Allow members to create, update, and remove connectors**, so that any team member can add, modify, or delete a connector.
-## Remove an Incoming Webhook
+## Remove Incoming Webhooks
To remove an Incoming Webhook from a Teams channel, follow these steps:
To remove an Incoming Webhook from a Teams channel, follow these steps:
| Sample Name | Description | C# | TypeScript | |:|:--|:|:--|
-|Incoming Webhook|This sample code demonstrates how to send card using incoming webhook. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/incoming-webhook/csharp)|[View](https://github.com/OfficeDev/TeamsFx-Samples/tree/release/incoming-webhook-notification) |
+|Incoming Webhook|This sample code demonstrates how to send card using Incoming Webhook. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/incoming-webhook/csharp)|[View](https://github.com/OfficeDev/TeamsFx-Samples/tree/release/Incoming-Webhook-notification) |
## See also
-* [Create an Outgoing Webhook](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md)
-* [Create an Office 365 Connector](~/webhooks-and-connectors/how-to/connectors-creating.md)
+* [Webhooks and connectors](../what-are-webhooks-and-connectors.md)
+* [Create Outgoing Webhooks](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md)
+* [Create Office 365 Connectors](~/webhooks-and-connectors/how-to/connectors-creating.md)
* [Create and send messages](~/webhooks-and-connectors/how-to/connectors-using.md)
-* [Share to Teams from web apps](~/concepts/build-and-test/share-to-teams-from-web-apps.md)
-* [Integrate web apps](~/samples/integrate-web-apps-overview.md)
-* [Secure access and data in Azure Logic Apps](/azure/logic-apps/logic-apps-securing-a-logic-app)
-* [Build notification bot with JavaScript](../../sbs-gs-notificationbot.yml)
-* [Build your first bot app using JavaScript](../../sbs-gs-bot.yml)
+* [Build bots for Teams](../../bots/what-are-bots.md)
+* [Message extensions](../../messaging-extensions/what-are-messaging-extensions.md)
+* [Card actions](../../task-modules-and-cards/cards/cards-actions.md)
+* [Integrate web apps](../../samples/integrate-web-apps-overview.md)
+* [Share to Teams from web apps](../../concepts/build-and-test/share-to-teams-from-web-apps.md)
+* [Secure access and data in Azure Logic Apps](/azure/logic-apps/logic-apps-securing-a-logic-app?tabs=azure-portal)
platform Add Outgoing Webhook https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/add-outgoing-webhook.md
The Outgoing Webhook acts as a bot and search for messages in channels using **@
* Table with just a row is not really needed. Provide the content without tabulating it. >
-See the following video to learn how to create an Outgoing Webhooks:
+See the following video to learn how to create Outgoing Webhooks:
<br> > [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RE4OIzu] <br>
-## Key features of Outgoing Webhook
+## Key features of Outgoing Webhooks
The following table provides the features and description of Outgoing Webhooks:
To create an Outgoing Webhook, follow these steps:
1. Select **Create**. The Outgoing Webhook is added to the current team's channel:
- ![create Outgoing Webhook](~/assets/images/outgoingwebhook.png)
+ ![create Outgoing Webhooks](~/assets/images/outgoingwebhook.png)
A [Hash-based Message Authentication Code (HMAC)](https://security.stackexchange.com/questions/20129/how-and-when-do-i-use-hmac/20301) dialogue box appears. It's a security token used to authenticate calls between Teams and the designated outside service. The HMAC security token doesn't expire and is unique for each configuration.
Follow the [step-by-step guide](../../sbs-outgoing-webhooks.yml) to create Outgo
## See also
-* [Create an Incoming Webhook](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
-* [Create an Office 365 Connector](~/webhooks-and-connectors/how-to/connectors-creating.md)
-* [Create and send messages](~/webhooks-and-connectors/how-to/connectors-using.md)
-* [Build notification bot with JavaScript](../../sbs-gs-notificationbot.yml)
-* [Build your first bot app using JavaScript](../../sbs-gs-bot.yml)
+* [Webhooks and connectors](../what-are-webhooks-and-connectors.md)
+* [Create and send messages](connectors-using.md)
+* [Create Incoming Webhooks](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
+* [Create Office 365 Connectors](~/webhooks-and-connectors/how-to/connectors-creating.md)
+* [Adaptive Cards](../../task-modules-and-cards/what-are-cards.md#adaptive-cards)
platform Connectors Creating https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/connectors-creating.md
With Microsoft Teams apps, you can add your existing Office 365 Connector or bui
See the following video to learn how to create an Office 365 Connectors: <br>
-> [!VIDEO <https://www.microsoft.com/en-us/videoplayer/embed/RE4OIzv>]
+> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RE4OIzv]
<br> [!INCLUDE [sdk-include](~/includes/sdk-include.md)]
To integrate the configuration experience:
1. Register `microsoftTeams.pages.config.registerOnRemoveHandler()` event handler, which is called when the user removes connector.
-This event gives your service an opportunity to perform any clean up actions.
+This event gives your service an opportunity to perform any cleanup actions.
The following code provides a sample HTML to create a connector configuration page without the customer service and support:
Follow the [step-by-step guide](../../sbs-teams-connectors.yml) to create and te
## Distribute webhook and connector
-1. [Set up an Incoming Webhook](~/webhooks-and-connectors/how-to/add-incoming-webhook.md#create-an-incoming-webhook) directly for your team.
+1. [Create Incoming Webhooks](add-incoming-webhook.md#create-incoming-webhooks) directly for your team.
1. Add a [configuration page](~/webhooks-and-connectors/how-to/connectors-creating.md?#integrate-the-configuration-experience) and publish your Incoming Webhook in an Office 365 Connector.
Follow the [step-by-step guide](../../sbs-teams-connectors.yml) to build and tes
## See also
-* [Create and send messages](~/webhooks-and-connectors/how-to/connectors-using.md)
-* [Create an Incoming Webhook](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
-* [Create an Office 365 Connector](~/webhooks-and-connectors/how-to/connectors-creating.md)
+* [Webhooks and connectors](../what-are-webhooks-and-connectors.md)
+* [Create Incoming Webhooks](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
+* [Create Outgoing Webhooks](add-outgoing-webhook.md)
+* [Create and send messages](connectors-using.md)
* [How admins can enable or disable connectors](/MicrosoftTeams/office-365-custom-connectors#enable-or-disable-connectors-in-teams) * [How admins can publish custom connectors within their org](/MicrosoftTeams/office-365-custom-connectors)
-* [Build notification bot with JavaScript](../../sbs-gs-notificationbot.yml)
-* [Build your first bot app using JavaScript](../../sbs-gs-bot.yml)
+* [App manifest schema for Teams](../../resources/schem)
+* [getConfig](/javascript/api/@microsoft/teamsfx/teamsfxconfiguration?view=msteams-client-js-latest&preserve-view=true)
platform Connectors Using https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/connectors-using.md
To post a message to the webhook with PowerShell, follow these steps:
> [!NOTE] > If the POST succeeds, you must see a simple **1** output by `Invoke-RestMethod`.
-1. Check the Teams channel associated with the webhook URL. You can see the new card posted to the channel. Before you use the connector to test or publish your app, you must do the following:
+1. Check the Teams channels associated with the webhook URL. You can see the new card posted to the channel. Before you use the connector to test or publish your app, you must do the following:
* [Include two icons](../../concepts/build-and-test/apps-package.md#app-icons). * Modify the `icons` portion of the manifest to the file names of the icons instead of URLs.
These limits are in place to reduce spamming a channel by a connector and ensure
## See also
-* [Office 365 Connectors for Microsoft Teams](~/webhooks-and-connectors/how-to/connectors-creating.md)
-* [Create an Incoming Webhook](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
-* [Create an Outgoing Webhook](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md)
+* [Webhooks and connectors](../what-are-webhooks-and-connectors.md)
+* [Create Incoming Webhooks](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
+* [Create Outgoing Webhooks](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md)
* [Rate limiting for Teams bots messages](~/bots/how-to/rate-limit.md)
-* [Build tabs with Adaptive Cards](~/tabs/how-to/build-adaptive-card-tabs.md)
-* [Format cards in Microsoft Teams](~/task-modules-and-cards/cards/cards-format.md)
-* [Build notification bot with JavaScript](../../sbs-gs-notificationbot.yml)
-* [Build your first bot app using JavaScript](../../sbs-gs-bot.yml)
+* [Build tabs with Adaptive Cards](../../tabs/how-to/build-adaptive-card-tabs.md)
+* [Format cards in Microsoft Teams](../../task-modules-and-cards/cards/cards-format.md)
+* [Adaptive Cards](../../task-modules-and-cards/what-are-cards.md#adaptive-cards)
+* [App manifest schema for Teams](../../resources/schem)
platform What Are Webhooks And Connectors https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/what-are-webhooks-and-connectors.md
Webhooks and connectors help to connect the web services to channels and teams in Microsoft Teams. Webhooks are user defined HTTP callback that notifies users about any action that has taken place in the Teams channel. It's a way for an app to get real time data. Connectors allow users to subscribe to receive notifications and messages from your web services. They expose an HTTPS endpoint for your service to post messages in the form of cards. > [!IMPORTANT]
-> You can choose to build notification bot Teams app other than incoming webhooks. They perform similarly but notification bot has more functionalities. For more information, see [Build notification bot with JavaScript](../sbs-gs-notificationbot.yml) or [incoming webhook notification sample](https://github.com/OfficeDev/TeamsFx-Samples/tree/dev/incoming-webhook-notification). To get started, download [Teams Toolkit](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) now and explore. For more information, see [Teams Toolkit documents](../toolkit/teams-toolkit-fundamentals.md).
+> You can choose to build notification bot Teams app other than Incoming Webhooks. They perform similarly but notification bot has more functionalities. For more information, see [Build notification bot with JavaScript](../sbs-gs-notificationbot.yml) or [Incoming Webhook notification sample](https://github.com/OfficeDev/TeamsFx-Samples/tree/dev/incoming-webhook-notification). To get started, download [Teams Toolkit](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) now and explore. For more information, see [Teams Toolkit documents](../toolkit/teams-toolkit-fundamentals.md).
## Outgoing Webhooks
Connectors allow users to subscribe to receive notifications and messages from t
Incoming Webhooks help in posting messages from apps to Teams. If Incoming Webhooks are enabled for a team in any channel, it exposes the HTTPS endpoint, which accepts correctly formatted JSON and inserts the messages into that channel. For example, you can create an Incoming Webhook in your DevOps channel, configure your build, and simultaneously deploy and monitor services to send alerts.
-#### Notification bot or incoming webhook - choose the right one
+#### Notification bot or Incoming Webhook - choose the right one
-Before you start to learn how to build Incoming webhooks, you may also want to know that you can build Notification Bot using Teams Toolkit. Notification Bots can enable more customizable experience to meet different business scenarios.
+Before you start to learn how to build Incoming Webhooks, you may also want to know that you can build Notification Bot using Teams Toolkit. Notification Bots can enable more customizable experience to meet different business scenarios.
-Learn more about the differences between Notification Bot and Incoming webhook so that you can choose correct solutions for your scenarios:
+Learn more about the differences between Notification Bot and Incoming Webhook so that you can choose correct solutions for your scenarios:
| &nbsp; | Notification bot | Incoming Webhook | | | | |
Learn more about the differences between Notification Bot and Incoming webhook s
| Trigger Supported | All triggers supported. If you use Teams Toolkit, you can quickly get template projects with following triggers: <br> ΓÇó Time trigger hosted on Azure functions. <br> ΓÇó Restify HTTP trigger hosted on Azure app service <br> ΓÇó HTTP trigger hosted on Azure Functions | All triggers supported | | Building Tools | ΓÇó [Teams Toolkit Overview for Visual Studio Code](../toolkit/teams-toolkit-fundamentals.md) <br> ΓÇó [Teams Toolkit overview for Visual Studio](../toolkit/teams-toolkit-fundamentals.md) <br> ΓÇó [TeamsFx Library](../toolkit/TeamsFx-CLI.md) <br> ΓÇó [TeamsFx SDK](../toolkit/TeamsFx-SDK.md) | No tools required | | Cloud resource required | Azure Bot Framework | No resources required |
-| Tutorial | [Build notification bot with JavaScript](../sbs-gs-notificationbot.yml) | [incoming webhook notification sample](https://github.com/OfficeDev/TeamsFx-Samples/tree/dev/incoming-webhook-notification) |
+| Tutorial | [Build notification bot with JavaScript](../sbs-gs-notificationbot.yml) | [Incoming Webhook notification sample](https://github.com/OfficeDev/TeamsFx-Samples/tree/dev/incoming-webhook-notification) |
### Office 365 Connectors
Actionable messages allow users to take action without leaving their email clien
## Next step > [!div class="nextstepaction"]
-> [Create an Outgoing Webhook](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md)
+> [Create Outgoing Webhooks](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md)
## See also
-* [Create an Incoming Webhook](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
-* [Create an Office 365 Connector](~/webhooks-and-connectors/how-to/connectors-creating.md)
+* [Create Incoming Webhooks](~/webhooks-and-connectors/how-to/add-incoming-webhook.md)
+* [App capabilities mapped to features](../concepts/design/map-use-cases.md#app-capabilities-mapped-to-features)
+* [Create Office 365 Connectors](~/webhooks-and-connectors/how-to/connectors-creating.md)
* [Create and send messages](~/webhooks-and-connectors/how-to/connectors-using.md)
-* [Build notification bot with JavaScript](../sbs-gs-notificationbot.yml)
-* [Build your first bot app using JavaScript](../sbs-gs-bot.yml)
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md
Teams platform features that are available to all app developers.
**2022 November**
+* ***November 23, 2022***: [Integrate location capabilities](concepts/device-capabilities/location-capability.md).
+ * ***November 22, 2022***: [Enable SSO for your bot and message extension app](bots/how-to/authentication/bot-sso-overview.md). * ***November 18, 2022***: [Zero install for link unfurling](messaging-extensions/how-to/link-unfurling.md#zero-install-for-link-unfurling).
Teams platform features that are available to all app developers.
| 10/13/2022| Configure back button of an app. | Design your app > App capabilities > [Personal apps](concepts/design/personal-apps.md#configure-back-button)| | 10/12/2022| Apps are supported in instant meetings, one-on-one, and group calls. | Build apps for Teams meetings and calls > [Overview](apps-in-teams-meetings/teams-apps-in-meetings.md)| | 10/12/2022| Live Share canvas | Build apps for Teams meetings and calls > Enhanced collaboration with Live Share > [Canvas](apps-in-teams-meetings/teams-live-share-canvas.md)|
-| 09/30/2022|Manage SaaS licenses for third party apps in Teams.|Monetize your app > Include a SaaS offer with your Teams app > [Manage license for third party apps in Teams](concepts/deploy-and-publish/appsource/prepare/include-saas-offer.md#manage-license-for-third-party-apps-in-teams)|
| 09/29/2022|Teams mobile app now supports file downloads to local devices.|Integrate device capabilities > Integrate media capabilities > [File download on Teams mobile](concepts/device-capabilities/media-capabilities.md#file-download-on-teams-mobile)| | 09/16/2022|Adaptive Cards in search based message extensions now support Universal Actions.|Build message extensions > Search commands > [Universal Actions for search based message extensions](messaging-extensions/how-to/search-commands/universal-actions-for-search-based-message-extensions.md)| | 09/06/2022|Introduced code snippets for capturing videos using camera through `selectMedia` API.| Integrate device capabilities > Integrate media capabilities > [Code snippets](concepts/device-capabilities/media-capabilities.md#code-snippets)|