From 8e67f0251c06cd84c37b6c5694bc6184af8247bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Wed, 14 Oct 2026 10:32:12 +0200 Subject: [PATCH] fix(ui): point Slack partial list to inviting the app (#13036) --- docs/user-guide/tutorials/prowler-app-slack-integration.mdx | 6 +++--- ui/changelog.d/slack-partial-channel-list-message.fixed.md | 1 + ui/lib/integrations/slack-errors.ts | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 ui/changelog.d/slack-partial-channel-list-message.fixed.md diff --git a/docs/user-guide/tutorials/prowler-app-slack-integration.mdx b/docs/user-guide/tutorials/prowler-app-slack-integration.mdx index f9ae3f99b1..a75389f329 100644 --- a/docs/user-guide/tutorials/prowler-app-slack-integration.mdx +++ b/docs/user-guide/tutorials/prowler-app-slack-integration.mdx @@ -27,7 +27,7 @@ This guide covers the Slack integration in Prowler Cloud and Prowler Private Clo When connected and configured: 1. A Slack workspace is approved once through Slack's app install flow, and Prowler stores the resulting credential encrypted. -2. Prowler reads the channels it can post to: the workspace's public channels, plus the private channels the Prowler app has been invited to. +2. Prowler reads the channels it can post to: first the channels the Prowler app is already in, public or private, then the rest of the workspace's public channels. 3. Several of those channels are selected and saved as the integration's authorized channels. 4. The connection check verifies the credential and every authorized channel, and posts a one-time confirmation message to each channel it has not confirmed yet. 5. Features that deliver to Slack, such as [Alerts](/user-guide/tutorials/prowler-alerts), choose their destinations from the confirmed channels. @@ -98,7 +98,7 @@ Declining the consent screen creates nothing. Prowler reports that the workspace Prowler posts to the channels authorized on the integration. Several channels can be authorized at once, and once the connection check has confirmed them they are the pool every consumer of the integration draws from: an [Alert](/user-guide/tutorials/prowler-alerts) picks its Slack destinations from the confirmed channels, never from the whole workspace. -1. Open the **Destination channels** selection. It lists the workspace's public channels, plus the private channels the Prowler app has been invited to, each marked **Private**. +1. Open the **Destination channels** selection. It lists the channels the Prowler app is already in, including the private channels it has been invited to, each marked **Private**, followed by the rest of the workspace's public channels. ![Destination channels selection listing public channels and an invited private channel marked Private](/images/prowler-app/slack/channel-picker.png) @@ -109,7 +109,7 @@ Prowler validates the selection against Slack and derives each channel name itse If the selection reports that no channels are available, the workspace exposes nothing Prowler can see. Create a public channel, or invite `@Prowler Cloud` to a private one, then click **Refresh channels**. -A workspace can hold more channels than Prowler reads in one go. When that happens, the selection says so and lists what was read: every listed channel is usable, and a channel missing from a partial list is not necessarily one `@Prowler Cloud` has to be invited to. Only listed channels can be selected: **Refresh channels** repeats the same bounded read rather than reading further, and the selection's search filters what was already read, so neither surfaces a channel the read left out. +A workspace can hold more public channels than Prowler reads in one go. When that happens, the selection says so and lists what was read: every listed channel is usable, and the channels `@Prowler Cloud` is already in are always among them, because they are read first. Only listed channels can be selected: **Refresh channels** repeats the same bounded read rather than reading further, and the selection's search filters what was already read, so neither surfaces a public channel the read left out. To make such a channel selectable, invite `@Prowler Cloud` to it and click **Refresh channels**. Saving a new selection replaces the authorized set: channels left out of it stop being authorized, and channels added to it are authorized but not yet confirmed. Changing which channels are in the set also resets the integration's connection state, so the check runs again over the new set — reordering the same channels does not. Saving an empty selection leaves the integration with no authorized channels, and **Test connection** cannot be run again until at least one channel is authorized. diff --git a/ui/changelog.d/slack-partial-channel-list-message.fixed.md b/ui/changelog.d/slack-partial-channel-list-message.fixed.md new file mode 100644 index 0000000000..e317168738 --- /dev/null +++ b/ui/changelog.d/slack-partial-channel-list-message.fixed.md @@ -0,0 +1 @@ +Slack partial channel list message tells the user to invite the app to a missing channel diff --git a/ui/lib/integrations/slack-errors.ts b/ui/lib/integrations/slack-errors.ts index d8a3f1cfc4..e79dcc3704 100644 --- a/ui/lib/integrations/slack-errors.ts +++ b/ui/lib/integrations/slack-errors.ts @@ -46,7 +46,7 @@ export const SLACK_RATE_LIMITED_MESSAGE = * out, or `links.next` left the API's origin. */ export const SLACK_PARTIAL_CHANNEL_LIST_MESSAGE = - "This workspace has more channels than Prowler reads in one go, so this list is not all of them. A channel missing from it is not necessarily one @Prowler Cloud has to be invited to."; + "This workspace has more public channels than Prowler reads in one go, so this list is not all of them. Channels @Prowler Cloud is already in are always listed: invite it to a missing channel, then refresh."; /** * For a `2xx` the UI could not read. Not phrased as a failure: the install