diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 6827f449db..b047afb08e 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -3476,6 +3476,10 @@ paths: text: type: string description: The message text to be sent in the Teams card + card_block: + type: object + description: The card block to be sent in the Teams card + responses: '200': description: Activity processed successfully diff --git a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte index 4ca67f3029..e5595dc3a3 100644 --- a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte +++ b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte @@ -43,9 +43,11 @@ export let customScriptTemplate: string export let customHandlerKind: 'flow' | 'script' = 'script' + let initialSlackChannel: string | undefined = undefined + let initialTeamsChannel: string | undefined = undefined + let customHandlerSchema: Schema | undefined let slackHandlerSchema: Schema | undefined - let teamsHandlerSchema: Schema | undefined let isFetching: boolean = false let teams_channels: ListAvailableTeamsChannelsResponse = [] @@ -201,10 +203,35 @@ } } + let lastHandlerSelected: 'slack' | 'teams' | 'custom' | undefined = undefined + + $: { + if (lastHandlerSelected !== handlerSelected) { + lastHandlerSelected = handlerSelected; + updateHandlerExtraArgs(); + } + } + + function updateHandlerExtraArgs() { + if (handlerSelected === 'slack' && initialSlackChannel) { + handlerExtraArgs['channel'] = initialSlackChannel; + } else if (handlerSelected === 'teams' && initialTeamsChannel) { + handlerExtraArgs['channel'] = initialTeamsChannel; + } else { + handlerExtraArgs['channel'] = undefined; + } + connectionTestJob = undefined; + } + $: { if ($workspaceStore) { loadSlackResources() loadTeamsResources() + if (handlerSelected === 'slack') { + initialSlackChannel = handlerExtraArgs['channel'] + } else if (handlerSelected === 'teams') { + initialTeamsChannel = handlerExtraArgs['channel'] + } } } @@ -229,6 +256,7 @@ $: handlerPath && isSlackHandler(handlerPath) && + !isTeamsHandler(handlerPath) && loadHandlerScriptArgs(handlerPath, [ 'path', 'workspace_id', @@ -245,31 +273,10 @@ 'email', 'slack' ]).then((schema) => (slackHandlerSchema = schema)) - - $: handlerPath && - isTeamsHandler(handlerPath) && - loadHandlerScriptArgs(handlerPath, [ - 'path', - 'workspace_id', - 'job_id', - 'is_flow', - 'schedule_path', - 'error', - 'error_started_at', - 'failed_times', - 'started_at', - 'success_times', - 'success_result', - 'success_started_at', - 'email', - 'teams' - ]).then((schema) => (teamsHandlerSchema = schema))
- { - //TODO - }} class="mt-2 mb-4"> + Slack Teams @@ -439,7 +446,7 @@

Teams Channel

- {#if teams_channels.length === 0} {:else} @@ -481,10 +488,10 @@ {:else} {#if connectionTestJob !== undefined} diff --git a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte index 98c20c5cf0..acb966cb8c 100644 --- a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte @@ -570,6 +570,8 @@ if (errorHandlerScriptPath) { if (errorHandlerScriptPath !== undefined && isSlackHandler(errorHandlerScriptPath)) { errorHandlerExtraArgs['slack'] = '$res:f/slack_bot/bot_token' + } else { + errorHandlerExtraArgs['slack'] = undefined } await WorkspaceService.editErrorHandler({ workspace: $workspaceStore!, diff --git a/python-client/wmill/wmill/client.py b/python-client/wmill/wmill/client.py index c81160887b..ed1587e447 100644 --- a/python-client/wmill/wmill/client.py +++ b/python-client/wmill/wmill/client.py @@ -710,11 +710,11 @@ class Windmill: return self.get(f"/w/{self.workspace}/users/username_to_email/{username}").text - def send_teams_message(self, conversation_id: str, text: str, success: bool = True): + def send_teams_message(self, conversation_id: str, text: str, success: bool = True, card_block: dict = None): """ Send a message to a Microsoft Teams conversation with conversation_id, where success is used to style the message """ - return self.post(f"/teams/activities", json={"conversation_id": conversation_id, "text": text, "success": success}) + return self.post(f"/teams/activities", json={"conversation_id": conversation_id, "text": text, "success": success, "card_block": card_block}) def init_global_client(f): @@ -1076,8 +1076,8 @@ def request_interactive_slack_approval( ) @init_global_client -def send_teams_message(conversation_id: str, text: str, success: bool): - return _client.send_teams_message(conversation_id, text, success) +def send_teams_message(conversation_id: str, text: str, success: bool, card_block: dict = None): + return _client.send_teams_message(conversation_id, text, success, card_block) @init_global_client def cancel_running() -> dict: