eonvisualmedia / laravel-klaviyo
从您的Laravel应用中与Klaviyo API交互
Requires
- php: ^8.0
- guzzlehttp/guzzle: ^7.0
- illuminate/bus: ^8.0|^9.0|^10.0|^11.0
- illuminate/http: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^9.3
README
此包帮助与Klaviyo交互以跟踪客户端和服务器端指标以及REST API。
需求
对于服务器端跟踪,此包利用Laravel HTTP客户端识别或REST API调用。
建议在后台处理服务器端事件,默认情况下,作业将被放置在klaviyo
队列中。
安装
您可以通过composer安装此包
composer require eonvisualmedia/laravel-klaviyo
该包将自动注册自己。
您可以选择通过以下方式发布配置文件
php artisan vendor:publish --provider="EonVisualMedia\LaravelKlaviyo\LaravelKlaviyoServiceProvider" --tag="tags-config"
根据您的预期使用,您至少需要使用您的公共和私有API密钥配置您的环境。
// .env
KLAVIYO_PRIVATE_API_KEY=
KLAVIYO_PUBLIC_API_KEY=
用法
基本示例
首先,您需要通过在布局末尾包含Klaviyo JavaScript API来识别和跟踪,在关闭body标签之前。
// layout.blade.php
<html>
<body>
{{-- ... --}}
@include('klaviyo::initialize')
</body>
</html>
添加身份
如果当前用户未识别且Auth::user()
是EonVisualMedia\LaravelKlaviyo\Contracts\KlaviyoIdentity
的实例,则将调用getKlaviyoIdentity
方法,并在页面上添加一个identify事件。
或者,您可以选择在用户登录后显式调用identify方法。
Klaviyo::identify([ 'email' => 'foo@example.com', 'first_name' => 'Foo', 'last_name' => 'Bar' ]);
客户端跟踪事件
Klaviyo::push('track', 'Added to Cart', [ '$value' => 100, 'AddedTitle' => 'Widget A' ]);
服务器端跟踪事件
排队服务器端事件。
Klaviyo::track(TrackEvent::make( 'Placed Order', [ 'unique_id' => '1234_WINNIEPOOH', 'value' => 9.99, ] ));
您可以选择指定客户属性和时间戳,如果未指定,则客户将尝试通过其cookie($exchange_id)或其用户模型(如果Auth::user()
是EonVisualMedia\LaravelKlaviyo\Contracts\KlaviyoIdentity
的实例)来识别。
Klaviyo::track(TrackEvent::make( 'Placed Order', [ 'unique_id' => '1234_WINNIEPOOH', 'value' => 9.99, ], [ 'email' => 'foo@example.com', 'first_name' => 'Foo', 'last_name' => 'Bar', ], now()->addWeeks(-1) ));
监控登录事件
默认情况下,该包将订阅Illuminate\Auth\Events\Login
事件,并发送一个klaviyo.identify(...)
调用。
您可以使用配置选项identify_on_login
来禁用此行为。
高级用法
宏
该包允许您扩展其功能,这有助于创建可重用的事件。
您可以在服务提供商的boot
方法中定义宏,无论是您自己的还是应用程序的App\Providers\AppServiceProvider
类中的。
use EonVisualMedia\LaravelKlaviyo\Klaviyo; /** * Bootstrap any application services. * * @return void */ public function boot() { Klaviyo::macro( 'fulfilled_order', function (Transaction $transaction) { Klaviyo::track(TrackEvent::make( 'Fulfilled Order', $transaction->toKlaviyo(), $transaction->user, $transaction->created_at )); } ); }
定义宏后,您可以在应用程序的任何地方调用它
Klaviyo::fulfilled_order($transaction);
REST
您可以使用Laravel HTTP客户端与Klaviyo REST API交互,通过KlaviyoClient转发的调用将在请求中附加Authorization: Klaviyo-API-Key your-private-api-key
标题。
Klaviyo::get('lists'); Klaviyo::post("profile-subscription-bulk-create-jobs", [ 'data' => [ 'type' => 'profile-subscription-bulk-create-job', 'attributes' => [ 'profiles' => [ 'data' => [ [ 'type' => 'profile', 'attributes' => [ 'email' => 'foo@example.com', 'subscriptions' => [ 'email' => [ 'marketing' => [ 'consent' => 'SUBSCRIBED' ] ], ] ] ] ] ] ], 'relationships' => [ 'list' => [ 'data' => [ 'type' => 'list', 'id' => $list_id ] ] ] ] ]); Klaviyo::delete("profile-subscription-bulk-delete-jobs", [ 'data' => [ 'type' => 'profile-subscription-bulk-delete-job', 'attributes' => [ 'profiles' => [ 'data' => [ [ 'type' => 'profile', 'attributes' => [ 'email' => 'foo@example.com', ] ] ] ] ], 'relationships' => [ 'list' => [ 'data' => [ 'type' => 'list', 'id' => $list_id ] ] ] ] ]);
从v1升级
Klaviyo的v1/v2 API计划于2024年6月30日停用。
我鼓励您特别审查Klaviyo: API版本和弃用策略中的重大更改
因此,API更改需要对此包进行一些重大更改,特别是用于identify
和push
的负载。请参阅下面的示例,例如,getKlaviyoIdentity
响应将$email
替换为email
。
请注意,客户端和服务器端的identify/profile负载有一些不同,klaviyo_client_to_server_profile
可能有助于将客户端负载转换为服务器配置文件。