diff --git a/backend/windmill-native-triggers/src/nextcloud/external.rs b/backend/windmill-native-triggers/src/nextcloud/external.rs
index e662a981ee..7a1ed5f8d3 100644
--- a/backend/windmill-native-triggers/src/nextcloud/external.rs
+++ b/backend/windmill-native-triggers/src/nextcloud/external.rs
@@ -136,7 +136,20 @@ impl External for NextCloud {
Some(headers),
Some(&full_nextcloud_payload),
)
- .await?;
+ .await
+ .map_err(|e| {
+ // Nextcloud lets only its admins register webhooks.
+ if http_error_status(&e) == Some(StatusCode::FORBIDDEN) {
+ Error::BadRequest(
+ "This Nextcloud account isn't a Nextcloud admin, so it can't register \
+ webhooks. Use the shared account, or ask a workspace admin to share a \
+ Nextcloud admin account."
+ .to_string(),
+ )
+ } else {
+ e
+ }
+ })?;
Ok(ocs_response.ocs.data)
}
diff --git a/frontend/src/lib/components/triggers/native/NativeTriggerEditor.svelte b/frontend/src/lib/components/triggers/native/NativeTriggerEditor.svelte
index 1817db8a4f..bd2584cb1d 100644
--- a/frontend/src/lib/components/triggers/native/NativeTriggerEditor.svelte
+++ b/frontend/src/lib/components/triggers/native/NativeTriggerEditor.svelte
@@ -614,15 +614,15 @@
Failed to load service configuration component for {service}.
- Ensure your workspace has a connected {serviceInfo?.serviceDisplayName} integration.
+ Check that {serviceInfo?.serviceDisplayName} is configured in the native trigger settings.
Could not load the available events: {eventsError}
{:else}
-
No events available. Please ensure your workspace has a connected Nextcloud integration.
+
No events available. Check that the selected Nextcloud account can reach the server.
{/if}
-
@@ -142,8 +140,7 @@
/>
{:else}
- Please ensure Nextcloud workspace integration is connected to load available configuration
- options.
+ Select a Nextcloud account to load the available configuration options.
- Members can't create {config.displayName} triggers yet.
+
+ Not configured. Members can't create {config.displayName} triggers yet.
{:else}
+
+
+
+ {workspaceApp ? 'Configured in workspace.' : 'Configured by instance.'}
+ Members connect their own {config.displayName} account when they create a trigger.
+
+
{/if}
diff --git a/frontend/src/routes/(root)/(logged)/native_triggers/[service_name]/+page.svelte b/frontend/src/routes/(root)/(logged)/native_triggers/[service_name]/+page.svelte
index 004799baed..d911b1dcfb 100644
--- a/frontend/src/routes/(root)/(logged)/native_triggers/[service_name]/+page.svelte
+++ b/frontend/src/routes/(root)/(logged)/native_triggers/[service_name]/+page.svelte
@@ -110,7 +110,7 @@
serviceAvailable = await isServiceAvailable(serviceName, $workspaceStore)
if (!serviceAvailable) {
sendUserToast(
- `${serviceName} integration not available, set it in the workspace settings`,
+ `${serviceConfig.serviceDisplayName} isn't configured in this workspace`,
true
)
}
@@ -145,7 +145,10 @@
}
if (!serviceAvailable) {
- sendUserToast('Cannot sync triggers: workspace integration not connected', true)
+ sendUserToast(
+ `Cannot sync: ${serviceConfig.serviceDisplayName} isn't configured in this workspace`,
+ true
+ )
return
}
@@ -159,17 +162,7 @@
loadTriggers()
} catch (err: any) {
const errorMessage = err.body || err.message
- if (
- errorMessage.includes('workspace integration') ||
- errorMessage.includes('not connected')
- ) {
- sendUserToast(
- `Cannot sync: ${serviceConfig.serviceDisplayName} workspace integration not connected. Please connect it in workspace settings.`,
- true
- )
- } else {
- sendUserToast(`Failed to sync triggers: ${errorMessage}`, true)
- }
+ sendUserToast(`Failed to sync triggers: ${errorMessage}`, true)
}
}
@@ -237,8 +230,7 @@
type="warning"
>
- The workspace doesn't have a {serviceConfig?.serviceDisplayName || serviceName} integration
- connected
+ {serviceConfig?.serviceDisplayName || serviceName} isn't configured in this workspace yet.