kestra-io/kestra · error · TourSceneError

onboarding.tour.errors.test_event

Error message

onboarding.tour.errors.test_event

What it means

Thrown by the onboarding tour when the test-event webhook send fails. The tour calls actions.sendTestEvent(TOUR_TEST_EVENT_PAYLOAD) and, if the HTTP response is not ok, raises TourSceneError with the i18n key 'onboarding.tour.errors.test_event' and the failing HTTP status. The message key is resolved by vue-i18n at display time; the raw key surfaces only if translation is missing.

Source

Thrown at ui/src/components/onboarding/tour/tourScenes.ts:248

            store.setTourState({eventExecutionId: null, eventWatchSince: new Date().toISOString()})
            await actions.openTriggersTab()
        },
        poll: async ({actions, store}) => {
            const since = store.state.tour.eventWatchSince
            if (!since) {
                return false
            }
            const executionId = await actions.findEventExecution(since)
            if (!executionId) {
                return false
            }
            store.setTourState({eventExecutionId: executionId, lastExecutionId: executionId})
            return true
        },
        action: async ({actions}) => {
            const result = await actions.sendTestEvent(TOUR_TEST_EVENT_PAYLOAD)
            if (!result.ok) {
                throw new TourSceneError("onboarding.tour.errors.test_event", {status: result.status})
            }
            if (result.executionId) {
                await actions.waitForExecution(result.executionId)
            }
        },
        completedByUser: ({store}) => Boolean(store.state.tour.eventExecutionId),
    },
    {
        id: "event_execution",
        step: 3,
        milestone: true,
        confetti: true,
        offersExit: true,
        enter: async ({actions, store}) => {
            const executionId = store.state.tour.eventExecutionId
            if (executionId) {
                await actions.openExecution(executionId)
                return

View on GitHub (pinned to 823fada927)

Solutions

  1. Open browser devtools Network tab and inspect the failing POST to the webhook/trigger URL — read the response status/body for the real cause.
  2. Verify the Kestra backend is reachable from the browser and the tour flow + webhook trigger exist in the tour namespace.
  3. If a proxy sits in front, allowlist the webhook trigger path and confirm it does not strip headers or block POSTs.
  4. Retry the tour scene after fixing backend connectivity; if it persists, file a tour-flow issue with the captured status code.
Defensive patterns

Strategy: try-catch

Validate before calling

// Before sending, sanity-check the tour flow + webhook exist
const flow = await flowStore.loadFlow({namespace: TOUR_NAMESPACE, id: TOUR_FLOW_ID});
if (!flow || !flow.triggers?.some(t => t.type === 'io.kestra.plugin.core.trigger.Webhook')) {
    throw new Error('Tour webhook trigger is missing');
}

Try / catch

try {
  const result = await actions.sendTestEvent(TOUR_TEST_EVENT_PAYLOAD);
  if (!result.ok) {
    throw new TourSceneError('onboarding.tour.errors.test_event', {status: result.status});
  }
} catch (e) {
  // surface the status to the user, offer retry
  showTourError(t('onboarding.tour.errors.test_event'), {status: e.status, retry: true});
}

Prevention

When it happens

Trigger: Tour 'test_event' scene action runs actions.sendTestEvent(...), the backend POST returns a non-2xx status (or network/transport failure yields result.ok === false), and TourSceneError is thrown with {status: result.status}.

Common situations: The tour webhook trigger endpoint is unreachable (backend down, wrong base URL), the webhook key is invalid/expired, the server rejects the test payload (validation, auth, CSRF), or a reverse proxy returns 4xx/5xx for the trigger route.

Related errors


AI-assisted analysis of kestra-io/kestra@823fada927 (2026-08-14). Data as JSON: /api/errors/340fde584d06d7aa. Report an issue: GitHub.