{"record":{"id":"340fde584d06d7aa","repo":"kestra-io/kestra","slug":"onboarding-tour-errors-test-event","errorCode":null,"errorMessage":"onboarding.tour.errors.test_event","messagePattern":"onboarding\\.tour\\.errors\\.test_event","errorType":"exception","errorClass":"TourSceneError","httpStatus":null,"severity":"error","filePath":"ui/src/components/onboarding/tour/tourScenes.ts","lineNumber":248,"sourceCode":"            store.setTourState({eventExecutionId: null, eventWatchSince: new Date().toISOString()})\n            await actions.openTriggersTab()\n        },\n        poll: async ({actions, store}) => {\n            const since = store.state.tour.eventWatchSince\n            if (!since) {\n                return false\n            }\n            const executionId = await actions.findEventExecution(since)\n            if (!executionId) {\n                return false\n            }\n            store.setTourState({eventExecutionId: executionId, lastExecutionId: executionId})\n            return true\n        },\n        action: async ({actions}) => {\n            const result = await actions.sendTestEvent(TOUR_TEST_EVENT_PAYLOAD)\n            if (!result.ok) {\n                throw new TourSceneError(\"onboarding.tour.errors.test_event\", {status: result.status})\n            }\n            if (result.executionId) {\n                await actions.waitForExecution(result.executionId)\n            }\n        },\n        completedByUser: ({store}) => Boolean(store.state.tour.eventExecutionId),\n    },\n    {\n        id: \"event_execution\",\n        step: 3,\n        milestone: true,\n        confetti: true,\n        offersExit: true,\n        enter: async ({actions, store}) => {\n            const executionId = store.state.tour.eventExecutionId\n            if (executionId) {\n                await actions.openExecution(executionId)\n                return","sourceCodeStart":230,"sourceCodeEnd":266,"githubUrl":"https://github.com/kestra-io/kestra/blob/823fada9274c4f9c251ea0a516460a4f7d958032/ui/src/components/onboarding/tour/tourScenes.ts#L230-L266","documentation":"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.","triggerScenarios":"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}.","commonSituations":"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.","solutions":["Open browser devtools Network tab and inspect the failing POST to the webhook/trigger URL — read the response status/body for the real cause.","Verify the Kestra backend is reachable from the browser and the tour flow + webhook trigger exist in the tour namespace.","If a proxy sits in front, allowlist the webhook trigger path and confirm it does not strip headers or block POSTs.","Retry the tour scene after fixing backend connectivity; if it persists, file a tour-flow issue with the captured status code."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Before sending, sanity-check the tour flow + webhook exist\nconst flow = await flowStore.loadFlow({namespace: TOUR_NAMESPACE, id: TOUR_FLOW_ID});\nif (!flow || !flow.triggers?.some(t => t.type === 'io.kestra.plugin.core.trigger.Webhook')) {\n    throw new Error('Tour webhook trigger is missing');\n}","typeGuard":null,"tryCatchPattern":"try {\n  const result = await actions.sendTestEvent(TOUR_TEST_EVENT_PAYLOAD);\n  if (!result.ok) {\n    throw new TourSceneError('onboarding.tour.errors.test_event', {status: result.status});\n  }\n} catch (e) {\n  // surface the status to the user, offer retry\n  showTourError(t('onboarding.tour.errors.test_event'), {status: e.status, retry: true});\n}","preventionTips":["Verify the tour flow and its webhook trigger are deployed before starting the tour.","Capture the failing HTTP status so the error message is actionable.","Offer a retry control in the tour UI rather than dead-ending."],"tags":["onboarding","tour","webhook","http","frontend","i18n"],"backgroundTag":null,"analyzedSha":"823fada9274c4f9c251ea0a516460a4f7d958032","analyzedAt":"2026-08-14T06:15:17.947Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}