multek / laravel-customer-engagement
A unified customer engagement platform for Laravel — contracts, DTOs, and manager for push notifications, user sync, and event tracking across multiple providers.
Package info
github.com/Multek-Company/laravel-customer-engagement
pkg:composer/multek/laravel-customer-engagement
v1.0.0
2026-04-01 16:50 UTC
Requires
- php: ^8.2
- illuminate/bus: ^11.0|^12.0|^13.0
- illuminate/notifications: ^11.0|^12.0|^13.0
- illuminate/queue: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^9.0|^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
This package is auto-updated.
Last update: 2026-04-01 18:20:33 UTC
README
A unified customer engagement platform for Laravel. Provides contracts, DTOs, and a driver-based manager for push notifications, user sync, and event tracking across multiple providers.
Features
- Driver-Based Architecture - Swap providers (OneSignal, Braze, Firebase, etc.) without changing application code
- Capability Contracts -
SyncsUsers,SendsNotifications,TracksEventsinterfaces for fine-grained driver capabilities - Laravel Notification Channel -
EngagementChannelworks with Laravel's native notification system - DTOs -
Customer,Notification, andCustomerEventdata transfer objects for type-safe interactions - Model Trait -
HasCustomerEngagementfor syncing Eloquent models - Async Jobs - Queue-based customer sync with
SyncCustomer - Events -
NotificationSentandNotificationFailedevents for observability - Null Driver - Built-in null driver for testing and environments without a provider
Requirements
- PHP 8.2+
- Laravel 11.0+
Installation
composer require multek/laravel-customer-engagement
Publish the config file:
php artisan vendor:publish --tag=customer-engagement-config
Available Drivers
| Driver | Package | Capabilities |
|---|---|---|
| OneSignal | multek/laravel-onesignal |
Notifications, User Sync, Event Tracking |
| Null | Built-in | None (testing/fallback) |
Usage
Configuration
// config/customer-engagement.php 'default' => env('ENGAGEMENT_DRIVER', 'onesignal'),
Sending Notifications
use Multek\CustomerEngagement\Facades\Engagement; use Multek\CustomerEngagement\DTOs\Notification; $notification = new Notification( title: 'Order Shipped', body: 'Your order #456 has been shipped.', data: ['order_id' => 456], ); // Send to a single user Engagement::sendToUser('user_123', $notification); // Send to multiple users Engagement::sendToUsers(['user_1', 'user_2'], $notification); // Send to a segment Engagement::sendToSegment('Active Users', $notification);
User Sync
use Multek\CustomerEngagement\DTOs\Customer; $customer = new Customer( externalId: 'user_123', tags: ['plan' => 'pro', 'role' => 'admin'], ); Engagement::createUser($customer); Engagement::updateUser($customer); Engagement::deleteUser('user_123');
Event Tracking
use Multek\CustomerEngagement\DTOs\CustomerEvent; $event = new CustomerEvent( externalId: 'user_123', name: 'purchase', payload: ['amount' => 99.90, 'product' => 'Pro Plan'], ); Engagement::trackEvent($event);
Capability Checks
// Check what the current driver supports Engagement::syncsUsers(); // bool Engagement::sendsNotifications(); // bool Engagement::tracksEvents(); // bool // Check a specific driver Engagement::syncsUsers('onesignal'); // bool
Using a Specific Driver
// Override the default driver for a single call Engagement::sendToUser('user_123', $notification, driver: 'onesignal');
Creating a Custom Driver
Implement the contracts your provider supports:
use Multek\CustomerEngagement\Contracts\EngagementDriver; use Multek\CustomerEngagement\Contracts\SendsNotifications; use Multek\CustomerEngagement\Contracts\SyncsUsers; class BrazeDriver implements EngagementDriver, SendsNotifications, SyncsUsers { public function getName(): string { return 'braze'; } // Implement SendsNotifications methods... // Implement SyncsUsers methods... }
Register it in your service provider:
use Multek\CustomerEngagement\EngagementManager; public function boot(): void { $this->app->make(EngagementManager::class)->extend('braze', function () { return new BrazeDriver(config('services.braze')); }); }
Testing
composer test
License
MIT