# Automation & Funnel Filters
These filter hooks let you customize automation funnels — trigger registration, block definitions, processing limits, delays, and sequence behavior.
## Funnel Registration
### `fluentcrm_funnel_triggers`
Filter the array of all registered funnel trigger definitions. Use this to add custom automation triggers.
**Parameters**
- `$triggers` Array - Default `[]`
**Usage:**
```php
add_filter('fluentcrm_funnel_triggers', function($triggers) {
$triggers['my_custom_trigger'] = [
'category' => 'Custom',
'label' => __('My Custom Trigger', 'fluent-crm'),
'description' => 'Fires when a custom event occurs'
];
return $triggers;
});
```
**Source:** `app/Http/Controllers/FunnelController.php`, `app/Http/Controllers/DashboardController.php`
---
### `fluentcrm_funnel_blocks`
Filter all funnel step block definitions available in the funnel editor.
**Parameters**
- `$blocks` Array - Default `[]`
- `$funnel` [Funnel Model](/database/models/funnel)
**Usage:**
```php
add_filter('fluentcrm_funnel_blocks', function($blocks, $funnel) {
$blocks['my_action'] = [
'category' => 'Custom',
'label' => __('My Custom Action', 'fluent-crm'),
'description' => 'Does something custom',
'type' => 'action'
];
return $blocks;
}, 10, 2);
```
**Source:** `app/Http/Controllers/FunnelController.php`
---
### `fluentcrm_funnel_block_fields`
Filter custom field definitions for funnel step blocks in the editor UI.
**Parameters**
- `$fields` Array - Default `[]`
- `$funnel` [Funnel Model](/database/models/funnel)
**Usage:**
```php
add_filter('fluentcrm_funnel_block_fields', function($fields, $funnel) {
$fields['my_action'] = [
'title' => 'My Action Settings',
'fields' => [
'message' => [
'type' => 'text',
'label' => 'Message'
]
]
];
return $fields;
}, 10, 2);
```
**Source:** `app/Http/Controllers/FunnelController.php`
---
### `fluent_crm_funnel_context_smart_codes`
Filter the smart codes available in the funnel email composer for a specific trigger context.
**Parameters**
- `$smartCodes` Array - Default `[]`
- `$triggerName` String - The funnel trigger name
- `$funnel` [Funnel Model](/database/models/funnel)
**Usage:**
```php
add_filter('fluent_crm_funnel_context_smart_codes', function($smartCodes, $triggerName, $funnel) {
if ($triggerName === 'my_custom_trigger') {
$smartCodes[] = [
'key' => '{{trigger.order_id}}',
'title' => 'Order ID'
];
}
return $smartCodes;
}, 10, 3);
```
**Source:** `app/Http/Controllers/FunnelController.php`
---
### `fluent_crm/funnel_icons`
Filter the funnel trigger category icons (SVG paths or Element Plus icon class strings).
**Parameters**
- `$icons` Array - Associative array of `slug => icon`
**Usage:**
```php
add_filter('fluent_crm/funnel_icons', function($icons) {
$icons['my_category'] = '';
return $icons;
});
```
**Source:** `app/Hooks/Handlers/AdminMenu.php`
---
### `fluent_crm/funnel_label_color`
Filter the array of available label colors for funnel steps.
**Parameters**
- `$colors` Array - Color hex values
**Usage:**
```php
add_filter('fluent_crm/funnel_label_color', function($colors) {
$colors[] = '#FF5733';
return $colors;
});
```
**Source:** `app/Services/Helper.php`
---
## Processing & Limits
### `fluent_crm/funnel_subscriber_statuses`
Filter which funnel-subscriber statuses should be processed each cycle.
**Parameters**
- `$statuses` Array - Default `['active']`
**Usage:**
```php
add_filter('fluent_crm/funnel_subscriber_statuses', function($statuses) {
$statuses[] = 'paused';
return $statuses;
});
```
**Source:** `app/Services/Funnel/FunnelProcessor.php`
---
### `fluent_crm/funnel_processor_batch_limit`
Filter the maximum number of funnel subscribers processed in a single processor run.
**Parameters**
- `$limit` INT - Default `200`
**Usage:**
```php
add_filter('fluent_crm/funnel_processor_batch_limit', function($limit) {
return 500;
});
```
**Source:** `app/Services/Funnel/FunnelProcessor.php`
---
### `fluent_crm/funnel_processor_max_processing_seconds`
Filter the hard time limit (seconds) for the funnel processor per run.
**Parameters**
- `$seconds` INT - Default `55`
**Usage:**
```php
add_filter('fluent_crm/funnel_processor_max_processing_seconds', function($seconds) {
return 30;
});
```
**Source:** `app/Services/Funnel/FunnelProcessor.php`
---
### `fluent_crm/funnel_seq_delay_in_seconds`
Filter the computed delay (in seconds) for a funnel sequence step. This applies to wait/delay steps, custom field date-based delays, and more.
**Parameters**
- `$waitTimeSeconds` INT - Computed delay in seconds
- `$settings` Array - Step settings
- `$sequence` Object - Sequence data
- `$funnelSubId` INT - Funnel subscriber ID
**Usage:**
```php
add_filter('fluent_crm/funnel_seq_delay_in_seconds', function($waitTime, $settings, $sequence, $funnelSubId) {
// Add an extra 1-hour buffer to all delays
return $waitTime + 3600;
}, 10, 4);
```
**Source:** `app/Services/Funnel/FunnelHelper.php`
---
## Trigger Gates & Sequence Hooks
### `fluentcrm_funnel_will_process_{$triggerName}`
Dynamic filter to gate whether a funnel should be triggered for a specific event. Return `false` to prevent the funnel from firing.
**Parameters**
- `$willProcess` Boolean - Default `true`
- `$funnel` [Funnel Model](/database/models/funnel)
- `$subscriberData` Array - Contact data
- `$originalArgs` Array - Original trigger arguments
**Usage:**
```php
add_filter('fluentcrm_funnel_will_process_user_registration', function($willProcess, $funnel, $subscriberData, $originalArgs) {
// Only process for specific roles
if ($subscriberData['role'] !== 'subscriber') {
return false;
}
return $willProcess;
}, 10, 4);
```
**Source:** Various trigger files in `app/Services/Funnel/Triggers/`
---
### `fluentcrm_funnel_editor_details_{$triggerName}`
Dynamic filter to enrich the [Funnel](/database/models/funnel) object before it is returned to the editor. Use this to inject extra properties or computed data.
**Parameters**
- `$funnel` [Funnel Model](/database/models/funnel)
**Usage:**
```php
add_filter('fluentcrm_funnel_editor_details_my_trigger', function($funnel) {
$funnel->extra_options = ['option1', 'option2'];
return $funnel;
});
```
**Source:** `app/Hooks/Handlers/FunnelHandler.php`, `app/Http/Controllers/FunnelController.php`
---
### `fluentcrm_funnel_sequence_saving_{$actionName}`
Dynamic filter to transform or validate a funnel sequence step before it is saved. The `{$actionName}` is the step's action type slug.
**Parameters**
- `$sequence` Array - Sequence step data
- `$funnel` [Funnel Model](/database/models/funnel)
**Usage:**
```php
add_filter('fluentcrm_funnel_sequence_saving_my_action', function($sequence, $funnel) {
// Validate or transform the sequence settings
$sequence['settings']['validated'] = true;
return $sequence;
}, 10, 2);
```
**Source:** `app/Services/Funnel/FunnelHelper.php`, `app/Http/Controllers/FunnelController.php`
---
### `fluent_crm/webhook_ssl_verify`
Control whether SSL is verified when making outgoing webhook requests from a funnel action.
**Parameters**
- `$verify` Boolean - Default `false`
**Usage:**
```php
add_filter('fluent_crm/webhook_ssl_verify', function($verify) {
return true; // Enforce SSL verification
});
```
**Source:** `app/Http/Controllers/FunnelController.php`
---
## Conditions & A/B Testing
### `fluentcrm_automation_condition_groups`
Filter the available condition groups for automation rules.
**Parameters**
- `$groups` Array - condition group definitions
- `$funnel` [Funnel Model](/database/models/funnel)
**Usage:**
```php
add_filter('fluentcrm_automation_condition_groups', function($groups, $funnel) {
$groups[] = [
'value' => 'my_custom_group',
'label' => 'My Custom Conditions'
];
return $groups;
}, 10, 2);
```
**Source:** `fluentcampaign-pro/app/Services/Funnel/Conditions/FunnelCondition.php`
---
### `fluentcrm_automation_custom_conditions`
Filter custom condition options for automation rules.
**Parameters**
- `$conditions` Array - condition definitions
- `$funnel` [Funnel Model](/database/models/funnel)
**Usage:**
```php
add_filter('fluentcrm_automation_custom_conditions', function($conditions, $funnel) {
$conditions['has_membership'] = [
'label' => 'Has Active Membership',
'type' => 'yes_no_check'
];
return $conditions;
}, 10, 2);
```
**Source:** `fluentcampaign-pro/app/Services/Funnel/Conditions/FunnelCondition.php`
---
### `fluentcrm_automation_custom_condition_assert_{$propertyName}`
Dynamic filter to evaluate a custom automation condition. Return `true` or `false` to pass or fail the condition.
**Parameters**
- `$result` Boolean - default condition result
- `$condition` Array - condition config
- `$subscriber` [Subscriber Model](/database/models/subscriber)
- `$sequence` Object - sequence data
- `$funnelSubscriberId` INT - funnel subscriber ID
**Usage:**
```php
add_filter('fluentcrm_automation_custom_condition_assert_has_membership', function($result, $condition, $subscriber) {
return user_has_membership($subscriber->user_id);
}, 10, 3);
```
**Source:** `fluentcampaign-pro/app/Services/Funnel/Conditions/FunnelCondition.php`
---
### `fluent_crm/funnel_ab_test_is_b`
Determines whether a subscriber falls into the B variant of an automation A/B test.
**Parameters**
- `$isB` Boolean - whether this subscriber gets variant B
- `$sequence` Object - sequence step data
- `$funnelSub` Object - funnel subscriber data
**Usage:**
```php
add_filter('fluent_crm/funnel_ab_test_is_b', function($isB, $sequence, $funnelSub) {
return $isB;
}, 10, 3);
```
**Source:** `fluentcampaign-pro/app/Services/Funnel/Conditions/FunnelABTesting.php`
---
### `fluent_crm/event_tracking_condition_groups`
Filter condition groups available for event tracking automation triggers.
**Parameters**
- `$groups` Array - condition groups
**Usage:**
```php
add_filter('fluent_crm/event_tracking_condition_groups', function($groups) {
$groups[] = [
'value' => 'event_custom',
'label' => 'Custom Event Conditions'
];
return $groups;
});
```
**Source:** `fluentcampaign-pro/app/Services/Funnel/Triggers/TrackingEventRecordedTrigger.php`
---
### `fluent_crm/http_webhook_body`
Filter the request body sent to external webhooks in HTTP webhook automation actions.
**Parameters**
- `$body` Array - request body
- `$sequence` Object - sequence step data
- `$subscriber` [Subscriber Model](/database/models/subscriber)
**Usage:**
```php
add_filter('fluent_crm/http_webhook_body', function($body, $sequence, $subscriber) {
$body['custom_field'] = $subscriber->custom_values['my_field'] ?? '';
return $body;
}, 10, 3);
```
**Source:** `fluentcampaign-pro/app/Services/Funnel/Actions/HTTPSendDataAction.php`