Replies: 2 comments 2 replies
|
We've been hitting the same issue in production — every field blur fires Proposal — "Required fields" picker in trigger config Extend the existing Record is updated trigger with a multi-select picker labelled "Required fields". The picker lists every field on the object (including app-extended ones), and the workflow is only dispatched when all selected fields are non-empty at the moment of evaluation. Empty fields → silent skip with a counter log, no error surfaced to the UI. Why this works better than the three listed options
The new picker reuses the existing trigger config UI, requires zero changes for users who don't enable it (backward compatible), and gives admins explicit control per workflow. Design questions worth pinning down before PR work
Rough implementation map:
Happy to send a PR if maintainers agree with the direction, and I can scope the first PR down to just |
|
@n2ojim now it's possible to which fields updates workflow should listen in order to be triggered |
Uh oh!
There was an error while loading. Please reload this page.
Scope & Context
Example:
Current behavior
Currently, Twenty relies on an instant auto-save mechanism. Every time a user modifies a single field, the record is immediately saved to the database, and a record.updated webhook is dispatched instantly. If a user needs to update 3 different fields to provide the necessary context for an n8n automation, 3 separate webhooks are fired sequentially. The external automation is triggered on the very first field change, receiving incomplete data because the user hasn't finished filling out the other fields yet. This results in failed automations and unnecessary compute/credit usage on external tools.
Example:
Expected behavior
Users should be able to modify multiple fields and ensure the external webhook receives the full, completed state of the record in a single batch. We need a way to commit changes globally or trigger the webhook manually. This could be resolved in a few ways:
Technical inputs
Depending on the chosen path, here are some technical suggestions:
For the Custom Action Button (Preferred CRM approach): Add a custom component in the record header. Create a new webhook event type (e.g., record.custom_action) that passes the entire record object when clicked.
For the Manual Save Mode: Introduce an isEditing local state in the frontend. When active, hold the updateRecord mutations in an array/object instead of firing them onChange. When the user clicks "Save", dispatch a single bulk GraphQL/REST update.
For Webhook Debouncing: Implement a debouncer (e.g., 2-3 seconds) in the backend webhook dispatcher service (nestjs queues) to aggregate update events on the same recordId before firing the external HTTP request.
All reactions