Updates from: 05/01/2024 03:13:54
Service Microsoft Docs article Related commit history on GitHub Change details
platform Deep Links Execution Handling https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-links-execution-handling.md
You can configure your app to post messages to a chat and add deep links to them
When you add a deep link to a hyperlinked Markdown text message, it's triggered and opened within Teams. Following is an example:
-Example: `[App](https://teams.microsoft.com/l/app/{appId})`, where `appId` is your application ID. To know more about different app IDs used see, [App ID for different types of apps](deep-link-application.md#app-id-for-different-types-of-apps).
+Example: `[App](https://teams.microsoft.com/l/app/{appId})`, where `appId` is your application ID. For more information, see [app ID for different types of apps](deep-link-application.md#app-id-for-different-types-of-apps).
For more information, see [use Markdown formatting in Teams](https://support.microsoft.com/en-us/office/use-markdown-formatting-in-teams-4d10bd65-55e2-4b2d-a1f3-2bebdcd2c772).
For more information, see [use Markdown formatting in Teams](https://support.mic
When you add a deep link to a raw text message, it's triggered and opened within Teams. Following is an example:
-Example: `https://teams.microsoft.com/l/app/{appId}`, where `appId` is your application ID. To know more about different app IDs used see, [App ID for different types of apps](deep-link-application.md#app-id-for-different-types-of-apps).
+Example: `https://teams.microsoft.com/l/app/{appId}`, where `appId` is your application ID. For more information, see [app ID for different types of apps](deep-link-application.md#app-id-for-different-types-of-apps).
### Adaptive Card
platform Stageview Deep Link Query https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/stageview-deep-link-query.md
| Property name | Type | Character limit | Required | Description | | | | | | | | entityId | String | 64 | Optional | A unique ID of the entity that the tab displays. |
-| appId | String | 64 | Yes | The ID of the Teams app that's to be opened. |
+| appId | String | 64 | Yes | The ID of the Teams app that's to be opened. For more information, see [app ID for different types of apps](../concepts/build-and-test/deep-link-application.md#app-id-for-different-types-of-apps). |
| name | String | 128 | Optional | The display name of the tab in the channel interface. If no value is provided, the app name is displayed. | | contentUrl | String | 2048 | Yes | The https:// URL that points to the entity UI to be displayed in Teams. | | websiteUrl | String | 2048 | Yes | The https:// URL to point at, if a user selects to view in a browser. |
platform Api Based Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/api-based-overview.md
Update app manifest (previously called Teams app manifest) with the `composeExte
} ``` + ## Next step > [!div class="nextstepaction"]
platform Create Api Message Extension https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/create-api-message-extension.md
To test your API-based message extension created in the Developer Portal for Tea
# [Visual Studio Code](#tab/visual-studio-code) > [!NOTE]
-> Teams Toolkit support for API-based message extension is available only in Teams Toolkit pre-release version. Before you get started, ensure that you've installed a [Teams Toolkit pre-release version](../toolkit/install-Teams-Toolkit.md#install-a-pre-release-version)
+> Teams Toolkit support for API-based message extension is available only in Teams Toolkit pre-release version. Before you get started, ensure that you've installed a [Teams Toolkit pre-release version](../toolkit/install-Teams-Toolkit.md#install-a-pre-release-version).
-To build am API-based message extension using Teams Toolkit for Visual Studio Code, follow these steps:
+To build an API-based message extension using Teams Toolkit for Visual Studio Code, follow these steps:
1. Open **Visual Studio Code**. 1. From the left pane, Select **Teams Toolkit**.
To build am API-based message extension using Teams Toolkit for Visual Studio Co
# [New API](#tab/new-api)
+ > [!NOTE]
+ > The authentication flow for Microsoft Entra is only functional in remote environments. You can't test it in a local environment due to the lack of authentication support in Azure Function core tools. The repair API can be invoked anonymously in a local environment.
+ 1. Select the authentication type:
- * **None**
- * **API Key**
- * **Microsoft Entra**
+ * **None**: Select if you don't want any authentication for the user to access the API.
+ * **API Key**: Select if you want to authenticate using an API key.
+ * **Microsoft Entra**: Select if you want to authenticate using app user's Teams identity.
+
+ :::image type="content" source="../assets/images/Copilot/api-based-me-ttk-auth-type.png" alt-text="Screenshot shows the authentication options for API-based message extension.":::
1. Select a programming language.
To build am API-based message extension using Teams Toolkit for Visual Studio Co
1. Enter the name of your app and select **Enter**. Teams Toolkit creates a new plugin with API from Azure functions. 1. To get started, you must update the source code in the following files:
- |File |Contents |
- |||
- |`repair/function.json` |A configuration file that defines the functionΓÇÖs trigger and other settings. For more information, see [Azure Functions](/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=python-v2%2Cisolated-process%2Cnodejs-v4%2Cfunctionsv2&pivots=programming-language-csharp) |
- |`repair/index.ts` | The main file of a function in Azure Functions. |
- |`appPackage/apiSpecificationFiles/repair.yml` | A file that describes the structure and behavior of the repair API. |
- |`appPackage/responseTemplates/repair.json` | A generated Adaptive Card that used to render API response. |
- |`repairsData.json` | The data source for the repair API. |
+ | File | Contents |
+ | | |
+ | `src/functions/repair.ts` | The main file of a function in Azure Functions. Defines an Azure Function that retrieves and filters repair records based on a query parameter from an HTTP GET request, and returns the results as a JSON response. |
+ | `src/repairsData.json` | The data source for the repair API. |
+ | `src/keyGen.ts` | Designed to generate an API key used for authorization. |
+ | `appPackage/apiSpecificationFile/repair.yml` | A file that describes the structure and behavior of the repair API. |
+ | `appPackage/responseTemplates/repair.json` | A template file for rendering API response. |
+ | `teamsapp.yml` | The main Teams Toolkit project file. The project file defines two primary things: Properties and configuration Stage definitions.|
+ |`teamsapp.local.yml` | Overrides teamsapp.yml with actions that enable local execution and debugging.|
+ |`aad.manifest.json` | Defines the configuration of Microsoft Entra app. This template only provisions a single tenant Microsoft Entra app.|
+
+ 1. Based on the options selected in **step a**, follow these steps:
+
+ * If you've selected **none** or **Microsoft Entra**, skip to the next step.
+
+ * If you've selected API key, follow these steps:
+
+ Generate and set up your API key as follows:
+
+ 1. In Visual Studio Code, go to **View** > **Terminal**.
+ 2. Run the following command to install dependency packages:
+
+ ```
+ npm install
+ ```
+
+ 3. Run the following command to generate your API key:
+
+ ```
+ npm run keygen
+ ```
+
+ The API key is generated as **Generated a new API Key: xxx...**. The generated API key is registered and recorded in the [API key registration tool](https://dev.teams.microsoft.com/api-key-registration) in Developer portal for Teams. For more information on API key registration, see [Register an API key](build-api-based-message-extension.md#register-an-api-key).
+
+ 4. Enter the generated API key into your `env/.env.*.user` file. Replace `<your-api-key>` with the actual key:
+
+ ```
+ SECRET_API_KEY=<your-api-key>
+ ```
+
+ </details>
# [OpenAPI Description](#tab/openapi-specification)
To build am API-based message extension using Teams Toolkit for Visual Studio Co
:::image type="content" source="../assets/images/Copilot/api-based-me-ttk-plugin-copilot-openapi-spec-location.png" alt-text="Screenshot shows the option to select OpenAPI Description document location.":::
- 1. From the API list, select the GET API and select **OK**.
+ 1. From the API list, select the required APIs and select **OK**.
> [!NOTE]
- > GET and POST APIs are supported for API based message extensions.
+ > GET and POST APIs are supported for API-based message extensions.
1. Select **Default folder**. 1. Enter the name of your app and select **Enter**. Teams Toolkit scaffolds the OpenAPI Description document and created an API-based message extension.
+ 1. Under **LIFECYCLE**, select **Provision**.
+ 1. If your OpenAPI specification document has a security scheme `bearerAuth`, which uses the HTTP bearer scheme, enter the API key in the command window and select **Enter**.
+
+ :::image type="content" source="../assets/images/Copilot/api-based-me-ttk-api-key.png" alt-text="Screenshot shows the Enter API key command that appears in Teams Toolkit for Visual Studio Code.":::
+
+ > [!NOTE]
+ > The API key must be a string with 10 to 128 characters.
+ > [!NOTE]
+ > Teams toolkit source file includes a security check to ensure that an incoming request is authorized. It uses a function `isApiKeyValid(req)` to verify if the request contains a valid API key. If the API key isn't valid, the code returns an 401 HTTP status code, indicating an Unauthorized response.
+ 1. From the left pane, select **Teams Toolkit**. 1. Under **ACCOUNTS**, sign in with your [Microsoft 365 account](/microsoftteams/platform/toolkit/accounts) and Azure account if you haven't already.
To create an API-based message extension using Teams Toolkit for Visual Studio,
|File |Contents | |||
- |`repair.cs` | The main file of a function in Azure Functions. Defines an Azure Function that retrieves and filters repair records based on a query parameter from an HTTP GET request, and returns the results as a JSON response.|
+ |`Repair.cs` | The main file of a function in Azure Functions. Defines an Azure Function that retrieves and filters repair records based on a query parameter from an HTTP GET request, and returns the results as a JSON response.|
|`RepairData.cs`|The data source for the repair API. Contains a method that returns a hardcoded list of car repair tasks. | |`Models/RepairModel.cs`|Defines a data model that represents a repair task with properties such as ID, Title, Description, AssignedTo, Date, and Image.|
- |`appPackage/apiSpecificationFiles/repair.yml` | A file that describes the structure and behavior of the repair API.|
+ |`appPackage/apiSpecificationFile/repair.yml` | A file that describes the structure and behavior of the repair API.|
|`appPackage/responseTemplates/repair.json` | A generated Adaptive Card that used to render API response.|
+ |`appPackage/responseTemplates/repair.data.json` | The data source for the repair API.|
+ | `teamsapp.yml` | The main Teams Toolkit project file. The project file defines two primary things: Properties and configuration Stage definitions.|
+ |`teamsapp.local.yml` | Overrides teamsapp.yml with actions that enable local execution and debugging.|
1. After you've updated the source code, in the debug dropdown menu, select **Dev Tunnels (no active tunnel)** > **Create a Tunnel...**. :::image type="content" source="../assets/images/Copilot/bot-based-VS-dev-tunnel.png" alt-text="Screenshot shows the create a tunnel option in Visual Studio.":::
- 1. Select the account to create the tunnel. The supported account types are Azure, Microsoft Account (MSA), and GitHub.
+ 1. Select an account to create the tunnel. The supported account types are Azure, Microsoft Account (MSA), and GitHub.
1. **Name**: Enter a name for the tunnel. 1. **Tunnel Type**: Select **Persistent** or **Temporary**. 1. **Access**: Select **Public**. 1. Select **OK**. Visual Studio displays a confirmation message that a tunnel is created.
- The tunnel you've created is listed under **Dev Tunnels**.
+ The tunnel you created is listed under **Dev Tunnels**.
1. Go to **Solution Explorer** and select your project. 1. Right-click the menu and select **Teams Toolkit** > **Prepare Teams App Dependencies**.
platform Manifest Schema https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema.md
The name of your app experience, displayed to users in the Teams experience. For
|`short`|30 characters|✔️|The short display name for the app.| |`full`|100 characters|✔️|The full name of the app, used if the full app name exceeds 30 characters.|
+> [!NOTE]
+> In the app manifest v1.17 or later, the `full` property is mandatory and not required for app manifest v1.16.
+ ## description **Required** &ndash; Object
platform Tab Requirements https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/tab-requirements.md
Now let's build your tab. But first select your choice of tab to build:
* [Build your first tab app using JavaScript](../../sbs-gs-javascript.yml) * [Register your tab app in Microsoft Entra ID](authentication/tab-sso-register-aad.md) * [Tabs on mobile](~/tabs/design/tabs-mobile.md)
+* [Grant tab device permission in Teams](../../sbs-tab-device-permissions.yml)
* [Content Security Policy](/aspnet/core/blazor/security/content-security-policy)
platform What Are Tabs https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/what-are-tabs.md
You can have multiple channels or group tabs, and up to 16 static tabs per app.
* [Instrumenting for Teams app specific analytics](../concepts/design/overview-analytics.md#instrumenting-for-teams-app-specific-analytics) * [Extend tab app with Microsoft Graph permissions and scopes](how-to/authentication/tab-sso-graph-api.md) * [Microsoft Teams update](../resources/teams-updates.md)
+* [Grant tab device permission in Teams](~/sbs-tab-device-permissions.yml)
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 i
## Outgoing Webhooks
-Webhooks help Teams to integrate with external apps. With Outgoing Webhooks, you can send text messages from a channel to a web service. After configuring the Outgoing Webhooks, users can @mention Outgoing Webhook and send a message to a web service. The service responds within 10 seconds to the message with a text or a card.
+Webhooks help Teams to integrate with external apps. With Outgoing Webhooks, you can send text messages from a channel to a web service. After configuring the Outgoing Webhooks, users can @mention Outgoing Webhook and send a message to a web service. The service responds within 10 seconds to the message with a text or a card. For more information, see [create Outgoing Webhooks](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md).
> [!NOTE] > Outgoing Webhooks are configured on a per team basis and cannot be included as part of a normal Teams app.
Connectors allow users to subscribe to receive notifications and messages from t
### Incoming Webhooks
-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, that accepts correctly formatted JSON and inserts the messages to 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.
+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, that accepts correctly formatted JSON and inserts the messages to 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. For more information, see [create Incoming Webhooks](how-to/add-incoming-webhook.md#create-an-incoming-webhook).
#### Notification bot or Incoming Webhook
Before you start to learn how to build Incoming Webhooks, you may also want to k
### Connectors for Microsoft 365 Groups
-Connectors for Microsoft 365 Groups allow you to create a custom configuration page for your Incoming Webhook and package them as part of a Teams app. You send messages primarily using connector cards for Microsoft 365 Groups and can add a limited set of card actions to them. For example, a weather connector that allows users to select a location and any time of the day, to receive updates about tomorrow's weather. They're configured at channel level but are installed at team level.
+Connectors for Microsoft 365 Groups allow you to create a custom configuration page for your Incoming Webhook and package them as part of a Teams app. You send messages primarily using connector cards for Microsoft 365 Groups and can add a limited set of card actions to them. For example, a weather connector that allows users to select a location and any time of the day, to receive updates about tomorrow's weather. They're configured at channel level but are installed at team level. For more information, see [create connectors for Microsoft 365 Groups](~/webhooks-and-connectors/how-to/connectors-creating.md).
> [!NOTE] > You can distribute the connector for Microsoft 365 Groups Teams app to our AppStore. ## Create and send messages
-Actionable messages allow users to take action without leaving their email client, increasing user engagement. With Microsoft 365 and Incoming Webhooks, you can send messages by posting a JSON payload to the webhook URL.
-
-## Next step
-
-> [!div class="nextstepaction"]
-> [Create Outgoing Webhooks](~/webhooks-and-connectors/how-to/add-outgoing-webhook.md)
+Actionable messages allow users to take action without leaving their email client, increasing user engagement. With Microsoft 365 and Incoming Webhooks, you can send messages by posting a JSON payload to the webhook URL. For more information, see [create and send messages](~/webhooks-and-connectors/how-to/connectors-using.md).
## See also
-* [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 connectors for Microsoft 365 Groups](~/webhooks-and-connectors/how-to/connectors-creating.md)
-* [Create and send messages](~/webhooks-and-connectors/how-to/connectors-using.md)
+[App capabilities mapped to features](../concepts/design/map-use-cases.md#app-capabilities-mapped-to-features)