Lifecycle Rule
Lifecycle rules are the easiest way to add automation to your solution. Lifecycle rules have 2 parts - Lifecycle events and Lifecycle actions.
Lifecycle events are generated every time any change occurs in the system. For example when you update a lead - a lead being a process - an event called process:update:post
is generated carrying the details of the change.
So we can write rules to execute automatic lifecycle actions basis lifecycle events. For example we can say whenever a lead is updated send a notification to the lead assignee. Here send-notification
is the lifecycle action we want to execute.
To summarize, the following is a lifecycle rule
When a lead is updated, send a notification to the assignee
- Lifecycle Event -> When lead is updated
- Lifecycle Action -> Send a notification to the assignee
Event Conditions
More often than not we would want to add some conditions to figure out when we want to run a rule. Continuing the previous example - it would be far more useful to notify a lead assignee when important updates happen to the lead. For example
When a lead's state changes to converted, send an email to the assignee
Here we added an extra condition called "when the lead's state changes to converted" - These extra conditions / criteria are implemented via event conditions that we can add to any rule. Conditions follow standard rule engine grammar
Action Definition
Action definition is where we configure the exact parameters needed to run an action. For example here
When a lead's state changes to converted, send an email to the assignee
we would want to define what goes into the email as
{
"emailSubject": "{{process.data.lead_id}} has been conveerted",
"emailBody": "Hi {{user.firstName}}, congratulations your lead {{process.data.lead_id}} is now converted."
}
Here we are able to exactly configure what the action is going to be in the context of the event which in this case is a lead update. In the action definition you will be able to access all data pertaining to the update like process details, user details, etc...
Tagging
Lifecycle rules should be tagged against a relevant meta entity like procedure, entity or statetask.
Sync/Async
Rules can be processed in sync or async manner with the event. Ordering currently is not guaranteed for async rules.
Populate
many times we need to populate the original event for extra info. The main concerns around populating are
- latency - too many populates = too many data fetches = slower rules
- more complex rules
Currently populate is done at 3 levels
- process-event
- all task events get populated with
populatedTask
- all task events get populated with
- process-action
- all events with the correct populatePath definition gets populated in-situ - original event object gets mutated
- action implementation
- individual actions themselves also populate data usually into a key called
_meta
- individual actions themselves also populate data usually into a key called
List of events
- api-check:post
- booking:update:post
- call:create:post
- call:create:pre
- call:update:post
- email:received:post
- form-response:create:post
- process:allocate:post
- process:create:post
- process:create:pre
- process:state-change:post
- process:update:post
- process:update:pre
- record:create:post
- record:update:post
- task:create:post
- task:create:pre
- task:update:post
- task:update:pre
- upload-job:complete:post
- user:login:post
- user:logout:post
- webhook:inbound:post
List Of Actions
- process:start
- record:create
- record-process:create
- process:complete
- process:update
- process:bulk-update
- process:find-one-and-update
- task:create-from-statetask
- task:allocate
- task:bulk-update
- record:find-and-update
- script:run
- task:webhook-task-external
- process:webhook-process-external
- call:webhook-call-external
- task:webhook
- process:bulk-find-and-complete
- process:update-using-rule
- process:modify-query
- external-api:call
- call:link-record-and-process
- notify:email
- notify:sms
- notification:create
- external-data-store:push