eonvisualmedia/laravel-klaviyo

从您的Laravel应用中与Klaviyo API交互

2.1.0 2024-06-17 11:04 UTC

This package is auto-updated.

Last update: 2024-09-17 11:37:40 UTC


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更改需要对此包进行一些重大更改,特别是用于identifypush的负载。请参阅下面的示例,例如,getKlaviyoIdentity响应将$email替换为email

请注意,客户端和服务器端的identify/profile负载有一些不同,klaviyo_client_to_server_profile可能有助于将客户端负载转换为服务器配置文件。