# SMS Campaign Hooks These action hooks fire during SMS campaign lifecycle events, message sending, delivery tracking, and subscriber opt-in/out. All SMS hooks require FluentCRM Pro. ## Campaign Lifecycle ### `fluent_crm/sms_campaign_created` Fires when a new SMS campaign is created. **Parameters** - `$campaign` Campaign Model **Usage:** ```php add_action('fluent_crm/sms_campaign_created', function($campaign) { // New SMS campaign created }); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php` --- ### `fluent_crm/sms_campaign_updated` Fires when an SMS campaign is updated. **Parameters** - `$campaign` Campaign Model **Usage:** ```php add_action('fluent_crm/sms_campaign_updated', function($campaign) { // SMS campaign was modified }); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php` --- ### `fluent_crm/sms_campaign_status_active` Fires when an SMS campaign is activated (changed from draft to active). **Parameters** - `$smsCampaign` Campaign Model **Usage:** ```php add_action('fluent_crm/sms_campaign_status_active', function($smsCampaign) { // SMS campaign activated }); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php` --- ### `fluent_crm/sms_campaign_scheduled` Fires when an SMS campaign is scheduled for future sending. **Parameters** - `$smsCampaign` Campaign Model - `$scheduledAt` INT - Unix timestamp of scheduled send time **Usage:** ```php add_action('fluent_crm/sms_campaign_scheduled', function($smsCampaign, $scheduledAt) { // SMS campaign scheduled }, 10, 2); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php` --- ### `fluent_crm/sms_campaign_processing_start` Fires when SMS campaign processing begins (batch generation starts). **Parameters** - `$campaign` Campaign Model **Usage:** ```php add_action('fluent_crm/sms_campaign_processing_start', function($campaign) { // SMS campaign processing started }); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php` --- ### `fluent_crm/sms_campaign_duplicated` Fires when an SMS campaign is duplicated. **Parameters** - `$newCampaign` Campaign Model - the new copy - `$oldCampaign` Campaign Model - the original **Usage:** ```php add_action('fluent_crm/sms_campaign_duplicated', function($newCampaign, $oldCampaign) { // SMS campaign was duplicated }, 10, 2); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php` --- ### `fluent_crm/sms_campaign_archived` Fires when an SMS campaign is archived (auto-archived after completion or timeout). **Parameters** - `$smsCampaign` Campaign Model **Usage:** ```php add_action('fluent_crm/sms_campaign_archived', function($smsCampaign) { // SMS campaign archived }); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php`, `fluentcampaign-pro/app/Modules/SMS/SMSScheduler.php` --- ### `fluent_crm/sms_campaign_deleted` Fires when an SMS campaign is permanently deleted. **Parameters** - `$campaignId` INT - deleted campaign ID **Usage:** ```php add_action('fluent_crm/sms_campaign_deleted', function($campaignId) { // SMS campaign deleted }); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/Http/Controllers/SMSController.php` --- ## Sending & Delivery ### `fluent_crm/sms_sent` Fires when an SMS message is successfully sent. The result contains provider-specific response data. **Parameters** - `$smsMessage` Object - SMS message data - `$result` Mixed - provider response **Usage:** ```php add_action('fluent_crm/sms_sent', function($smsMessage, $result) { // SMS sent successfully // $result contains provider-specific response data }, 10, 2); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/SMSScheduler.php` --- ### `fluent_crm/sms_failed` Fires when an SMS message fails to send. **Parameters** - `$smsMessage` Object - SMS message data - `$errorMessage` String - error message from provider **Usage:** ```php add_action('fluent_crm/sms_failed', function($smsMessage, $errorMessage) { // SMS failed - log or retry error_log('SMS failed: ' . $errorMessage); }, 10, 2); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/SMSScheduler.php` --- ## Opt-in & Opt-out ### `fluent_crm/contact_sms_subscribed` Fires when a contact opts in to receive SMS messages. **Parameters** - `$subscriber` [Subscriber Model](/database/models/subscriber) - `$data` Array - opt-in data **Usage:** ```php add_action('fluent_crm/contact_sms_subscribed', function($subscriber, $data) { // Contact opted in to SMS }, 10, 2); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/SMSHelper.php` --- ### `fluent_crm/contact_sms_unsubscribed` Fires when a contact opts out of receiving SMS messages. **Parameters** - `$subscriber` [Subscriber Model](/database/models/subscriber) - `$data` Array - opt-out data **Usage:** ```php add_action('fluent_crm/contact_sms_unsubscribed', function($subscriber, $data) { // Contact opted out of SMS }, 10, 2); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/SMSHelper.php` --- ## Provider Webhooks ### `fluent_crm_sms_custom_provider_webhook` Generic webhook hook for custom SMS providers. Fires when an incoming webhook is received for an unrecognized provider. **Parameters** - `$bodyData` Array - webhook request body - `$provider` String - provider name **Usage:** ```php add_action('fluent_crm_sms_custom_provider_webhook', function($bodyData, $provider) { if ($provider === 'my_sms_service') { // Handle delivery receipt, status update, etc. } }, 10, 2); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/SMSReceiver.php` --- ### `fluent_crm_sms_{$provider}_webhook` Provider-specific webhook hook. The hook name includes the provider slug (e.g., `fluent_crm_sms_twilio_webhook`). **Parameters** - `$bodyData` Array - webhook request body **Usage:** ```php add_action('fluent_crm_sms_twilio_webhook', function($bodyData) { // Handle Twilio-specific webhook event }); ``` **Source:** `fluentcampaign-pro/app/Modules/SMS/SMSReceiver.php`