Create flow
Use this guide to create a campaign, configure its data, build a workflow, start the campaign, and add participants.
To understand node types before you build, see Trigger nodes, Conditions, and Action nodes. For general information on how flows work, see Flows basics
For a complete campaign pattern, see Example flow: Payment reminder.
Prerequisites
Before you create a flow-based campaign, make sure you have:
- At least one configured agent with the communication channel you plan to use, such as email, Telegram, WhatsApp, or voice
- The communication channels you plan to use
- Participant data ready to upload as a CSV file or through the API
Step 1: Create a campaign
- In the left sidebar, go to Campaigns > Flows
- Click Create Campaign +
- Fill in Name and Description. The description is optional
- Click Create
Step 2: Configure data fields
The Data tab defines the information stored for campaign participants. Configure data fields before you upload participants so the system can map CSV columns and API payload fields correctly.
When you upload a CSV file, any data you want to import must have a matching field with Import enabled. For example, if your campaign tracks payment due dates, add a due_date field before you upload the participant list.
Fields marked as Required must be present in every uploaded row.
Each field belongs to either the Customer Profile or Participant level. For details, see Flows basics. System fields, such as External ID, Email, Phone, Telegram ID, Web ID, Telegram Username, and WhatsApp ID, are added automatically and are locked.
The table includes these columns:
| Column | Description |
|---|---|
| Title | The display name shown in the interface |
| Name | The field name used for imports, API payloads, and expressions |
| Description | A short explanation of the field |
| Type | The field data type, such as string, email, phone, date, or datetime |
| Level | Where the field is stored: Customer Profile or Participant |
| Import | Whether the field can be populated from an upload |
| Required | Whether uploaded rows must include this field |
Configure these options for each field:
| Option | Description |
|---|---|
| Import | Allows the field to be included in a CSV upload |
| Required | Requires the field in every uploaded row. Available only when Import is enabled |
To add or remove fields, click Manage fields.
Use customer profile fields for shared contact data, and participant fields for campaign-specific status, progress, or results.
Step 3: Build the workflow
- Open the Workflow tab.
- In the Flows panel, select the flow you want to edit. To add another flow, click New flow
- Drag nodes from the node panel onto the canvas
- Connect nodes by drawing a line from one node's output port to another node's input port
- Click a node to open its configuration panel on the right
- Configure the required fields, then click Save
Flows are saved automatically as you make changes.
Each flow runs independently. It starts when its own trigger fires, regardless of other flows in the campaign. To move participants between flows, use the To Another Flow action node in the source flow and the From Another Flow trigger in the destination flow.
- To remover a node, select a node or branch on the canvas, then press Delete or Backspace.
- Connect both Match and Else outputs for every Field Check node. If one path is disconnected, participants on that path stop at the condition.
- Re-uploading a participant triggers the flow again, which can cause duplicate communications. To prevent this, add a Field Check right after the trigger — check whether the participant was already contacted, and only continue if they weren't.
Step 4: Start the campaign
To start a campaign:
- Activate your flows:
- In the upper-left corner of the canvas, click Flows
- From the dropdown list, click the three dots next to each configured flow and select Activate
- In the upper-right corner of the page, click Start. After the campaign starts, the button changes to Stop
You can activate, deactivate, or delete the flow in the same manner. While the campaign is active, flow activation controls are disabled.
Check that the campaign has at least one active flow and that the trigger is connected to the expected action nodes.
Step 5: Add participants
You can add participants in two ways: upload a file in the portal, or call the API.
In both cases, when a participant is added for the first time, the system automatically triggers the Participant Created event. When an upload or API call updates an existing participant, the system triggers Participant Updated.
If several active flows use the same trigger, each flow starts for the same participant. Deactivate flows that shouldn't run before you upload or update participants.
Upload in the portal
Upload a CSV file in the campaign interface.
- Open the campaign and go to the Uploads tab
- Click Upload data
- Drag and drop your CSV file or click to select it
- Click Upload
The system starts processing the file immediately. Track progress on the Uploads tab.
The page shows:
- Last upload: The date and time of the latest upload, shown in the tenant timezone
- Total participants processed: The total number of rows processed across uploads
- Upload data: Opens the upload dialog
The uploads table includes Upload ID, Uploaded at, Participants: total / new / updated, and Status. Dates and times are shown in the tenant timezone. Click the participant counts, or double-click an upload row, to open the Participants tab filtered by that upload.
Click the view icon on an upload row to see upload details.
- Upload one CSV file at a time. The maximum file size is 4 GB
- Test with a small participant batch before the full contact list
- You can re-upload participants to update their data. Only fields with new values are overwritten — empty fields in the file leave existing data unchanged
Add participants through the API
Use the API to add participants programmatically. For example, add participants when a new record appears in your CRM or when you need to sync campaign enrollment from an internal backend.
To send a request, you need:
- Campaign ID: The campaign ID from the campaign URL.
- Participant attributes: Field names and values to import. Use the Name values from the campaign Data tab, such as
email,phone,external_id, or custom field names. - Timezone: Optional. Use an IANA timezone, such as
Europe/London, when participant dates and datetimes should be interpreted in a participant-specific timezone. - Object ID: Optional. Use
object_idwhen the same customer can appear in the same campaign more than once for different objects, such as loans, appointments, or orders.
Example request body:
[
{
"attributes": {
"external_id": "cust_123",
"email": "alex@example.com",
"due_date": "2026-06-30"
},
"timezone": "Europe/London",
"object_id": "loan_456"
}
]
Call Upload campaign participants to add participants to a flow-based campaign.
Step 6: Review participants
After you upload participants, go to the Participants tab to see everyone enrolled in the campaign. You can sort the list and open the Filter panel on the right.
Click any row to expand it and see the participant's full details:
- Details: All field values for the participant, including customer profile and campaign-specific fields
- Results: The campaign outcome for the participant, including Result and Result Date & Time
The table shows Name, Email, Phone, External ID, Communications, and Created at by default. Dates and times are shown in the tenant timezone.
Use the Filter panel to filter by name, email, phone, status, creation date range, external ID, or upload ID. If you opened Participants from an upload row, the upload ID filter is applied automatically.
Click the delete icon on a row to remove that participant from the campaign. This doesn't delete the customer profile. Customer profile data, such as email or phone, can still be reused if the same contact is added again.
Click the communications count on any row to open the communications modal for that participant. Each communication shows its name, status, channel, agent ID, scheduled time, created time, and a link to the session. Dates and times are shown in the tenant timezone. Communication statuses are:
| Status | Meaning |
|---|---|
| Planned, Started, Delivered, Read | In progress |
| Replied, Completed | Successful |
| NoResponse, Canceled, Skipped, Failed | Not completed |
If communication results aren't available in Field Check, make sure the agent has conversation results configured and that the flow checks those results after a Communication Ended trigger.
Analytics
The Analytics tab shows a campaign dashboard powered by Apache Superset. The dashboard is filtered to the current campaign and shows aggregated metrics and charts based on participant and communication data.
The dashboard is configured at the infrastructure level. To learn how Superset is connected and how dashboards are set up, see Monitoring overview.
Example flow: Payment reminder
This example shows a common campaign pattern. When a participant is added, the flow checks whether payment has been received. Then it routes the participant to the right reminder sequence based on the due date.
Flow structure:
Step-by-step:
-
Participant Created: The node is triggered when a contact is added to the campaign.
-
Field Check: Is Payment Received = false: Checks whether the participant hasn't paid.
- Match: The participant hasn't paid. The flow checks the due date.
- Else: The participant has already paid. The flow goes to Cancel Communications and stops further outreach.
-
Field Check: Due Date is on or after Today (+3): Checks whether the due date is at least three days away.
- Match: The due date is at least three days away. The flow sends an early reminder through WhatsApp Communication:
REMINDED_BEFORE_2D. - Else: The due date is less than three days away. The flow continues to the next check.
- Match: The due date is at least three days away. The flow sends an early reminder through WhatsApp Communication:
-
Field Check: Due Date is on or after Today (+0): Checks whether the due date is today or later.
- Match: The due date hasn't passed. The flow sends a final reminder through WhatsApp Communication:
REMINDED_DUE_DATE.
- Match: The due date hasn't passed. The flow sends a final reminder through WhatsApp Communication:
Participants who already paid are removed from the outreach sequence. Participants who haven't paid receive reminders based on how close the due date is.
For larger flows, click Re-center at the bottom of the canvas to bring the flow back to the center.
Related resources
- Flows basics: Understand concepts, the data model, and node types.
- Trigger nodes: Start flows with campaign events.
- Conditions: Configure Field Check operators.
- Action nodes: Configure action nodes.
- Communication channels: Choose channels for communication action nodes.