Service | Microsoft Docs article | Related commit history on GitHub | Change details |
---|---|---|---|
platform | Bot Messages Ai Generated Content | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/bot-messages-ai-generated-content.md | + + Title: Bot messages with AI-generated content +description: Learn how to format your bot with an AI label, sensitivity labels, citations, and feedback buttons built using Teams AI library or Bot Framework SDK. ++ms.localizationpriority: medium +++# Bot messages with AI-generated content ++AI labels, citations, feedback buttons, and sensitivity labels in your bot’s messages improve user engagement and foster transparency and trust. ++* [AI label](#ai-label) enables users to identify that the message was generated using AI. +* [Citations](#citations) enables users to refer to the source of the bot message through in-text citations and references. +* [Feedback buttons](#feedback-buttons) enables users to provide positive or negative feedback to the bot messages. +* [Sensitivity label](#sensitivity-label) enables users to understand the confidentiality of the bot message. ++The following screenshots show how bot messages can be enhanced with AI labels, citations, feedback buttons, and sensitivity labels: ++# [Before](#tab/before) +++# [After](#tab/after) +++++> [!NOTE] +> +> * AI label, citations, feedback buttons, and sensitivity labels are available in [public developer preview](../../resources/dev-preview/developer-preview-intro.md) for one-on-one and group chats, but aren't supported in channels. +> * AI label, citations, feedback buttons, and sensitivity labels are available only in Teams web and desktop clients. +> * AI label, citations, feedback buttons, and sensitivity labels are available in [Government Community Cloud (GCC), GCC High, and Department of Defense (DOD)](~/concepts/app-fundamentals-overview.md#government-community-cloud) environments. ++## AI label ++An AI label added to your bot message specifies that the message is generated by AI. AI bots use Large Language Models (LLMs) that are generally reliable, however, adding an AI label prevents confusion about the source of the information. +++### Add AI label ++For a bot built using **Teams AI library**, an AI label is automatically enabled for all AI-powered bot messages in the `ai` module within the `PredictedSayCommand` action. For more information, see [AIEntity interface](https://github.com/microsoft/teams-ai/blob/main/js/packages/teams-ai/src/actions/SayCommand.ts#L15). ++If you're using **Microsoft Bot Framework SDK** to build your bot, include `additionalType` under the `entities` array of the `message` entity object. Following is an example code snippet: ++```javascript +await context.sendActivity({ + type: ActivityTypes.Message, + text: `Hey! I'm a friendly AI bot. This message is generated by AI.`, + entities: [ + { + type: "https://schema.org/Message", + "@type": "Message", + "@context": "https://schema.org", + additionalType: ["AIGeneratedContent"], // Enables AI label + } + ] +}); +``` ++| Property | Type | Required | Description | +|--|--|--|--| +| `additionalType` | Array | Yes | Enables the AI label in the bot message. The only allowed value is `AIGeneratedContent`. | ++After an AI label is added, your bot’s message displays an **AI generated** label next to the bot’s name with a hover-over disclaimer stating, **AI-generated content may be incorrect**. The AI label and disclaimer can't be customized for AI-powered bots. ++### Error handling ++| Error code | Description | +| | | +| 400 | Multiple root message entities found under `entities` array | +| 400 | Error parsing message entity from `entities` array | ++## Citations ++It's important to cite the sources of the bot message to help users ask follow-up questions or conduct independent research. Cite data sources, such as files, messages, emails, and work items, to provide valuable insights to users. Citations are important for bots using techniques such as Retrieval Augmented Generation (RAG). +++Citations to your bot message include in-text citations, details to citation reference, and sensitivity labels for the content referenced. ++* **In-text citations** denote the citation numbers added to the bot message in the [#] format, each corresponding to a reference. A citation can be inserted anywhere within the text. +* **Details to citation reference** include the title, keywords, an abstract, hyperlink, and sensitivity information. References appear as pop-up windows for each in-text citation. +* **Sensitivity labels to citations** indicate the confidentiality of the citation content referenced and aren't added automatically. To add sensitivity labels for citations, see [add sensitivity label](#add-sensitivity-label). ++> [!NOTE] +> +> * A maximum of 10 citations are displayed in a message. +> * Adaptive Cards aren't rendered in the citation pop-up window. However, Adaptive Cards can be rendered in the bot's message. ++### Add citations ++For bots built using **Teams AI library**, citations are added to an AI bot message automatically through `PredictedSayCommand` action. You can also modify the `PredictedSayCommand` action to add citations to your bot message. For more information, see [ClientCitation interface](https://github.com/microsoft/teams-ai/blob/main/js/packages/teams-ai/src/actions/SayCommand.ts#L46). ++If you're using **Bot Framework SDK** to build your bot, include `citation` under the `entities` array. Following is an example code snippet: ++```javascript +await context.sendActivity({ + type: ActivityTypes.Message, + text: `Hey I'm a friendly AI bot. This message is generated through AI [1]`, // cite with [1], + entities: [ + { + type: "https://schema.org/Message", + "@type": "Message", + "@context": "https://schema.org", + citation: [ + { + "@type": "Claim", + position: 1, // Required. Must match the [1] in the text above + appearance: { + "@type": "DigitalDocument", + name: "AI bot", // Title + url: "https://example.com/claim-1", // Hyperlink on the title + abstract: "Excerpt description", // Appears in the citation pop-up window + keywords: ["keyword 1", "keyword 2", "keyword 3"], // Appears in the citation pop-up window + }, + }, + ], + }, +], +}) +``` ++| Property | Type | Required | Description | +|--|--|--|--| +| `citation` | Object | Yes | Details of the citation. | +| `citation.@type` | String | Yes | Object of the citation. The only allowed value is `Claim`. | +| `citation.position` | Integer | Yes | Displays the citation number. The values are limited to less than eight. | +| `citation.appearance` | Object | Yes | Information about the appearance of the citation. | +| `citation.appearance.@type` | String | Yes | Object of the citation appearance. The only allowed value is `DigitalDocument`. | +| `citation.appearance.name` | String | Yes | Title of the referenced content. | +| `citation.appearance.url` | String | No | URL of the referenced content. | +| `citation.appearance.abstract` | String | No | Extract of the referenced content and is limited to less than 1,000 characters. | +| `citation.appearance.keywords` | Array | No | Keywords from the referenced content. You can't add more than three keywords. | ++After you enable citations, the bot message includes in-text citations and references. The in-text citations display the reference details when users hover over the citation. ++### Error handling ++| Error code | Description | +| | | +| 400 | Multiple root message entities found under `entities` array | +| 400 | Error parsing message entity from `entities` array | +| 400 | Bot message with more than 10 citations | +| 400 | The `appearance` object is empty | +| 400 | Error while parsing citation entity with ID: X | ++## Feedback buttons ++Feedback buttons in bot messages are crucial for measuring user engagement, identifying errors, and gaining insights into your bot's performance. These insights can lead to targeted and effective enhancements of your bot’s conversational capabilities. Enable feedback buttons to allow users to like or dislike messages and provide detailed feedback. +++When the user selects a feedback button, a respective feedback form appears based on the user's selection. +++Feedback buttons are located at the footer of the bot’s message, and include a 👍 (thumbs up) and a 👎 (thumbs down) button for the user to choose from. You can collect feedback on bot responses from one-on-one and group chats. ++### Add feedback buttons ++For a bot built using **Teams AI library**, Teams enables feedback buttons to all bot messages when `enable_feedback_loop` is set to `true` in the `ai` module. ++```javascript +export const app = new Application<ApplicationTurnState>({ + ai: { + planner: planner, + enable_feedback_loop: true + }, +``` ++For more information, see the [const app variable](https://github.com/microsoft/teams-ai/blob/main/js/samples/04.ai-apps/h.datasource-azureOpenAI/src/app.ts#L42). ++After you enable feedback buttons, all SAY commands from the bot have `feedbackLoopEnabled` automatically set to `true` in the `channelData` object. ++To enable feedback buttons in a bot built using **Bot Framework SDK**, add a `channelData` object in your bot message and set the value of `feedbackLoopEnabled` to `true`. ++```javascript +await context.sendActivity({ + type: ActivityTypes.Message, + text: `Hey! I'm a friendly AI bot!`, + channelData: { + feedbackLoopEnabled: true // Enable feedback buttons + }, +}); +``` ++| Property | Type | Required | Description | +|--|--|--|--| +| `feedbackLoopEnabled` | Boolean | Yes | Enables feedback buttons in the bot's message | ++### Handle feedback ++The bot receives the user's input, received in the feedback form, through a bot invoke flow. ++For a bot built using **Teams AI library**, the bot invoke received is automatically handled. To handle feedback, use the `app.feedbackLoop` method to register a feedback loop handler called when the user provides feedback. ++```javascript +app.feedbackLoop(async (context, state, feedbackLoopData) => { + // custom logic here... +}); +``` ++For more information, see the [asynchronous callback function](https://github.com/microsoft/teams-ai/blob/main/js/samples/04.ai-apps/h.datasource-azureOpenAI/src/app.ts#L95). ++For a bot built using **Bot Framework SDK**, you must have an `onInvokeActivity` handler to process the feedback. Ensure that you return a status code 200 with an empty JSON object as a response. ++The following code snippet shows how to handle feedback received in a bot invoke and return a response with the status code 200: ++```javascript +public async onInvokeActivity(context: TurnContext): Promise<InvokeResponse> { + try { + switch (context.activity.name) { + case "message/submitAction": + console.log('Your feedback is ' + JSON.stringify(context.activity.value)) + // Your feedback is {"actionName":"feedback","actionValue":{"reaction":"like","feedback":"{\"feedbackText\":\"This is my feedback.\"}"}} + return CreateInvokeResponse(200, {}); + default: + return { + status: 200, + body: `Unknown invoke activity handled as default- ${context.activity.name}`, + }; + } + } catch (err) { + console.log(`Error in onInvokeActivity: ${err}`); + return { + status: 500, + body: `Invoke activity received- ${context.activity.name}`, + }; + } + } ++ export const CreateInvokeResponse = ( + status: number, + body?: unknown + ): InvokeResponse => { + return { status, body }; + }; +``` ++It’s important to store feedback after you receive it. Hence, ensure that you store the message IDs and the content of the messages that your bot sends and receives. When your bot receives an invoke containing feedback, match the message ID of the bot’s message with the corresponding feedback. ++> [!NOTE] +> Teams neither stores nor processes feedback, nor does it provide an API or a storage mechanism. ++If a user uninstalls your bot and still has access to the bot chat, Teams removes the feedback buttons from the bot messages to prevent the user from providing feedback to the bot. ++### Error handling ++| Error code | Description | +| | | +| 400 | `message/submitAction` invoke response isn't empty. | ++## Sensitivity label ++Bot responses might contain information that's confidential or only accessible to certain individuals within the organization. You must add a sensitivity label to help users identify the confidentiality of a message, enabling them to exercise caution when sharing the message. +++> [!NOTE] +> Add a sensitivity label to your bot's messages only when they contain sensitive information. ++### Add sensitivity label ++For bots built using **Teams AI library**, sensitivity labels can be added through `PredictedSayCommand` action. For more information, see [SensitivityUsageInfo interface](https://github.com/microsoft/teams-ai/blob/main/js/packages/teams-ai/src/actions/SayCommand.ts#L107). ++For bots built using **Bot Framework SDK**, add a sensitivity label to your bot message by modifying the message to include `usageInfo` in the `entities` object. ++The following code snippet shows how to add sensitivity labels to both bot messages and citation reference: ++# [Bot message](#tab/botmessage) ++```javascript +await context.sendActivity({ + type: ActivityTypes.Message, + text: `Hey, I'm a friendly AI bot. This message is generated through AI [1]`, + entities: [ + { + type: "https://schema.org/Message", + "@type": "Message", + "@context": "https://schema.org", + usageInfo: { + "@type": "CreativeWork", + name: "Sensitivity title", + description: "Sensitivity description", + }, + }, + ], +}); +``` ++# [Citation reference](#tab/citationref) ++```javascript +await context.sendActivity({ + type: ActivityTypes.Message, + text: `Hey, I'm a friendly AI bot. This message is generated through AI [1]`, + entities: [ + { + type: "https://schema.org/Message", + "@type": "Message", + "@context": "https://schema.org", + usageInfo: { + "@type": "CreativeWork", + name: "Sensitivity title", + description: "Sensitivity description", + }, + citation: [ + { + "@type": "Claim", + position: 1, + appearance: { + "@type": "DigitalDocument", + name: "AI bot", + url: "https://example.com/claim-1", + usageInfo: { + "@type": "CreativeWork", + "@id": "sensitivity1", + name: "Sensitivity title", + description: "Sensitivity description", + }, + }, + }, + ], + }, + ], +}); +``` ++++| Property | Type | Required | Description | +|--|--|--|--| +| `usageInfo.@type` | String | Yes | Enables the sensitivity label in the bot message. | +| `citation.usageInfo.@id` | String | Yes | Enables the sensitivity label in the citation reference. It's required when adding sensitivity label to citation reference. | +| `usageInfo.name` | String | Yes | Specifies the title of the sensitivity label. | +| `usageInfo.description` | String | No | Specifies the pop-up window message that appears when a user hovers over the sensitivity label. | ++After the sensitivity label is added, your bot message contains a shield icon. Users can hover over the icon to find a disclaimer on the sensitivity of the message. ++### Error handling ++| Error code | Description | +| | | +| 400 | Multiple root message entities found under `entities` array | +| 400 | Error parsing message entity from `entities` array | +| 400 | Citation level `usageInfo.@id` value doesn't match the message level `usageInfo.@id` in at least one instance | +| 400 | There are multiple citation-level `usageInfo` properties with the same `@id`, but their `name` and `description` properties are different. | ++## Modify `PredictedSayCommand` ++For a bot built using Teams AI library, the `PredictedSayCommand` provides control on how AI label, citations, feedback buttons, and sensitivity labels are added to the bot's activity. Following is the code snippet to modify `PredictedSayCommand`: ++```JavaScript +app.ai.action<PredictedSayCommand>(AI.SayCommandActionName, async (context, state, data, action) => { + // custom logic here... + await context.sendActivity(data.content); + return ""; +}); +``` ++For more information about `PredictedSayCommand`, see [PredictedSayCommand interface](/javascript/api/%40microsoft/teams-ai/predictedsaycommand?view=msteams-client-js-latest&preserve-view=true). ++## Code sample ++| Sample name | Description | Node.js | C# | +|:--|--|--| +| Teams conversation bot | This sample app displays the AI label, citations, feedback buttons, and sensitivity labels in messages. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs) | | +| TeamsAzureOpenAI | This conversational bot uses Teams AI library and contains the AI label, feedback buttons, sensitivity label, and citations in its generated messages. | | [View](https://github.com/microsoft/teams-ai/tree/main/dotnet/samples/08.datasource.azureopenai) | ++## See also ++* [Bot activity handlers](../bot-basics.md) +* [Format your bot messages](format-your-bot-messages.md) +* [Get started with Teams AI library](Teams%20conversational%20AI/how-conversation-ai-get-started.md) |
platform | Format Your Bot Messages | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/format-your-bot-messages.md | The following table provides a list of styles, which are supported on desktop, i | Hyperlink | ✔️ | ✔️ | ✔️ | | Image link | ❌ | ❌ | ❌ | -### Cards +## AI-generated content messages -For card support, see [card formatting](~/task-modules-and-cards/cards/cards-format.md). +AI labels, citations, feedback buttons, and sensitivity labels in your bot’s messages improve user engagement and foster transparency and trust. ++* [AI label](format-ai-bot-messages.md#ai-label) enables users to identify that the message was generated using AI. +* [Citations](format-ai-bot-messages.md#citations) enables users to refer to the source of the bot's message through in-text citations and references. +* [Feedback buttons](format-ai-bot-messages.md#feedback-buttons) enables users to provide positive or negative feedback to the bot's messages. +* [Sensitivity label](format-ai-bot-messages.md#sensitivity-label) enables users to understand the confidentiality of the bot's message. ++For more information, see [bot messages with AI-generated content](format-ai-bot-messages.md). ## Next step For card support, see [card formatting](~/task-modules-and-cards/cards/cards-for * [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)+* [Format cards in Teams](../../task-modules-and-cards/cards/cards-format.md) |
platform | Develop Your Apps With Teams Toolkit | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/develop-your-apps-with-teams-toolkit.md | Title: Develop your apps with Teams Toolkit -description: Learn how to integrate your app from Teams Developer Portal to Teams Toolkit in Visual Studio Code and Visual Studio. +description: Learn how to integrate your app from Teams Developer Portal to Teams Toolkit in Microsoft Visual Studio Code and Visual Studio. ms.localizationpriority: medium |
platform | Manage Your Apps In Developer Portal | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/manage-your-apps-in-developer-portal.md | Title: Manage Apps with Developer Portal -description: Learn how to configure, distribute, and manage your apps using the Developer Portal for Microsoft Teams. +description: Learn how to configure, develop, distribute, manage, validate against Microsoft's test cases, and publish your apps using the Developer Portal for Teams. ms.localizationpriority: medium |
platform | Prepare Your O365 Tenant | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/prepare-your-o365-tenant.md | Title: Prepare your Microsoft 365 tenant -description: In this module, learn how to get started with Teams in Microsoft 365 and create your development environment +description: Learn how to get started with Teams in Microsoft 365, enable Teams for your organization and custom app upload, and create your development environment. ms.localizationpriority: medium Last updated 01/31/2023 |
platform | Share To Teams From Personal App Or Tab | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-to-teams-from-personal-app-or-tab.md | Title: Share to Teams from personal app or tab -description: Learn how to enable the Share to Teams button on your personal app or tab, limitations, and end user experience. +description: Learn how to enable the Share to Teams button on your personal app or tab, limitations, response codes, and end user experience. ms.localizationpriority: medium Last updated 12/13/2022 |
platform | Share To Teams From Web Apps | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-to-teams-from-web-apps.md | Title: Share to Teams from web apps -description: Learn to add the Share to Teams embedded button on your website, with a website preview, using Code samples +description: Learn to add the Share to Teams embedded button on third-party websites, with a website preview, using launcher script and code samples. ms.localizationpriority: medium Last updated 07/22/2022 |
platform | Share To Teams Overview | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-to-teams-overview.md | Title: Share to Teams overview -description: Learn share to Teams overview and where you can create share-to-teams button in the Teams apps and tab apps. +description: Learn how to create Share to Teams button for web apps and personal app or tab, and where to add it in the Microsoft Teams apps and tab apps. ms.localizationpriority: medium Last updated 02/09/2023 |
platform | Tool Sdk Overview | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/tool-sdk-overview.md | Title: Tools and SDKs -description: In this article, learn more about the tools and SDKs available for building your Microsoft Teams app. +description: Learn more about the tools such as Teams Toolkit, Yeoman generator for Teams, Teams Toolkit CLI, Developer Portal, and SDKs available for building your Teams app. ms.localizationpriority: medium The following flow diagram explains the different SDKs, libraries, and its relat | -- | -- | -- | | [Adaptive cards](../../task-modules-and-cards/cards/cards-reference.md#adaptive-card) | An Adaptive Card is a customizable card that can contain any combination of text, speech, images, buttons, and input fields. | :::image type="icon" source="../../assets/icons/yellow-dot.png" border="false"::: You can use it with **TeamsFx SDK**, **Teams JavaScript client library**, and **SharePoint Framework (SPFx)**. | | [Fluent UI React components](https://react.fluentui.dev/?path=/docs/concepts-introduction--page) | Fluent UI React components are a collection of UI elements and tools that come from combining various React-based component libraries used in production, like `@fluentui/react` and `@fluentui/react-northstar`. | :::image type="icon" source="../../assets/icons/yellow-dot.png" border="false"::: You can use it with **Teams JavaScript client library** and **SharePoint Framework (SPFx)**. |-| [Fluid Framework](https://fluidframework.com/docs/) | Fluid Framework consists of client libraries that help distribute and synchronize shared state. These libraries enable multiple clients to simultaneously create and operate on shared data structures using coding patterns similar to those used to work with local data. | :::image type="icon" source="../../assets/icons/red-dot.png" border="false"::: You can pass the reference to **Live Share SDK**. </br> :::image type="icon" source="../../assets/icons/grey-dot.png" border="false"::: Based on **Azure Fluid Relay**. | +| [Fluid Framework](https://fluidframework.com/docs) | Fluid Framework consists of client libraries that help distribute and synchronize shared state. These libraries enable multiple clients to simultaneously create and operate on shared data structures using coding patterns similar to those used to work with local data. | :::image type="icon" source="../../assets/icons/red-dot.png" border="false"::: You can pass the reference to **Live Share SDK**. </br> :::image type="icon" source="../../assets/icons/grey-dot.png" border="false"::: Based on **Azure Fluid Relay**. | <a name='azure-ad-secured-services-and-apis'></a> |
platform | Add Default Install Scope | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/add-default-install-scope.md | To configure the default install scope in your app manifest: Configure the default capability when your app is installed for a team, meeting, or groupchat. For more information, see [app manifest](../../resources/schem#defaultgroupcapability). > [!NOTE]-> `defaultGroupCapability` provides the default capability that will be added to the team, groupchat, or meeting. Select a tab, bot, or connector as the default capability for your app, but you must ensure that you have provided the selected capability in your app definition. +> `defaultGroupCapability` provides the default capability that's added to the team, group chat, or meeting. Select a tab, bot, or connector as the default capability for your app, but you must ensure that you have provided the selected capability in your app definition. To configure details in app manifest: |
platform | App Growth Lifecycle | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/app-growth-lifecycle.md | Title: Growth lifecycle for your app -description: Learn to plan growth lifecycle for your Teams app. +description: Learn to plan growth lifecycle for your Teams app, review the Teams partners GTM guide, and best practices for app growth and adoption. ms.localizationpriority: high |
platform | Build App | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/build-app.md | Title: Build Stage for Collaborative Apps -description: Learn what you can do during the build stage of your app to grow your app. +description: Learn to build your collaborative app, what you can do during the build stage of your app to grow your app, and where can Microsoft help. ms.localizationpriority: high |
platform | Gain Traction | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/gain-traction.md | Title: Accelerate Market Traction for App -description: Learn what you can do during the traction stage of your app to grow your app. +description: Learn what you can do during the traction stage of your app to grow your app such as plan, build readiness, and drive adoption among customers. ms.localizationpriority: high |
platform | Scale App | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/scale-app.md | Ensure that you [instrument code and track analytics](../../../../design/overvie <details> <summary>Coactivation in mutually identified existing customers</summary> -Microsoft will evaluate coactivation opportunities in large customer accounts. Evaluation is based on customer interest, adoption opportunity (sold seat size in customer account), and so on, among other criteria. +Microsoft evaluates coactivation opportunities in large customer accounts. The evaluation is based on customer interest, adoption opportunity (sold seat size in customer account), and so on, among other criteria. </details> <br> <details> <summary>Support joint customer success story development</summary> -Connect with the [ISV Marketplace Success Rewards Program team](mailto:rewards@microsoft.com) to seek guidance and execute. You'll be able to utilize Microsoft slide templates, customer story intake form, customer interview template, and vendor video production, or copy writing services. Introduce a creative team to the customer. Help facilitate the interviews and review processes until the story is approved by all parties. Microsoft team will make sure your customer story is published to the internal Microsoft Teams Platform Resource Library and the Transformed by Teams portal. +Connect with the [ISV Marketplace Success Rewards Program team](mailto:rewards@microsoft.com) to seek guidance and execute. You'll be able to utilize Microsoft slide templates, customer story intake form, customer interview template, and vendor video production, or copy writing services. Introduce a creative team to the customer. Help facilitate the interviews and review processes until the story is approved by all parties. Microsoft team ensures that your customer story is published to the internal Microsoft Teams Platform Resource Library and the Transformed by Teams portal. </details> <br> |
platform | Succeed | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/succeed.md | Impactful case studies of how investing in a collaborative app resulted in growt <details> <summary>Expand customer coactivation and joint new pitches</summary> -Microsoft will evaluate coactivation opportunities in large customer accounts based on customer interest, adoption opportunity (sold seat size in customer account), and so on, among other criteria. Get in touch with your Microsoft field, account, or engineering representatives to discuss potential joint customer pitches in large customer accounts. +Microsoft evaluates coactivation opportunities in large customer accounts based on customer interest, adoption opportunity (sold seat size in customer account), and so on, among other criteria. Get in touch with your Microsoft field, account, or engineering representatives to discuss potential joint customer pitches in large customer accounts. </details> <br> <details> <summary>Get included in Microsoft exec blog or flagship event endorsement</summary> -Get the power of the Microsoft executive team behind your next leadership blog or event. Review your plans for blogs or events in which you'll be participating. Develop ideas on how a Microsoft executive can help to promote your commercial marketplace offer in a blog or at an event. Reach out to the [ISV Marketplace Success Rewards Program team](mailto:rewards@microsoft.com) to request Microsoft executive endorsement. If eligible, the team will work with you to find a Microsoft executive (Director level or higher) to help endorse your Teams collaborative app available on the marketplace. +Get the power of the Microsoft executive team behind your next leadership blog or event. Review your plans for blogs or events in which you'll be participating. Develop ideas on how a Microsoft executive can help to promote your commercial marketplace offer in a blog or at an event. Reach out to the [ISV Marketplace Success Rewards Program team](mailto:rewards@microsoft.com) to request Microsoft executive endorsement. If eligible, the team works with you to find a Microsoft executive (Director level or higher) to help endorse your Teams collaborative app available on the marketplace. </details> <br> |
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 ## 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). +When someone finishes buying a subscription plan for your app in the Teams Store, the commercial marketplace directs them to your landing page where they can manage the subscription (such as assign a license to a specific user in their org). For complete instructions, see [build the landing page for your SaaS offer](/azure/marketplace/azure-ad-transactable-saas-landing-page). YouΓÇÖve created your SaaS offer and linked it to your Teams appΓÇönow it's time > * Even if your app is already listed on the Teams Store, you still must go through the Teams Store validation process again to include your SaaS offer. > * Flat rate offers created without the Offer ID and Publisher ID in the app manifest should be updated and resubmitted for validation. -Once published, users will see a **Buy a subscription** option in the app details dialog when they try to add your app to Teams. +Once published, users see a **Buy a subscription** option in the app details dialog when they try to add your app to Teams. ## Remove a SaaS offer from your app |
platform | Submission Checklist | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/submission-checklist.md | Depending on your app functionality, you're required to provide Teams tenant con * Provide at least one account that isn't pre-configured to test the first-run sign-in experience properly. > [!NOTE]- > These accounts must be utilized only for validation requirements. The validation team will test your app fully, including first-run user experience. - > If your app is free for all users and anyone who intends to use your app can sign up to use it, indicate the same in the test notes. The validation team will use the sign up process as described. + > These accounts must be utilized only for validation requirements. The validation team tests your app fully, including first-run user experience. + > If your app is free for all users and anyone who intends to use your app can sign up to use it, indicate the same in the test notes. The validation team uses the sign up process as described. 3. **Test Notes**: The notes provide details about your app's capabilities in Teams and the steps for testing each one. It helps the validation team to understand your app better and complete the testing for all functionalities in your app. If your app functionality includes event-based notifications, list the instructions to trigger these events. For time-based notifications, indicate the expected time for receiving these notifications. |
platform | Location Capability | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/location-capability.md | For more information on `getLocation` and `showLocation`, see [LocationProps](/j * **Call `getLocation` API to retrieve the location:** -```javascript -import {location} from "@microsoft/teams-js" --let locationProps = {"allowChooseLocation":true,"showMap":true}; -if(location.isSupported()) { - microsoftTeams.location.getLocation(locationProps, (error, location) => { - // If there's any error, an alert shows the error message/code - if (error) { - if (error.message) { + ```javascript + import {location} from "@microsoft/teams-js" ++ let locationProps = {"allowChooseLocation":true,"showMap":true}; + if(location.isSupported()) { + microsoftTeams.location.getLocation(locationProps, (error, location) => { + // If there's any error, an alert shows the error message/code + if (error) { + if (error.message) { alert(" ErrorCode: " + error.errorCode + error.message);- } else { + } else { alert(" ErrorCode: " + error.errorCode); } } console.log(JSON.stringify(location)); })-} -else {/*Handle case where capability isn't supported */} -``` + } + else {/*Handle case where capability isn't supported */} + ``` * **Call `showLocation` API to display the location:** -```javascript -import {location} from "@microsoft/teams-js" --let location = {"latitude":17,"longitude":17}; -if(location.isSupported()) { - microsoftTeams.location.showLocation(location, (error, result) => { - if (error) { - if (error.message) { - alert(" ErrorCode: " + error.errorCode + error.message); - } else { - alert(" ErrorCode: " + error.errorCode); - } - } - }); -} -else {/*Handle case where capability isn't supported */} -``` + ```javascript + import {location} from "@microsoft/teams-js" ++ let location = {"latitude":17,"longitude":17}; + if(location.isSupported()) { + microsoftTeams.location.showLocation(location, (error, result) => { + if (error) { + if (error.message) { + alert(" ErrorCode: " + error.errorCode + error.message); + } else { + alert(" ErrorCode: " + error.errorCode); + } + } + }); + } + else {/*Handle case where capability isn't supported */} + ``` # [TeamsJS v1](#tab/teamsjs-v1) * **Call `getLocation` API to retrieve the location:** -```javascript -let locationProps = {"allowChooseLocation":true,"showMap":true}; -microsoftTeams.location.getLocation(locationProps, (err: microsoftTeams.SdkError, location: microsoftTeams.location.Location) => { + ```javascript + let locationProps = {"allowChooseLocation":true,"showMap":true}; + microsoftTeams.location.getLocation(locationProps, (err: microsoftTeams.SdkError, location: microsoftTeams.location.Location) => { if (err) { output(err); return; } output(JSON.stringify(location));-}); -``` + }); + ``` * **Call `showLocation` API to display the location:** -```javascript -let location = {"latitude":17,"longitude":17}; -microsoftTeams.location.showLocation(location, (err: microsoftTeams.SdkError, result: boolean) => { + ```javascript + let location = {"latitude":17,"longitude":17}; + microsoftTeams.location.showLocation(location, (err: microsoftTeams.SdkError, result: boolean) => { if (err) { output(err); return; } output(result);-}); -``` + }); + ``` |
platform | Native Device Permissions | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/native-device-permissions.md | 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) --```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) --```JavaScript - function getLocation() { - microsoftTeams.location.getLocation({ allowChooseLocation: true, showMap: true }, (error: microsoftTeams.SdkError, location: microsoftTeams.location.Location) => { - let currentLocation = JSON.stringify(location); - }); - } -``` --*** + # [TeamsJS v2](#tab/teamsjs-v2) + + ```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) + + ```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. |
platform | Virtual Tables Api | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/virtual-tables-api.md | With the virtual tables, you can use the OData $orderby query parameter to set c * Graph Event > [!NOTE]-> Sorting is not supported on all the attributes of the respective Graph resources. If a user tries to sort on a virtual table with an unsupported attribute, this result set will have its default order. This is the same behaviour as the Dataverse Web API on columns that don't support sorting. +> Sorting is not supported on all the attributes of the respective Graph resources. If a user tries to sort on a virtual table with an unsupported attribute, the result set maintains its default order. This is the same behaviour as the Dataverse Web API on columns that don't support sorting. Examples: |
platform | Virtual Tables For Tasks | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/virtual-tables-for-tasks.md | HTTP/1.1 204 No Content > [!NOTE]-> You can set the `If-Match` header to be '*' and then you'll not need to provide any etag values, but your changes will always overwrite the task and itΓÇÖs details. +> You can set the `If-Match` header to be '*' and then you won't need to provide any etag values, but your changes will always overwrite the task and itΓÇÖs details. ## Virtual tables authorization |
platform | Using Fluid Msteam | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/using-fluid-msteam.md | For more information on building complex applications, see [FluidExamples](https This tutorial requires familiarity with the following concepts and resources: -- [Fluid Framework Overview](https://fluidframework.com/docs/)+- [Fluid Framework Overview](https://fluidframework.com/docs) - [Fluid Framework QuickStart](https://fluidframework.com/docs/start/quick-start/) - The basics of [React](https://reactjs.org/) and [React Hooks](https://reactjs.org/docs/hooks-intro.html) - How to build a [Microsoft Teams Tab](/microsoftteams/platform/tabs/what-are-tabs) npx @fluidframework/azure-local-service@latest To run and start the Teams application, open another terminal, and follow the [instructions to run the application server](create-channel-group-tab.md#upload-your-application-to-teams). > [!WARNING]-> HostNames with `ngrok`'s free tunnels are not preserved. Each run will generate a different URL. When a new `ngrok` tunnel is created, the older container will no longer be accessible. For production scenarios, see [use AzureClient with Azure Fluid Relay](#use-azureclient-with-azure-fluid-relay). +> HostNames with `ngrok`'s free tunnels are not preserved. Each run generates a different URL. When a new `ngrok` tunnel is created, the older container will no longer be accessible. For production scenarios, see [use AzureClient with Azure Fluid Relay](#use-azureclient-with-azure-fluid-relay). > [!NOTE] > Install an additional dependency to make this demo compatible with Webpack 5. If you receive a compilation error related to a "buffer" package, run `npm install -D buffer` and try again. This will be resolved in a future release of Fluid Framework. tokenProvider: new InsecureTokenProvider(JSON.parse(process.env.REACT_APP_TENANT - [Azure Fluid Relay documentation](/azure/azure-fluid-relay) -- [Fluid Framework documentation](https://fluidframework.com/docs/)+- [Fluid Framework documentation](https://fluidframework.com/docs) - [Fluid examples GitHub Repo](https://github.com/microsoft/FluidExamples) |
platform | Teams Faq | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/teams-faq.md | Live Share supports scheduled meetings, one-on-one calls, group calls, and meet <details> <summary>Will Live Share's media package work with DRM content?</summary> -Live Share's media package work doesn't with DRM content. Teams doesn't support encrypted media for tab applications on desktop. Chrome, Edge, and mobile clients are supported. +Live Share's media package doesn't work with DRM content. Teams doesn't support encrypted media for tab applications on desktop. Chrome, Edge, and mobile clients are supported. For more information, you can [track the issue here](https://github.com/microsoft/live-share-sdk/issues/14). <br> After the app passes the proactive validation, developers of both existing and n <summary> How are new plugins certified?</summary> -Developers will be encouraged to certify their new plugin after successfully completing validation. +Developers are encouraged to certify their new plugin after successfully completing validation. </details> <details> <summary>How can I create or upgrade a message extension plugin for Copilot for Microsoft 365?</summary> |
platform | Teams Toolkit CLI | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/Teams-Toolkit-CLI.md | zone_pivot_groups: toolkit-cli > [!IMPORTANT] > > * Teams Toolkit CLI v3 is available in beta version.-> * We recommend that you use Teams Toolkit CLI v3 to build your Teams app. TeamsFx CLI v1 and TeamsFx CLI v2 will soon be deprecated. +> * We recommend that you use Teams Toolkit CLI v3 to build your Teams app. TeamsFx CLI v1 and TeamsFx CLI v2 are soon deprecated. Microsoft Teams Toolkit command line interface (Teams Toolkit CLI) is a text-based command line interface that accelerates Microsoft Teams application development. It aims to provide keyboard centric experience while building Teams applications. For more information, see [source code](https://github.com/OfficeDev/TeamsFx/tree/dev/packages/cli) and [npm package](https://www.npmjs.com/package/@microsoft/teamsfx-cli). |
platform | Publish Your Teams Apps Using Developer Portal | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/publish-your-teams-apps-using-developer-portal.md | The following steps help to publish your app in Developer Portal: :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/select-your-teams-app-package.png" alt-text="Screenshot showing the selection of zip Teams app package."::: -1. Sign in to [Developer Portal for Teams](https://dev.teams.microsoft.com/home) using the corresponding account. Teams Toolkit opens your selected Teams app's page. -1. Go to **Publish** > **Publish to store**. +1. Sign in to [Developer Portal for Teams](https://dev.teams.microsoft.com/home) using the corresponding account. +1. Teams Toolkit opens your selected Teams app's page and navigate to the **Publish** > **Publish to store** page. 1. Select **Publish** > **Publish to your org**. :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/publish-to-your-org.png" alt-text="Screenshot showing the selection of publish to your org."::: |
platform | Debug Background Process V4 | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/toolkit-v4/debug-background-process-v4.md | The tunnel creation dialog opens. * From the dropdown, select the required public authentication in **Access**. * Select **OK**. Visual Studio displays confirmation of tunnel creation. -The tunnel you have created will be under **Dev Tunnels(MyPublicDevTunnel)** > **MyPublicDevTunnel**. +The tunnel you create is under **Dev Tunnels(MyPublicDevTunnel)** > **MyPublicDevTunnel**. :::image type="content" source="../../assets/images/teams-toolkit-v2/teams-toolkit-vs/vs-select-devtunnel.png" alt-text="Screenshot shows how to select dev tunnel."::: |
platform | Debug Overview Vs | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/toolkit-v4/debug-overview-vs.md | Microsoft Teams Toolkit automates app startup services, initiates debugging, and Teams Toolkit automates the local debugging process for the following key features: -* Prepare Teams app dependencies: Teams Toolkit prepares local debug dependencies and registers your Teams app in your tenant account. For Bot and Message Extension apps, Teams Toolkit will register and configure bot. +* Prepare Teams app dependencies: Teams Toolkit prepares local debug dependencies and registers your Teams app in your tenant account. For Bot and Message Extension apps, Teams Toolkit registers and configures bot. * Start debugging: You can perform debugging with a single operation, press **F5** to start debugging. Teams Toolkit builds code, starts services, and launches the app in your browser. |
platform | Faq V4 | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/toolkit-v4/faq-v4.md | FAQ for [Provision cloud resources using Teams Toolkit](../provision.md) <summary><b>How to troubleshoot?</b></summary> -If you get errors with Teams Toolkit in Visual Studio Code, you can select **Get Help** on the error notification to go to the related document. If you're using TeamsFx CLI, there will be a hyperlink at the end of error message that points to the help doc. You can also view [provision help doc](https://aka.ms/teamsfx-arm-help) directly. +If you get errors with Teams Toolkit in Visual Studio Code, you can select **Get Help** on the error notification to go to the related document. If you're using TeamsFx CLI, a hyperlink appears at the end of the error message that directs you to the help doc. <br> |
platform | Use Existing Aad App | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/use-existing-aad-app.md | This section provides information for using existing Microsoft Entra app or manu ## Upload Microsoft Entra app manifest to Azure portal -If Teams Toolkit failed to update Microsoft Entra app, there will be an error that says: +If Teams Toolkit fails to update Microsoft Entra app, an error message appears: ```yml Insufficient privileges to complete the operation. |
platform | Connectors Creating | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/connectors-creating.md | You can execute an event handler when the user removes an existing connector con ### Include the connector in your app manifest -Download the auto-generated app manifest (previously called Teams app manifest) from the Developer Portal (<https://dev.teams.microsoft.com>). Perform the following steps, before testing or publishing the app: +Download the auto-generated app manifest (previously called Teams app manifest) from the [Developer Portal](https://dev.teams.microsoft.com). Perform the following steps, before testing or publishing the app: 1. [Include two icons](../../concepts/build-and-test/apps-package.md#app-icons). 1. Modify the `icons` portion in the app manifest file to include the file names of the icons instead of URLs. |
platform | Whats New | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md | Teams platform features that are available to all app developers. **2024 June** +* ***June 26, 2024***: [Introduced AI label, citations, feedback buttons, and sensitivity labels in bot messages.](bots/how-to/format-ai-bot-messages.md) * ***June 26, 2024***: [Debug message extension app in Test Tool.](toolkit/debug-message-extension-app-in-test-tool.md)- * ***June 24, 2024***: [Static tabs are generally available for chats, channels, and meetings.](tabs/what-are-tabs.md) :::column-end::: Discover Microsoft Teams platform features that are in developer preview. You ca | **Date** | **Update** | **Find here** | | -- | | -|+| May 23, 2024 | Leverage AI label, citations, feedback buttons, and sensitivity labels in your bot's messages. | Build bots > Bot conversations > [Format AI bot messages](bots/how-to/format-ai-bot-messages.md) | | May 23, 2024 | Enhance your Copilot message extension plugin to hand off a conversation to your custom engine copilot.| Build message extensions > Build message extensions using Bot Framework > Search commands > [Copilot handoff](bots/how-to/conversations/bot-copilot-handoff.md)| ## Developer preview |