Workflows (or workflows) are Kafinea’s automation engine. They automatically trigger actions when an event occurs on a record: sending emails, updating fields, creating records, calling an external service, etc. When properly configured, they eliminate repetitive tasks, reduce human error, and ensure your business rules are applied consistently.
1. Access workflows #
Workflows are managed from Settings > Automation and communication > Workflows. The list shows all existing workflows with their target module, status (active/inactive), and description.
From this list, you can:
- Create a new workflow
- Edit an existing workflow
- Enable or disable a workflow
- Delete a workflow
2. Create a workflow #
Creating a workflow takes place in three steps: basic information, the trigger, then conditions and actions.
Step 1 — Basic information #
| Field | Description |
|---|---|
| Name | A clear name to identify the workflow (e.g., “Unpaid invoice reminder”) |
| Description | An optional description of the expected behavior |
| Target module | The module the workflow applies to (Invoices, Contacts, Tickets…) |
| Status | Active or inactive — an inactive workflow never triggers |
Tip: Adopt a clear naming convention for your workflows. For example: “[Module] — Action” (e.g., “Invoice — Automatic send after finalization”). This makes maintenance easier as the number of workflows grows.
Step 2 — Trigger #
The trigger determines when the workflow runs. Three types of triggers are available:
| Trigger | Behavior |
|---|---|
| On creation | The workflow runs only when a new record is created |
| On update | The workflow runs on every update to the record (including on creation) |
| By time interval | The workflow runs on a schedule (see the “Scheduling” section) |
Recurrence (for the “On update” trigger):
When you choose the “On update” trigger, you can specify the recurrence:
- The first time the condition is met: the workflow runs only once per record, the first time the conditions are satisfied
- Every time the condition is met: the workflow runs on every save as long as the conditions are satisfied
Example: A “Send a welcome email” workflow on the Contacts module with the recurrence “The first time the condition is met” ensures that only one welcome email is sent per contact, even if the record is updated several times afterward.
Scheduling (time-interval trigger) #
When the trigger is “By time interval”, you configure the run frequency:
| Frequency | Description |
|---|---|
| Hourly | Runs every hour |
| Daily | Runs once per day at a specific time |
| Weekly | Runs on certain days of the week at a specific time |
| Monthly by date | Runs on certain days of the month (e.g., the 1st and the 15th) |
| Specific date | One-time run on a specific date |
| Yearly | Runs on specific dates each year |
For all frequencies except “Hourly”, you define the execution time.
Note: Scheduled workflows are executed by the Kafinea scheduler. They apply to all records in the target module that match the defined conditions, not to a single record. This is what makes them particularly powerful for bulk processing (reminders, periodic updates, notifications…).
Important: The number of scheduled workflows is limited. If the limit is reached, the “By time interval” option is disabled. Contact your administrator if you need to increase this limit.
Step 3 — Conditions and actions #
After defining the trigger, you configure the filtering conditions and the actions to run.
3. Conditions #
Conditions determine which records are affected by the workflow. They work like an advanced filter.
Build a condition #
Each condition consists of:
- A field from the target module (or a related module)
- A comparison operator
- A reference value
Available operators:
| Operator | Description |
|---|---|
| is equal to | Exact value |
| is not equal to | Different from the value |
| starts with | The field starts with the value |
| ends with | The field ends with the value |
| contains | The field contains the value |
| does not contain | The field does not contain the value |
| is less than | Numeric value or earlier date |
| is greater than | Numeric value or later date |
| is less than or equal to | Numeric value or date less than or equal to |
| is greater than or equal to | Numeric value or date greater than or equal to |
| is empty | The field has no value |
| is not empty | The field has a value |
| has changed | The field was modified (useful with the “On update” trigger) |
| has changed to | The field was modified and its new value matches |
Condition groups #
Conditions can be combined with the logical operators AND and OR:
- All conditions (AND): all conditions in the group must be true
- At least one condition (OR): at least one condition in the group must be true
You can create multiple condition groups to build complex rules.
Example: For an unpaid invoice reminder workflow, you could define:
- Group 1 (AND): Status is equal to “Sent” AND Due date is less than “today”
This workflow will target all sent invoices whose due date has passed.
Expressions in conditions #
In addition to fixed values, you can use dynamic expressions in conditions:
- Today: today’s date
- Tomorrow: tomorrow’s date
- Yesterday: yesterday’s date
- Value of another field: compare a field with the value of another field in the same record
4. Actions (tasks) #
Actions define what the workflow does when the conditions are met. You can add multiple actions to the same workflow, which will run in order.
Send an email #
Sends an email to one or more recipients.
| Parameter | Description |
|---|---|
| Recipient | Email address from a record field, a user, a group, or a fixed address |
| Subject | The email subject (can contain record variables) |
| Body | The email content in rich text format (can contain record variables) |
| Attachments | Documents linked to the record |
Note: Emails are not sent instantly. They are placed in a queue and sent by the scheduler. A short delay between the workflow trigger and receiving the email is therefore normal.
Tip: Use variables (e.g.,
$contacts-lastname$,$invoice-invoice_no$) to personalize the email content with record data. The list of available variables is displayed in the editor.
Update fields #
Automatically changes the value of one or more fields in the record.
| Parameter | Description |
|---|---|
| Field | The field to modify |
| Value | The new value (fixed, expression, or value from another field) |
Example: When a ticket moves to the “Resolved” status, automatically set the “Resolution date” field to today’s date.
Create a task (todo) #
Automatically creates a task in the calendar.
| Parameter | Description |
|---|---|
| Title | The task title |
| Status | The initial task status |
| Priority | The task priority |
| Due date | The deadline (can be calculated, e.g., “3 days after today”) |
| Assigned to | The responsible user or group |
Create an event #
Automatically creates an event in the calendar (meeting, call…).
| Parameter | Description |
|---|---|
| Title | The event title |
| Type | Call, meeting, etc. |
| Date and time | The start and end of the event |
| Assigned to | The responsible user or group |
Create a record #
Automatically creates a new record in another module.
| Parameter | Description |
|---|---|
| Target module | The module in which to create the record |
| Field mapping | The mapping between the source record fields and the new record fields |
Example: When an accepted quote is created, automatically create a customer order with the same product lines.
Call a custom function #
Runs a specific business function developed for your Kafinea instance. These functions make it possible to automate complex processes that cannot be achieved with standard actions.
Note: Available custom functions depend on your configuration. Contact your integrator to learn which functions are available and to create new ones.
Webhook #
Sends an HTTP request to an external service when the workflow triggers. It is the ideal tool for connecting Kafinea to other applications.
| Parameter | Description |
|---|---|
| URL | The address of the external service to call |
| HTTP method | POST, GET, PUT, PATCH, or DELETE |
| Format | The format of the data sent (JSON) |
| Authentication | None, Basic Auth, Bearer Token, or custom header |
The record data is automatically included in the request in JSON format, with the record type and all its fields.
Example: When an invoice is finalized, send a webhook to your accounting software to automatically synchronize entries.
Tip: Webhooks allow you to integrate Kafinea with automation platforms such as Zapier, Make (formerly Integromat), or n8n, opening up virtually unlimited integration possibilities.
AI Prompt #
Sends the record data to an artificial intelligence service with a custom prompt, then automatically updates fields with the generated response.
| Parameter | Description |
|---|---|
| Prompt | The instructions sent to the AI (what you are asking it to do) |
| Fields to update | The record fields that will receive the AI response |
The AI automatically receives the full context of the record: its fields, linked parent records, attached documents, images, product lines, and organization information.
Example: When a support ticket is created, use AI to analyze the problem description and automatically fill in the “Category” field and the “Suggested priority” field.
Example: When a scanned supplier invoice is received, use AI to automatically extract the amount, date, and invoice number from the attached document.
Send an SMS #
Sends an SMS to a phone number from the record.
Note: This action requires prior configuration of an SMS provider in Kafinea settings.
5. Common use cases #
Sales automation #
- Unpaid invoice reminders: daily scheduled workflow that sends a reminder email for invoices whose due date has passed
- New quote notification: when a quote is created, send an email to the sales manager
- Opportunity follow-up: create a reminder task when an opportunity has not been updated for 7 days
Project management #
- Assignment notification: send an email to someone when they are assigned to a project task
- Status update: automatically update a project’s status when all its tasks are completed
Customer Support #
- Acknowledgement of receipt: send a confirmation email to the customer when a ticket is created
- Automatic escalation: if a ticket is not handled within 48 hours, send a notification to the team lead
- Resolution notification: send an email to the customer when the ticket moves to the “Resolved” status
Human resources #
- Welcome email: send a welcome email when a new person record is created
- End-of-contract reminder: scheduled workflow that notifies HR 30 days before the end of an employment contract
External integrations #
- Accounting synchronization: send a webhook to the accounting software each time an invoice is finalized
- Slack/Teams notification: send a webhook to a messaging channel when important events occur
- AI enrichment: automatically analyze incoming documents and fill in relevant fields
6. Best practices #
- One workflow = one responsibility: avoid overloading a workflow with too many actions. Prefer several simple workflows over one complex workflow
- Name clearly: a good workflow name describes its trigger and its action (e.g., “Invoice — Reminder D+30”)
- Test before enabling: create the workflow with an inactive status, verify the conditions on a few records, then enable it
- Use the “one-time” recurrence for one-off notifications (welcome, confirmation) to avoid multiple sends
- Document your workflows: use the description field to explain the business context and the rules applied
- Monitor scheduled workflows: regularly check in the scheduler that executions are running correctly
7. Frequently asked questions #
Can I have multiple actions in the same workflow?
Yes, you can add as many actions as needed. They run in the order in which they appear.
My workflow email is not sent immediately. Is that normal?
Yes, emails are placed in a queue and sent by the scheduler. The delay depends on the scheduler’s run frequency (usually a few minutes).
How do I know whether a workflow ran correctly?
Check the event log to review executions and identify any errors.
Can I use a workflow to modify a related record (parent or child)?
Yes. The “Update fields” action allows you to directly modify fields on a linked parent record via a reference field. In the configuration interface, fields from related modules appear in the form “(Reference field: (Module) Target field)”. For example, you can update an account’s phone number from a workflow on contacts. However, to modify child records (which reference the current record), use the “Call a custom function” action or create a separate workflow on the child module.
What is the difference between a scheduled workflow and the scheduler?
The scheduler is the technical engine that runs background tasks (including scheduled workflows). A scheduled workflow is a business rule that you configure and that will be executed by the scheduler according to the defined frequency.
Can I duplicate an existing workflow?
There is no direct duplication feature. You must create a new workflow and reconfigure the settings manually.
Do workflows run during a CSV import?
No, workflows do not trigger during a CSV import. The import uses a batch process optimized for performance that does not go through the workflow triggering mechanism. If you need to apply automatic processing after an import, you can use a scheduled workflow that periodically checks records that were recently created or modified.