Drip System Configuration Guide

The Valstorm Drip System allows you to schedule sequential, automated actions (drips) for your records. This system is built upon two core objects: the Drip Definition (the blueprint) and the Drip Enrollment (the active tracking of a record).

1. Drip Definition (drip_definition)

The Drip Definition acts as the template or "blueprint" for your campaign. It defines what should happen, when it should happen, and who it applies to. It does not store the state of individual records; rather, it stores the rules that the system uses to generate events.

Key Configuration Fields

FieldTypeDescription
NameTextThe internal name of the campaign (e.g., "New Lead Nurture").
ActiveBooleanMaster switch. If disabled, no new steps will execute for any enrollment linked to this definition.
Target SchemaLookup (Schema)Defines the type of record this drip targets (e.g., lead, contact, opportunity). This ensures the logic receives the correct data type.
AutomationLookup(Option A) Select a drag-and-drop Automation to execute at every step. The automation will receive the current step number as input logic.
FunctionLookup(Option B) Select a code-based Function to execute. This is an alternative to Automation for developers who prefer writing Python logic for complex drips.
Step ConfigurationJSONAn array defining the timeline of the drip. It maps step numbers to time delays.

Example:

[{"step": 1, "delay_minutes": 0}, {"step": 2, "delay_minutes": 1440}] | | Exit Condition | JSON | A set of rules checked before every step. If the target record matches these rules, the drip stops automatically.

Example:

{"status": "Won"} |

Note: You must select either an Automation OR a Function to handle the logic. The system will use whichever field is populated to execute the campaign steps.


2. Drip Enrollment (drip_enrollment)

The Drip Enrollment represents a single run of a specific record through a Drip Definition. It acts as the "state container," tracking exactly where the record is in the sequence.

Status Tracking

FieldDescription
  • Status | The current state of the enrollment:

  • Active: Pending future steps.

  • Paused: Halted manually; no steps will fire until resumed.

  • Completed: All steps in the configuration have finished.

  • Exited: The record met the Exit Condition (e.g., Client replied), stopping the drip early

  • Start Date Time: When the drip will begin executing.

  • Error: System failed to execute a step. |

  • Current Step | The integer number of the last successfully completed step. |

  • Last Run Date | The timestamp of the last executed step. |

Linkage & Metadata

FieldTypeDescription
Drip DefinitionLookupLinks this enrollment back to the blueprint rules.
Target RecordCompound LookupA dynamic link to the actual record being nurtured. Because drips can target Leads, Contacts, or custom objects, this field stores both the ID and the Schema Type of the target.
Scheduled ItemLookupA link to the specific system task waiting to fire the next step. If you cancel an enrollment, the system automatically removes this linked item.
Exit ReasonTextIf the status is "Exited" or "Error," this field explains why (e.g., "Exit Condition Met: Status changed to Won").
Error LogRich TextContains detailed technical logs if the automation or function failed, helping admins debug the issue.

How It Works

  1. Enrollment: A Trigger or API call creates a Drip Enrollment record, linking a Target Record (e.g., Lead: John Doe) to a Drip Definition. It has a start_date_time which will auto-create the first Scheduled Item to run.
  2. Scheduling: The system looks at the Step Configuration in the Definition. It calculates the delay for Step 1 and creates a Scheduled Item.
  3. Execution: When the scheduled time arrives:
  • The system checks the Exit Condition against the Target Record.
  • If passed, it runs the defined Automation or Function.
  • It updates the Current Step on the Enrollment.
  • It schedules the next step based on the configuration.

Examples

Here are 5 concrete examples of Drip System configurations. These highlight the system's flexibility across different objects (Leads, Invoices, Employees) and different types of actions (AI, Tasks, SMS).

1. The "AI-Powered Sales Nurture"

Showcases: Multi-channel outreach (Email + SMS) and AI integration.

  • Target Object: Lead
  • Trigger: Lead Status moves to "Attempted Contact".
  • Exit Condition: {"status": ["Connected", "Meeting Booked", "Bad Data"]}

The Sequence:

  • Step 1 (Day 0): Automation: Send "Intro Email" with a scheduling link.

  • Step 2 (Day 2): Automation: Send SMS: "Hi [Name], just checking if you saw my email?"

  • Step 3 (Day 5): AI Agent: Run "Lead Researcher" Agent.

  • Action: The Agent scrapes the lead's LinkedIn profile to find recent posts/news and updates a "Personalization Notes" field on the record for the sales rep to use later.

  • Step 4 (Day 7): Automation: Create Task for Owner: "Call [Lead Name] - Use AI notes for opener."


2. The "New Hire Onboarding" Journey

Showcases: Internal HR flows targeting the User/Employee object.

  • Target Object: User (or Employee)
  • Trigger: New User created with Department = "Sales".
  • Exit Condition: {"onboarding_status": "Complete"}

The Sequence:

  • Step 1 (Day 0 - Start Date): Automation: Send Email: "Welcome to the Team! Here are your logins."
  • Step 2 (Day 1): Function: provision_software_licenses
  • Action: Python script calls external APIs to create accounts in Slack, Valstorm, and Google Workspace.
  • Step 3 (Day 7): Automation: Send Form: "First Week Check-in Survey."
  • Step 4 (Day 30): Automation: Create Task for Manager: "Conduct 30-Day Performance Review."

3. The "Overdue Invoice" Chaser

Showcases: Finance automation targeting the Invoice object.

  • Target Object: Invoice
  • Trigger: Due Date passes AND Balance > $0.
  • Exit Condition: {"status": "Paid"}

The Sequence:

  • Step 1 (Day 1 Past Due): Automation: Send Email to Client: "Friendly Reminder: Invoice #[ID] is overdue."

  • Step 2 (Day 7 Past Due): Automation: Send SMS to Billing Contact: "Urgent: We haven't received payment for Invoice #[ID]."

  • Step 3 (Day 15 Past Due): Function: suspend_service_access

  • Action: Script toggles the client's Account Status to "Suspended" to prevent login.

  • Step 4 (Day 16 Past Due): Automation: Create Task for CFO: "Review Account for Collections."


4. The "Webinar Post-Event" Pack

Showcases: Content delivery and PDF generation.

  • Target Object: Contact
  • Trigger: Contact Tagged with "Attended: Q1 Tech Summit".
  • Exit Condition: {"unsubscribed": true}

The Sequence:

  • Step 1 (Day 0): Automation: Send Email: "Thanks for coming! Here is the slide deck."

  • Step 2 (Day 1): Function: generate_custom_report

  • Action: Generates a personalized PDF ROI analysis based on the Contact's industry and emails it to them as an attachment.

  • Step 3 (Day 4): Automation: Send Email: "Did you find the report useful? Here is a calendar link if you want to discuss the data."


5. The "Project Stalled" Risk Alert

Showcases: Operational health checks on Project objects.

  • Target Object: Project
  • Trigger: Project Status stays in "In Progress" with no updates for > 14 Days.
  • Exit Condition: {"last_activity_date": "Today"} (i.e., someone updated the project).

The Sequence:

  • Step 1 (Day 0): Automation: Send Slack DM to Project Manager: "Project [Name] hasn't been updated in 2 weeks. Is this blocked?"
  • Step 2 (Day 3): Automation: Send Email to Department Head: "Risk Alert: Project [Name] is stalling."
  • Step 3 (Day 7): Function: downgrade_project_health
  • Action: Automatically changes the Project's Health Score field to "At Risk" which triggers dashboard red flags.