* feat: add no users found fallback action for routing forms
- Add NoUsersFoundFallbackActionType enum with CustomPageMessage and ExternalRedirectUrl options
- Add noUsersFoundFallbackAction field to zodNonRouterRoute schema
- Add NoUsersFoundFallback UI component in RouteBuilder for configuring fallback action
- Update handleResponse to return noUsersFoundFallbackAction when no team members match
- Add i18n translation keys for new UI strings
Co-Authored-By: [email protected] <[email protected]>
* refactor: change fallback to use same action options as main route
- Replace noUsersFoundFallbackAction with fallbackAction that has same structure as main action
- Add action dropdown and input fields to fallback attributes query builder section
- Support Event redirect, External URL, and Custom page options in fallback
- Remove separate NoUsersFoundFallback toggle component
- Update handleResponse to return fallbackAction
Co-Authored-By: [email protected] <[email protected]>
* fix: ensure fallbackAction type is always defined in onChange handlers
Co-Authored-By: [email protected] <[email protected]>
* fix: add guards for route.fallbackAction in onChange handlers
Co-Authored-By: [email protected] <[email protected]>
* fix: only return fallbackAction when no users are found
Co-Authored-By: [email protected] <[email protected]>
* refactor: restructure fallback section to mirror main route structure
Co-Authored-By: [email protected] <[email protected]>
* fix: ensure backwards compatibility for existing routes with fallbackAttributesQueryValue
Co-Authored-By: [email protected] <[email protected]>
* fix: initialize fallbackAction with main event type for backwards compatibility
Co-Authored-By: [email protected] <[email protected]>
* fix: include fallbackAction in getRoutesToSave to persist changes
Co-Authored-By: [email protected] <[email protected]>
* fix: use fallbackAction in getRoutedUrl when no team members found
Co-Authored-By: [email protected] <[email protected]>
* fix: use i18n for fallback label and add tests for fallback action
Co-Authored-By: [email protected] <[email protected]>
* fix: do not trigger fallback action when CRM contact owner is found
Co-Authored-By: [email protected] <[email protected]>
* fix: prioritize fallbackAction over fallbackAttributesQueryValue
When a route has a fallbackAction configured, skip the
fallbackAttributesQueryValue to ensure the fallbackAction is triggered
when no team members are found. This maintains backwards compatibility
by only using fallbackAttributesQueryValue when fallbackAction is not set.
Also treats teamMemberIdsMatchingAttributeLogic being null (routing couldn't
run, e.g., missing orgId) the same as an empty array for the purpose of
triggering the fallbackAction.
Co-Authored-By: Claude Opus 4.5 <[email protected]>
* refactor: extract RouteActionSelector shared component for action selection UI
Co-Authored-By: [email protected] <[email protected]>
* fix: add i18n string for default custom page message
Co-Authored-By: [email protected] <[email protected]>
* feat: add webhook trigger when routing form fallback route is hit
- Add ROUTING_FORM_FALLBACK_HIT to WebhookTriggerEvents enum in Prisma schema
- Add new trigger to routing-forms webhook triggers in constants
- Add translation string for the new webhook trigger
- Implement triggerFallbackWebhook function in formSubmissionUtils.ts
- Call webhook trigger from handleResponse.ts when fallback action is used
Co-Authored-By: [email protected] <[email protected]>
* fix: remove webhook object from error log to avoid exposing secrets
Co-Authored-By: [email protected] <[email protected]>
* revert: remove webhook trigger changes (to be moved to separate PR)
Co-Authored-By: [email protected] <[email protected]>
* feat: add webhook trigger when routing form fallback route is hit
- Add ROUTING_FORM_FALLBACK_HIT to WebhookTriggerEvents enum in Prisma schema
- Add new trigger to routing-forms webhook triggers in constants
- Add translation string for the new webhook trigger
- Implement triggerFallbackWebhook function in formSubmissionUtils.ts
- Call webhook trigger from handleResponse.ts when fallback action is used
Co-Authored-By: [email protected] <[email protected]>
* fix: remove webhook object from error log to avoid exposing secrets
Co-Authored-By: [email protected] <[email protected]>
* fix: add ROUTING_FORM_FALLBACK_HIT to PayloadBuilderFactory trigger mapping
Co-Authored-By: [email protected] <[email protected]>
* style: apply biome formatting fixes
Co-Authored-By: [email protected] <[email protected]>
* fix: restore removed comments in RouteBuilder
Co-Authored-By: [email protected] <[email protected]>
* chore: add prisma migration for ROUTING_FORM_FALLBACK_HIT enum value
Co-Authored-By: [email protected] <[email protected]>
* fix: add ROUTING_FORM_FALLBACK_HIT to FormTriggerEvents type union
Co-Authored-By: [email protected] <[email protected]>
* test: add test coverage for triggerFallbackWebhook function
Co-Authored-By: [email protected] <[email protected]>
* refactor: consolidate fallback webhook firing with form submission webhooks
Move ROUTING_FORM_FALLBACK_HIT webhooks into the same Promise.all() batch
as FORM_SUBMITTED / FORM_SUBMITTED_NO_EVENT, eliminating redundant
getWebhooks/getWebhookTargetEntity/getOrgIdFromMemberOrTeamId calls.
- Add fallbackAction parameter to _onFormSubmission and onSubmissionOfFormResponse
- Remove triggerFallbackWebhook function and all its usages/imports
- Move getFallbackAction() earlier in handleResponse.ts and pass result through
- Update all tests to verify batched webhook behavior
Co-Authored-By: [email protected] <[email protected]>
* Add UI option for trigger
* feat: persist fallbackAction on queued form responses
When a routing form response is queued, the fallbackAction determined
during routing is now stored on the QueuedFormResponse record. When
the queued response is later converted to a real FormResponse, the
stored fallbackAction is passed to onSubmissionOfFormResponse so the
ROUTING_FORM_FALLBACK_HIT webhook fires correctly.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* test: add coverage for fallbackAction in queued form response flow
Verify that fallbackAction is persisted when queuing and passed through
to onSubmissionOfFormResponse when the queued response is converted.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <[email protected]>