diff --git a/msteams-platform/bots/how-to/bot-configuration-experience.md b/msteams-platform/bots/how-to/bot-configuration-experience.md index d4af7c9ab28..92ec4a5d602 100644 --- a/msteams-platform/bots/how-to/bot-configuration-experience.md +++ b/msteams-platform/bots/how-to/bot-configuration-experience.md @@ -188,6 +188,32 @@ The following table lists the response type associated with the invoke requests: } ``` + # [Python](#tab/python) + + [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/85a455e417b6fba90b9806cdf4d1e3ad10f62944/samples/bot-configuration-app-auth/python/bots/bot_configuration_auth.py#L72) + + ```python + async def handle_teams_config_fetch(self, turn_context): + """ + Handles the configuration fetch request. + """ + response = { + "config": { + "type": "auth", + "suggestedActions": { + "actions": [ + { + "type": "openUrl", + "value": "https://example.com/auth", + "title": "Sign in to this app" + } + ] + }, + }, + } + return InvokeResponse(status=HTTPStatus.OK, body=response) + ``` + --- * `type="message"`: When the type is set to message, it indicates that the bot is sending a simple message back to the user, indicating the end of the interaction or providing information without requiring further input. @@ -228,6 +254,24 @@ The following table lists the response type associated with the invoke requests: } ``` +# [Python](#tab/python2) + + [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/85a455e417b6fba90b9806cdf4d1e3ad10f62944/samples/bot-configuration-app-auth/python/bots/bot_configuration_auth.py#L92C1-L102C67) + + ```python + async def handle_teams_config_submit(self, turn_context): + """ + Handles the configuration submit request. + """ + response = { + "config": { + "type": "message", + "value": "You have chosen to finish setting up bot", + }, + } + return InvokeResponse(status=HTTPStatus.OK, body=response) + ``` + --- When a user reconfigures the bot, the `fetchTask` property in the app manifest file initiates `config/fetch` in the bot logic. The user can reconfigure the bot settings post-installation in two ways: @@ -253,10 +297,10 @@ When a user reconfigures the bot, the `fetchTask` property in the app manifest f ## Code sample -| **Sample name** | **Description** |**.NET** |**Node.js** |**Manifest**| +| **Sample name** | **Description** |**.NET** |**Node.js** | **Python** |**Manifest**| |----------------|-----------------|--------------|--------------|--------------| -| Bot configuration app | This sample demonstrates a bot for configuring and reconfiguring Adaptive Cards in teams and group chats. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app/csharp/demo-manifest)| -| Bot configuration app with auth | This Teams bot enables configuration and reconfiguration with dynamic search capabilities on Adaptive Cards. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app-auth/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app-auth/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app-auth/csharp/demo-manifest)| +| Bot configuration app | This sample demonstrates a bot for configuring and reconfiguring Adaptive Cards in teams and group chats. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app/nodejs)| NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app/csharp/demo-manifest)| +| Bot configuration app with auth | This Teams bot enables configuration and reconfiguration with dynamic search capabilities on Adaptive Cards. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app-auth/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app-auth/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app-auth/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-configuration-app-auth/csharp/demo-manifest)| ## See also diff --git a/msteams-platform/concepts/build-and-test/deep-link-application.md b/msteams-platform/concepts/build-and-test/deep-link-application.md index 9c7b62bfebb..0b1d4ff6faf 100644 --- a/msteams-platform/concepts/build-and-test/deep-link-application.md +++ b/msteams-platform/concepts/build-and-test/deep-link-application.md @@ -447,8 +447,8 @@ You can invoke Stageview through a deep link from your tab by wrapping the deep ## Code sample -| Sample name | Description | .NET |Node.js| TypeScript| -|-------------|-------------|------|----| -| Deep link consuming `subEntityId` | This Teams sample application highlights deeplinks for various functionalities, such as initiating calls, chats, and navigating within tabs and apps. It features a comprehensive setup guide and supports interactions with both bots and tabs for enhanced user engagement. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs) | NA| -| Tab app navigation | This sample illustrates the tab navigation feature in a Microsoft Teams application, enabling smooth transitions between different tabs. Designed for use with Node.js, it highlights how users can effectively navigate within the app for an enhanced experience. | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-app-navigation/nodejs) | NA| -| Tab deep link pass values | This sample app for Microsoft Teams illustrates the creation and usage of dynamic deep links to pass contextual values to tab and standalone web applications. It highlights the differences in link formatting and consumption based on the user's access environment, enhancing navigation and data display capabilities. | NA | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink-pass-values/ts)| +| Sample name | Description | .NET |Node.js| TypeScript| Python | +|-------------|-------------|------|----|----| +| Deep link consuming `subEntityId` | This Teams sample application highlights deeplinks for various functionalities, such as initiating calls, chats, and navigating within tabs and apps. It features a comprehensive setup guide and supports interactions with both bots and tabs for enhanced user engagement. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs) | NA|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/python) | +| Tab app navigation | This sample illustrates the tab navigation feature in a Microsoft Teams application, enabling smooth transitions between different tabs. Designed for use with Node.js, it highlights how users can effectively navigate within the app for an enhanced experience. | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-app-navigation/nodejs) | NA|NA| +| Tab deep link pass values | This sample app for Microsoft Teams illustrates the creation and usage of dynamic deep links to pass contextual values to tab and standalone web applications. It highlights the differences in link formatting and consumption based on the user's access environment, enhancing navigation and data display capabilities. | NA | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink-pass-values/ts)|NA| diff --git a/msteams-platform/concepts/build-and-test/deep-link-teams.md b/msteams-platform/concepts/build-and-test/deep-link-teams.md index 59b5775e741..fb45b497f2d 100644 --- a/msteams-platform/concepts/build-and-test/deep-link-teams.md +++ b/msteams-platform/concepts/build-and-test/deep-link-teams.md @@ -197,6 +197,6 @@ groupId: "ae063b79-5315-4ddb-ba70-27328ba6c31e" ## Code Sample -| Sample name | Description | .NET |Node.js| -|-------------|-------------|------|----| -|Deep link consuming Subentity ID | This Teams sample application highlights deeplinks for various functionalities, such as initiating calls, chats, and navigating within tabs and apps. It features a comprehensive setup guide and supports interactions with both bots and tabs for enhanced user engagement. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs)| +| Sample name | Description | .NET |Node.js| Python| +|-------------|-------------|------|----|----| +|Deep link consuming Subentity ID | This Teams sample application highlights deeplinks for various functionalities, such as initiating calls, chats, and navigating within tabs and apps. It features a comprehensive setup guide and supports interactions with both bots and tabs for enhanced user engagement. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/python)| diff --git a/msteams-platform/concepts/build-and-test/deep-link-workflow.md b/msteams-platform/concepts/build-and-test/deep-link-workflow.md index cecaf24b99c..e0349a11d16 100644 --- a/msteams-platform/concepts/build-and-test/deep-link-workflow.md +++ b/msteams-platform/concepts/build-and-test/deep-link-workflow.md @@ -259,6 +259,6 @@ Teams app can read the URL for joining a meeting URL through Graph APIs. This de ## Code sample -| Sample name | Description | .NET |Node.js| -|-------------|-------------|------|----| -|Deep link consuming Subentity ID | This Teams sample application highlights deeplinks for various functionalities, such as initiating calls, chats, and navigating within tabs and apps. It features a comprehensive setup guide and supports interactions with both bots and tabs for enhanced user engagement. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs) | +| Sample name | Description | .NET |Node.js|Python| +|-------------|-------------|------|----|----| +|Deep link consuming Subentity ID | This Teams sample application highlights deeplinks for various functionalities, such as initiating calls, chats, and navigating within tabs and apps. It features a comprehensive setup guide and supports interactions with both bots and tabs for enhanced user engagement. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/python) | diff --git a/msteams-platform/concepts/build-and-test/share-to-teams-from-web-apps.md b/msteams-platform/concepts/build-and-test/share-to-teams-from-web-apps.md index 506a9316167..c76b95cabd8 100644 --- a/msteams-platform/concepts/build-and-test/share-to-teams-from-web-apps.md +++ b/msteams-platform/concepts/build-and-test/share-to-teams-from-web-apps.md @@ -348,9 +348,9 @@ The following are the launcher.js definitions: ## Code sample -| **Sample name** | **Description** | **Node.js** | -|-----------------|-----------------|----------------| -| Share to Teams | This Teams sample application illustrates how to use deeplinks for initiating calls, video chats, and navigating within various app tabs. It includes detailed setup instructions and supports interactions with bots and tabs to enhance user experience. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs) | +| **Sample name** | **Description** | **.Net** | **Node.js** | **Python** | +|-----------------|-----------------|----------------|----------------|----------------| +| Share to Teams | This Teams sample application illustrates how to use deeplinks for initiating calls, video chats, and navigating within various app tabs. It includes detailed setup instructions and supports interactions with bots and tabs to enhance user experience. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/python) | ## See also diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index e5c9bb96c5f..0474f890523 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -121,9 +121,9 @@ If you're developing an app for use in federated group chats with external users ## Code sample -| Sample name | Description | Node.js | +| Sample name | Description | Node.js | Python | |-------------|-------------|------|----| -| Teams Conversation Bot | This sample app displays the names of the members in a federated group chat with external users. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-feed-members/nodejs/)| +| Teams Conversation Bot | This sample app displays the names of the members in a federated group chat with external users. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-feed-members/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-feed-members/python) | ## See also diff --git a/msteams-platform/concepts/deploy-and-publish/add-default-install-scope.md b/msteams-platform/concepts/deploy-and-publish/add-default-install-scope.md index cf851e8b4c2..a12c1d68c0e 100644 --- a/msteams-platform/concepts/deploy-and-publish/add-default-install-scope.md +++ b/msteams-platform/concepts/deploy-and-publish/add-default-install-scope.md @@ -337,10 +337,9 @@ If you don't want your app to be blocked by default, update the `defaultBlockUnt ## Code sample -|**Sample name** | **Description** | **.NET** | **Node.js** | **Manifest**| -|----------------|-----------------|--------------|----------------|-----------| -| Hello world | A Microsoft Teams Hello World sample app built with .NET/C# that demonstrates essential features like tabs, bots, and messaging extensions for seamless interaction within the Teams environment. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-hello-world/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-hello-world/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-hello-world/csharp/demo-manifest/app-hello-world.zip)| - +|**Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest**| +|----------------|-----------------|--------------|----------------|-----------|-----------| +| Hello world | A Microsoft Teams Hello World sample app built with .NET/C# that demonstrates essential features like tabs, bots, and messaging extensions for seamless interaction within the Teams environment. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-hello-world/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-hello-world/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-hello-world/python) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-hello-world/csharp/demo-manifest/app-hello-world.zip)| ## Next step diff --git a/msteams-platform/concepts/device-capabilities/native-device-permissions.md b/msteams-platform/concepts/device-capabilities/native-device-permissions.md index c5ee0e2fe17..fdb7677285a 100644 --- a/msteams-platform/concepts/device-capabilities/native-device-permissions.md +++ b/msteams-platform/concepts/device-capabilities/native-device-permissions.md @@ -255,9 +255,9 @@ Device permissions are stored for every sign in session. It means that if you si ## Code sample -| Sample name | Description | Node.js | Manifest -|---------------------|--------------|---------|---------| -|Device permissions | This sample app for Microsoft Teams demonstrates how to handle device permissions, including audio, video, and geolocation, within a tab interface. It provides insights into device permission usage across desktop and mobile views, allowing developers to enhance user interactions effectively. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/nodejs/demo-manifest/tab-device-permissions.zip) +| Sample name | Description | Node.js | Python | Manifest +|---------------------|--------------|---------|---------|---------| +|Device permissions | This sample app for Microsoft Teams demonstrates how to handle device permissions, including audio, video, and geolocation, within a tab interface. It provides insights into device permission usage across desktop and mobile views, allowing developers to enhance user interactions effectively. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/python)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/nodejs/demo-manifest/tab-device-permissions.zip) ## Next step diff --git a/msteams-platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages.md b/msteams-platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages.md index 85598f29cfd..02a2b37d588 100644 --- a/msteams-platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages.md +++ b/msteams-platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages.md @@ -238,13 +238,56 @@ server.get('/api/notify', async (req, res) => { }); ``` +# [Python](#tab/python) + +* [SDK reference](/python/api/botbuilder-core/botbuilder.core.cloudadapterbase?view=botbuilder-py-latest#botbuilder-core-cloudadapterbase-continue-conversation&preserve-view=true) +* [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/5e1d0e4c28a8b2c2205aaa8004e40a99f6bdbd58/samples/bot-conversation/python/bots/teams_conversation_bot.py#L172) + +```python +async def _message_all_members(self, turn_context: TurnContext): + team_members = await self._get_paged_members(turn_context) + + for member in team_members: + conversation_reference = TurnContext.get_conversation_reference( + turn_context.activity + ) + + conversation_parameters = ConversationParameters( + is_group=False, + bot=turn_context.activity.recipient, + members=[member], + tenant_id=turn_context.activity.conversation.tenant_id, + ) + + async def get_ref(tc1): + conversation_reference_inner = TurnContext.get_conversation_reference( + tc1.activity + ) + return await tc1.adapter.continue_conversation( + conversation_reference_inner, send_message, self._app_id + ) + + async def send_message(tc2: TurnContext): + return await tc2.send_activity( + f"Hello {member.name}. I'm a Teams conversation bot." + ) # pylint: disable=cell-var-from-loop + + await turn_context.adapter.create_conversation( + conversation_reference, get_ref, conversation_parameters + ) + + await turn_context.send_activity( + MessageFactory.text("All messages have been sent") + ) +``` + --- ## Code sample -| **Sample Name** | **Description** | **.NET** | **Node.js** | -|---------------|--------------|--------|-------------| -| Proactive installation of app and sending proactive notifications | This sample application demonstrates proactive installation of a Teams app and sending notifications to users using 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) | +| **Sample Name** | **Description** | **.NET** | **Node.js** | **Python** | +|---------------|--------------|--------|-------------|-------------| +| Proactive installation of app and sending proactive notifications | This sample application demonstrates proactive installation of a Teams app and sending notifications to users using 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) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-proactive-installation/python) | ## Additional code samples > diff --git a/msteams-platform/messaging-extensions/how-to/action-commands/define-action-command.md b/msteams-platform/messaging-extensions/how-to/action-commands/define-action-command.md index bd12b1f88ef..13a30562ca1 100644 --- a/msteams-platform/messaging-extensions/how-to/action-commands/define-action-command.md +++ b/msteams-platform/messaging-extensions/how-to/action-commands/define-action-command.md @@ -225,14 +225,44 @@ protected override Task OnTeamsMessagingExtens } ``` +# [Python](#tab/python) + +[Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/85a455e417b6fba90b9806cdf4d1e3ad10f62944/samples/msgext-action-preview/python/bots/messaging_extension_action_preview_bot.py#L43) + +```python +# Invoked when a Messaging Extension Fetch activity is received from the connector. +async def on_teams_messaging_extension_fetch_task(self, context, action): + """ + Invoked when a Messaging Extension Fetch activity is received from the connector. + """ + if action.command_id == 'Static HTML': + return self.static_html_page() + +def static_html_page(self): + """ + Returns a static HTML page task module response. + """ + return { + 'task': { + 'type': 'continue', + 'value': { + 'width': 450, + 'height': 125, + 'title': 'Dialog Static HTML', + 'url': f'{self.base_url}/StaticPage.html' + } + } + } +``` + --- ## Code sample -| Sample name | Description | .NET | Node.js | Manifest| -|:---------------------|:--------------|:---------|:--------|:--------------| -|Teams message extension action| This sample demonstrates how to create action-based message extensions for Microsoft Teams, enabling users to interactively generate content. It features bots, message extensions, and seamless integration with user inputs for enhanced functionality.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip) | -|Message extension action preview| This sample app illustrates how to utilize action previews in Teams message extensions, allowing users to create cards from input in a dialog. It showcases bot interactions that enhance user engagement by attributing messages to users. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp/demo-manifest/msgext-action-preview.zip) | +| Sample name | Description | .NET | Node.js | Python | Manifest| +|:---------------------|:--------------|:---------|:--------|:--------------|:--------| +|Teams message extension action| This sample demonstrates how to create action-based message extensions for Microsoft Teams, enabling users to interactively generate content. It features bots, message extensions, and seamless integration with user inputs for enhanced functionality.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip) | +|Message extension action preview| This sample app illustrates how to utilize action previews in Teams message extensions, allowing users to create cards from input in a dialog. It showcases bot interactions that enhance user engagement by attributing messages to users. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp/demo-manifest/msgext-action-preview.zip) | ## Step-by-step guide diff --git a/msteams-platform/messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md b/msteams-platform/messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md index b2057e82189..978510b57c5 100644 --- a/msteams-platform/messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md +++ b/msteams-platform/messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md @@ -74,6 +74,16 @@ class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler { } ``` +# [Python](#tab/python) + +```python +async def on_teams_messaging_extension_submit_action( + self, turn_context: TurnContext, action: MessagingExtensionAction, + ) -> MessagingExtensionActionResponse: + + #code to handle the submit action +``` + # [JSON](#tab/json) The following example is a JSON object that you receive. The `commandContext` parameter indicates where your message extension was triggered from. The `data` object contains the fields on the form as parameters, and the values the user submitted. The JSON object highlights the most relevant fields: @@ -164,6 +174,27 @@ class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler { } ``` +# [Python](#tab/python) + +```python +async def on_teams_messaging_extension_submit_action( # pylint: disable=unused-argument + self, turn_context: TurnContext, action: MessagingExtensionAction + ) -> MessagingExtensionActionResponse: + preview_card = create_adaptive_card_preview( + user_text=action.data["Question"], + is_multi_select=action.data["MultiSelect"], + option1=action.data["Option1"], + option2=action.data["Option2"], + option3=action.data["Option3"], + ) + + extension_result = MessagingExtensionResult( + type="botMessagePreview", + activity_preview=MessageFactory.attachment(preview_card), + ) + return MessagingExtensionActionResponse(compose_extension=extension_result) +``` + # [JSON](#tab/json) ```json @@ -315,6 +346,28 @@ class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler { } ``` +# [Python](#tab/python) + +```python +class TeamsMessagingExtensionsActionPreviewBot(TeamsActivityHandler): + async def on_teams_messaging_extension_submit_action( # pylint: disable=unused-argument + self, turn_context: TurnContext, action: MessagingExtensionAction + ) -> MessagingExtensionActionResponse: + preview_card = create_adaptive_card_preview( + user_text=action.data["Question"], + is_multi_select=action.data["MultiSelect"], + option1=action.data["Option1"], + option2=action.data["Option2"], + option3=action.data["Option3"], + ) + + extension_result = MessagingExtensionResult( + type="botMessagePreview", + activity_preview=MessageFactory.attachment(preview_card), + ) + return MessagingExtensionActionResponse(compose_extension=extension_result) +``` + # [JSON](#tab/json) > [!NOTE] @@ -378,6 +431,19 @@ class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler { ``` +# [python](#tab/python) + +```python +class TeamsMessagingExtensionsActionPreviewBot(TeamsActivityHandler): + async on_teams_messaging_extension_bot_message_preview_edit(turn_context: TurnContext, action: MessagingExtensionAction) -> MessagingExtensionActionResponse: + # handle the event + + async on_teams_messaging_extension_bot_message_preview_send(turn_context: TurnContext, action: MessagingExtensionAction) -> MessagingExtensionActionResponse: + # handle the event + +``` + + # [JSON](#tab/json) ```json @@ -514,6 +580,27 @@ class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler { } ``` +# [Python](#tab/python) + +```python +class TeamsMessagingExtensionsActionPreviewBot(TeamsActivityHandler): + async def on_teams_messaging_extension_bot_message_preview_send( # pylint: disable=unused-argument + self, turn_context: TurnContext, action: MessagingExtensionAction + ) -> MessagingExtensionActionResponse: + activity_preview = action.bot_activity_preview[0] + content = activity_preview.attachments[0].content + data = self._get_example_data(content) + card = create_adaptive_card_preview( + data.question, + data.is_multi_select, + data.option1, + data.option2, + data.option3, + ) + message = MessageFactory.attachment(card) + await turn_context.send_activity(message) +``` + # [JSON](#tab/json) You receive a new `composeExtensions/submitAction` message similar to the following json: @@ -623,11 +710,11 @@ The following section is a description of the entities in the `OnBehalfOf` Array ## Code sample -| Sample name | Description | .NET | Node.js | Manifest| -|:---------------------|:--------------|:---------|:--------|:--------| -|Teams message extension action| This sample demonstrates how to create action-based message extensions for Microsoft Teams, enabling users to interactively generate content. It features bots, message extensions, and seamless integration with user inputs for enhanced functionality. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip) -|Message extension action preview| This sample app illustrates how to utilize action previews in Teams message extensions, allowing users to create cards from input in a Task Module. It showcases bot interactions that enhance user engagement by attributing messages to users. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp/demo-manifest/msgext-action-preview.zip) | -|Teams message extension search | This sample demonstrates how to create a message extension in Microsoft Teams that allows users to perform searches and retrieve results.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip) +| Sample name | Description | .NET | Node.js | Python | Manifest| +|:---------------------|:--------------|:---------|:--------|:--------|:--------| +|Teams message extension action| This sample demonstrates how to create action-based message extensions for Microsoft Teams, enabling users to interactively generate content. It features bots, message extensions, and seamless integration with user inputs for enhanced functionality. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip)| +|Message extension action preview| This sample app illustrates how to utilize action previews in Teams message extensions, allowing users to create cards from input in a Task Module. It showcases bot interactions that enhance user engagement by attributing messages to users. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp/demo-manifest/msgext-action-preview.zip)| +|Teams message extension search | This sample demonstrates how to create a message extension in Microsoft Teams that allows users to perform searches and retrieve results.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)| ## Next Step diff --git a/msteams-platform/messaging-extensions/how-to/search-commands/define-search-command.md b/msteams-platform/messaging-extensions/how-to/search-commands/define-search-command.md index e7c30770158..485c129771c 100644 --- a/msteams-platform/messaging-extensions/how-to/search-commands/define-search-command.md +++ b/msteams-platform/messaging-extensions/how-to/search-commands/define-search-command.md @@ -250,9 +250,9 @@ async def on_teams_messaging_extension_query(self, context, query): ## Code sample -| Sample name | Description | .NET | Node.js | Manifest| -|:---------------------|:--------------|:---------|:--------|:--------------| -|Teams message extension search | This sample demonstrates how to create a Messaging Extension in Microsoft Teams that allows users to perform searches and retrieve results. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip) +| Sample name | Description | .NET | Node.js | Python| Manifest| +|:---------------------|:--------------|:---------|:--------|:--------------|:--------------| +|Teams message extension search | This sample demonstrates how to create a Messaging Extension in Microsoft Teams that allows users to perform searches and retrieve results. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)| ## Next step diff --git a/msteams-platform/messaging-extensions/how-to/search-commands/respond-to-search.md b/msteams-platform/messaging-extensions/how-to/search-commands/respond-to-search.md index b41374f86b2..1ad2bc78756 100644 --- a/msteams-platform/messaging-extensions/how-to/search-commands/respond-to-search.md +++ b/msteams-platform/messaging-extensions/how-to/search-commands/respond-to-search.md @@ -50,6 +50,19 @@ class TeamsMessagingExtensionsSearch extends TeamsActivityHandler { } ``` +# [Python](#tab/python) + +* [SDK reference](/python/api/botbuilder-core/botbuilder.core.teams.teamsactivityhandler?view=botbuilder-py-latest#botbuilder-core-teams-teamsactivityhandler-on-teams-messaging-extension-query&preserve-view=true) +[Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/5e1d0e4c28a8b2c2205aaa8004e40a99f6bdbd58/samples/msgext-search/python/bots/search_based_messaging_extension.py#L18) + +```python +class SearchBasedMessagingExtension(TeamsActivityHandler): + async def on_teams_messaging_extension_query( + self, turn_context: TurnContext, query: MessagingExtensionQuery + ): + // Code to handle the query. +``` + # [JSON](#tab/json) The following JSON is shortened to highlight the most relevant sections. @@ -573,10 +586,10 @@ The default query has the same structure as any regular user query, with the `na ## Code sample -| Sample name | Description | .NET | Node.js | Manifest| -|:---------------------|:--------------|:---------|:--------|:--------| -| Teams message extension search | This sample demonstrates how to create a message extension in Teams that allows users searches for NuGet packages and retrieve the results as a card. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip) -|Teams message extension auth and config | This sample demonstrates how to implement authentication in a message extension for Teams, enabling secure access and user-specific interactions. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-sso-config/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp/demo-manifest/msgext-search-auth-config.zip) +| Sample name | Description | .NET | Node.js | Python| Manifest| +|:---------------------|:--------------|:---------|:--------|:--------|:--------| +| Teams message extension search | This sample demonstrates how to create a message extension in Teams that allows users searches for NuGet packages and retrieve the results as a card. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)| +|Teams message extension auth and config | This sample demonstrates how to implement authentication in a message extension for Teams, enabling secure access and user-specific interactions. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-sso-config/nodejs)|NA|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp/demo-manifest/msgext-search-auth-config.zip)| ## Next step diff --git a/msteams-platform/task-modules-and-cards/cards/dynamic-search.md b/msteams-platform/task-modules-and-cards/cards/dynamic-search.md index 181b174002a..06cdeb51441 100644 --- a/msteams-platform/task-modules-and-cards/cards/dynamic-search.md +++ b/msteams-platform/task-modules-and-cards/cards/dynamic-search.md @@ -579,9 +579,9 @@ The following code snippet shows an example of a bot invoke request for the card ## Code sample -|**Sample name** | **Description** | **.NET** | **Node.js** | **Manifest** -|----------------|-----------------|--------------|----------------|----------------| -| Typeahead search control on Adaptive Cards |Demonstrating the feature of typeahead search (static, dynamic and dependant) control in Adaptive Cards using sent bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-type-ahead-search-adaptive-cards/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-type-ahead-search-adaptive-cards/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-type-ahead-search-adaptive-cards/csharp/demo-manifest/Typeahead-search-adaptive-cards.zip) +|**Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest** | +|----------------|-----------------|--------------|----------------|----------------|----------------| +| Typeahead search control on Adaptive Cards |Demonstrating the feature of typeahead search (static, dynamic and dependant) control in Adaptive Cards using sent bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-type-ahead-search-adaptive-cards/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-type-ahead-search-adaptive-cards/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-type-ahead-search-adaptive-cards/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-type-ahead-search-adaptive-cards/csharp/demo-manifest/Typeahead-search-adaptive-cards.zip) | ## See also diff --git a/msteams-platform/task-modules-and-cards/cards/people-picker.md b/msteams-platform/task-modules-and-cards/cards/people-picker.md index 9cf7cf1adac..388f067182d 100644 --- a/msteams-platform/task-modules-and-cards/cards/people-picker.md +++ b/msteams-platform/task-modules-and-cards/cards/people-picker.md @@ -307,9 +307,9 @@ You can implement People Picker for efficient task management in different scena ## Code sample -| Sample Name | Description | .NET | Node.js | Manifest -|:---------------------|:--------------|:---------|:--------|:--------| -|People picker control in Adaptive Cards| This bot showcases how to use the people picker control within Adaptive Cards on Teams.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-people-picker-adaptive-card/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-people-picker-adaptive-card/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-people-picker-adaptive-card/csharp/demo-manifest/People-picker-adaptive-card.zip) +| Sample Name | Description | .NET | Node.js | Python | Manifest +|:---------------------|:--------------|:---------|:--------|:--------|:--------| +|People picker control in Adaptive Cards| This bot showcases how to use the people picker control within Adaptive Cards on Teams.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-people-picker-adaptive-card/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-people-picker-adaptive-card/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-people-picker-adaptive-card/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-people-picker-adaptive-card/csharp/demo-manifest/People-picker-adaptive-card.zip) | ## See also diff --git a/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md b/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md index 3c639aeb0b9..69c4f812122 100644 --- a/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md +++ b/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md @@ -220,9 +220,9 @@ Microsoft Teams ensures that keyboard navigation works properly from the dialog ## Code sample -|Sample name | Description | .NET | Node.js | Manifest| -|----------------|-----------------|--------------|----------------|----------------| -|Dialog sample bots-V4 | This sample app demonstrate how to use Dialogs (referred as task modules in TeamsJS v1.x) using Bot Framework v4. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) +|Sample name | Description | .NET | Node.js | Python | Manifest| +|----------------|-----------------|--------------|----------------|----------------|----------------| +|Dialog sample bots-V4 | This sample app demonstrate how to use Dialogs (referred as task modules in TeamsJS v1.x) using Bot Framework v4. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/python) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) | ## Next step diff --git a/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md b/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md index ff6161e724e..ad9a8f33602 100644 --- a/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md +++ b/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md @@ -263,9 +263,9 @@ The schema for Bot Framework card actions is different from Adaptive Card `Actio ## Code sample -|Sample name | Description | .NET | Node.js | Manifest| -|----------------|-----------------|--------------|----------------|----------------| -|Dialog sample bots-V4 | This sample app demonstrate how to use Dialogs (referred as task modules in TeamsJS v1.x) using Bot Framework v4. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) +|Sample name | Description | .NET | Node.js | Python | Manifest| +|----------------|-----------------|--------------|----------------|----------------|----------------| +|Dialog sample bots-V4 | This sample app demonstrate how to use Dialogs (referred as task modules in TeamsJS v1.x) using Bot Framework v4. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) | ## See also diff --git a/msteams-platform/task-modules-and-cards/task-modules/task-modules-tabs.md b/msteams-platform/task-modules-and-cards/task-modules/task-modules-tabs.md index ac349573960..5d61639e563 100644 --- a/msteams-platform/task-modules-and-cards/task-modules/task-modules-tabs.md +++ b/msteams-platform/task-modules-and-cards/task-modules/task-modules-tabs.md @@ -262,9 +262,9 @@ The following table provides the possible values of `err` that your `submitHandl ## Code sample -|Sample name | Description | .NET | Node.js | Manifest -|----------------|-----------------|--------------|----------------|----------------| -|Dialog sample bots-V4 | This sample app demonstrate how to use Dialogs (referred as task modules in TeamsJS v1.x) using Bot Framework v4. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) +|Sample name | Description | .NET | Node.js | Python | Manifest | +|----------------|-----------------|--------------|----------------|----------------|----------------| +|Dialog sample bots-V4 | This sample app demonstrate how to use Dialogs (referred as task modules in TeamsJS v1.x) using Bot Framework v4. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) | ## Next step