Panoramica
Se ha costruito una soluzione di carrello personalizzata, o se i dati di ecommerce che desidera tracciare in Klaviyo non sono ancora supportati da una delle nostre integrazioni precostituite, può integrarsi con Klaviyo utilizzando le nostre API JavaScript, API lato server e l'integrazione del Catalogo personalizzato.
I componenti chiave dell'integrazione di un carrello ecommerce personalizzato sono:
- Dati del cliente
- Abbonati
- Attività del sito web
- Attività dell'ordine
Questa guida si concentra su come sincronizzare le metriche importanti, o le attività chiave dei clienti, con Klaviyo. Sebbene le nostre API Track and Identify in JavaScript e lato server possano essere utilizzate in modo intercambiabile, raccomandiamo di utilizzare la seguente configurazione per le aziende di e-commerce. Utilizzi questa lista di controllo per impostare la sua integrazione:
- Utilizzi la nostra API JavaScript Track per quanto segue:
- Attivo sul sito - Quando qualcuno visita il suo sito web
- Prodotto visto - Quando qualcuno visualizza un prodotto
- Aggiunto al carrello - Quando qualcuno aggiunge un articolo al suo carrello
- Avvio del checkout - Quando qualcuno arriva alla pagina del checkout
- Utilizzi la nostra API Track lato server per quanto segue:
- Ordine effettuato - Quando un ordine viene elaborato con successo nel suo sistema.
- Prodotto ordinato - Un evento per ogni articolo di un ordine elaborato.
- Ordine evaso - Quando un ordine viene inviato al cliente.
- Ordine annullato - Quando un cliente annulla il proprio ordine
- Ordine rimborsato - quando l'ordine di un cliente viene rimborsato
- Utilizzi la nostra integrazione Custom Catalog Feed per quanto segue:
- Feed del catalogo - Un feed XML o JSON del suo catalogo prodotti.
Il livello di dati dettagliati che invia a Klaviyo all'interno di questi eventi di sito web, acquisto e pagamento determinerà il modo in cui potrà filtrare e segmentare in base a questi eventi in Klaviyo. Per capire come devono essere strutturati i dati in modo che i dettagli chiave degli eventi siano disponibili per la segmentazione, consulti la nostra guida sulle condizioni di segmentazione.
Si noti che gli snippet di questa guida utilizzano dati di esempio. Dovrà aggiornare i valori delle proprietà JSON in questi snippet, in modo che attingano dinamicamente alle informazioni pertinenti necessarie per quella proprietà.
Si assicuri di consultare le nostre FAQ sulle integrazioni personalizzate per qualsiasi domanda sulle integrazioni personalizzate o si rivolga al nostro Team di assistenza.
Comportamenti in loco (JavaScript Track API)
Per abilitare la nostra API JavaScript e la possibilità di pubblicare moduli direttamente da Klaviyo sul suo sito, aggiunga il seguente snippet in modo che appaia su ogni pagina del suo sito web (spesso la fine del piè di pagina è un buon posto per aggiungerlo). Si assicuri di sostituire PUBLIC_API_KEY con la chiave API pubblica a 6 caratteri del suo account Klaviyo:
<script type="application/javascript" async
src="https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=PUBLIC_API_KEY"></script>
Attivo sul posto
Una volta aggiunto lo snippet di cui sopra, l'attività Attiva sul sito si attiverà per ogni persona che ha un cookie:
- Tramite una richiesta API Javascript Identify
- Iscrivendosi attraverso un modulo di Klaviyo
- Cliccando su un'e-mail di Klaviyo e atterrando sul suo sito
Prodotto visto
Se desidera impostare un flusso di abbandono della navigazione o costruire segmenti basati sui dati di navigazione del prodotto, dovrà aggiungere il tracciamento degli eventi JavaScript per la metrica Prodotto visto. Nel modello della pagina del prodotto, aggiunga il seguente snippet:
<script text="text/javascript">
var _learnq = _learnq || [];
var item = {
"ProductName": "Winnie the Pooh",
"ProductID": "1111",
"Categories": ["Fiction", "Children"],
"ImageURL": "http://www.example.com/path/to/product/image.png",
"URL": "http://www.example.com/path/to/product",
"Brand": "Kids Books",
"Price": 9.99,
"CompareAtPrice": 14.99
};
_learnq.push(["traccia", "Prodotto Visualizzato", articolo]);
_learnq.push(["trackViewedItem", {
Titolo: articolo.NomeProdotto,
ItemId: item.ProductID,
Categorie: item.Categories,
ImageUrl: item.ImageURL,
Url: articolo.URL,
Metadati: {
Brand: item.Brand,
Price: item.Price,
CompareAtPrice: item.CompareAtPrice
}
]);
</script>
Aggiunto al carrello
Se desidera inviare e-mail di carrello abbandonato prima che qualcuno arrivi alla pagina di checkout, dovrà tracciare le informazioni sul carrello quando qualcuno compie una determinata azione. Per questo, consigliamo di inviare un evento Added to Cart quando qualcuno aggiunge un articolo al carrello. Una persona dovrà comunque essere stata identificata su "," o cookie, per rintracciare questo evento. Per il payload, deve includere tutte le informazioni del carrello (come Started Checkout qui sotto) e le informazioni sull'articolo appena aggiunto (come Viewed Product qui sopra). Ecco un esempio di richiesta di tracciamento:
<script text="text/javascript">
_learnq.push(['traccia', Aggiunto al carrello, {
"$valore": 29.98,
"AddedItemProductName": "Racconto di due città",
"AddedItemProductID": "1112",
"AddedItem_SKU": "TALEOFTWO",
"AddedItem_Categories": ["Fiction", "Classics"],
"AddedItem_ImageURL": "http://www.example.com/path/to/product/image2.png",
"AddedItem_URL": "http://www.example.com/path/to/product2",
"Prezzo_dell'articolo aggiunto": 19.99,
"AddedItem_Quantity": 1,
"ItemNames": ["Winnie the Pooh", "A Tale of Two Cities"],
"CheckoutURL": "http://www.example.com/path/to/checkout",
"Articoli": [{
"ProductID": "1111",
"SKU": "WINNIEPOOH",
"ProductName": "Winnie the Pooh",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ProductURL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"ProductCategories": ["Fiction", "Children"]
},
{
"ProductID": "1112",
"SKU": "TALEOFTWO",
"ProductName": "A Tale of Two Cities",
"Quantity": 1,
"ItemPrice": 19.99,
"RowTotal": 19.99,
"ProductURL": "http://www.example.com/path/to/product2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"ProductCategories": ["Fiction", "Classics"]
}
]
}]);
</script>
Avviato il checkout
I dati di checkout sono importanti se desidera inviare e-mail di checkout abbandonato. Quando qualcuno inizia il processo di checkout, lei invierà a Klaviyo un evento che indica l'inizio del checkout. Il luogo migliore per attivare questo evento è quando qualcuno visita la pagina di checkout dopo essere stato identificato "" o quando inserisce il proprio indirizzo e-mail nella pagina di checkout, se non è già stato identificato.
Dovrà assicurarsi di includere tutti i dettagli degli articoli della linea, in modo che le e-mail di checkout abbandonato possano essere personalizzate per includere immagini, link e altre informazioni sui prodotti presenti nel carrello. Ecco un esempio di richiesta di tracciamento:
<script text="text/javascript">
_learnq.push(['traccia', 'Checkout avviato', {
"$event_id": "1000123_1387299423",
"$valore": 29,98,
"ItemNames": ["Winnie the Pooh", "A Tale of Two Cities"],
"CheckoutURL": "http://www.example.com/path/to/checkout",
"Articoli": [{
"ProductID": "1111",
"SKU": "WINNIEPOOH",
"ProductName": "Winnie the Pooh",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ProductURL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"ProductCategories": ["Fiction", "Children"]
},
{
"ProductID": "1112",
"SKU": "TALEOFTWO",
"ProductName": "A Tale of Two Cities",
"Quantity": 1,
"ItemPrice": 19.99,
"RowTotal": 19.99,
"ProductURL": "http://www.example.com/path/to/product2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"ProductCategories": ["Fiction", "Classics"]
}
]
}]);
</script>
Il $event_id deve essere un identificatore unico per il carrello, combinato con l'ora formattata UNIX in cui l'evento è stato attivato. Questo permette a qualcuno di attivare il Checkout Iniziato più di una volta quando ritorna dopo aver aggiunto altri articoli.
Metriche lato server
Raccomandiamo di tracciare alcune metriche sul lato server a causa delle potenziali limitazioni del codice frontend e dei problemi di sicurezza. Se qualcuno ha una connessione/computer lento o un plugin che blocca JavaScript sul suo browser, le richieste JavaScript potrebbero non partire. Nel caso di metriche più cruciali (come quelle per gli ordini e altri eventi e proprietà transazionali) o che contengono dati sensibili, utilizzi le nostre API Track e Identify lato server.
Ordine effettuato
Dopo aver effettuato un ordine, deve effettuare una richiesta di Track alla nostra API lato server. Abbiamo librerie disponibili per Python, Ruby e PHP, ma in senso generale, l'API richiede semplicemente di effettuare una richiesta HTTP GET con un carico utile JSON codificato in base64.
È buona norma inviare anche i dati storici degli ordini. Questo migliorerà la sua capacità di segmentare quei dati e di migliorare l'accuratezza storica nel monitoraggio dei ricavi. I dati storici possono essere inviati a noi iterando i suoi ordini storici e generando richieste API di tracciamento dell'ordine e del prodotto ordinato per ciascuno di essi. La proprietà speciale "time" per questi eventi deve essere il timestamp UNIX di quando si è verificato l'ordine. Maggiori dettagli su queste metriche sono riportati di seguito.
Vorrà inviare i dati degli ordini a Klaviyo in uno dei due modi: in tempo reale o in batch.
- In tempo reale - effettuerà le richieste non appena viene effettuato un ordine.
- Batch - Scriverà uno script che verrà eseguito almeno una volta all'ora per inviare tutti gli eventi che si sono verificati nell'ultima ora.
Se intende inviare e-mail di carrello abbandonato/checkout, dovrà inviare i dati dell'ordine almeno con una frequenza che rientri nel ritardo dell'e-mail, per evitare che l'e-mail arrivi a persone che hanno completato l'ordine. Per esempio, se ha un ritardo di un'ora tra quando qualcuno attiva il flusso del carrello abbandonato e quando riceve la prima e-mail, dovrà assicurarsi di inviare i dati almeno una volta ogni ora.
Per ogni ordine, le consigliamo di inviare due tipi di eventi:
- Un unico evento denominato Ordine effettuato per l'intero ordine.
- Questo include una proprietà
$valueche rappresenta il valore totale di un intero ordine, comprese le spese di spedizione, le tasse, gli sconti, ecc.
- Questo include una proprietà
- Un evento per ogni voce di riga denominata Prodotto ordinato.
- Questo include una proprietà
$valoreche rappresenta il costo totale di un articolo nell'ordine prima di qualsiasi aggiustamento, nonché informazioni dettagliate a livello di SKU sull'articolo.
- Questo include una proprietà
Aspetti fondamentali da tenere presenti quando traccia gli eventi lato server:
- Si assicuri di sostituire
API_KEYcon la sua chiave API pubblica. - Il
$event_iddeve essere un identificatore univoco per l'ordine (ad esempio. ID ordine). - Se la stessa combinazione di
eventoe$event_idviene inviata più di una volta, salteremo tutti gli eventi tracciati dopo il primo con la stessa combinazione. -
$valueè una proprietà speciale che consente a Klaviyo di tracciare le entrate; dovrebbe essere il valore numerico totale, monetario dell'evento a cui è associato. - L'array "Items" deve contenere un dizionario per ogni voce di riga.
-
timeè una proprietà speciale che deve essere un timestamp UNIX della data e dell'ora dell'ordine.
Ecco un esempio di richiesta di tracciamento per l'ordine effettuato:
{
"token": "API_KEY",
"evento": "Ordine effettuato",
"proprietà_del_cliente": {
"$email": "john.smith@example.com",
"$first_name": "John",
"$last_name": "Smith",
"$phone_number": "5551234567",
"$address1": "123 Abc st",
"$address2": "Suite 1",
"$city": "Boston",
"$zip": "02110",
"$region": "MA",
"$country": "USA"
},
"proprietà": {
"$event_id": "1234",
"$valore": 29.98,
"Categorie": ["Narrativa", "Classici", "Bambini"],
"ItemNames": ["Winnie the Pooh", "Racconto di due città"],
"Marche": ["Libri per bambini", " Harcourt Classics"],
"Codice sconto": "Spedizione gratuita",
"Valore di sconto": 5,
"Articoli": [{
"ProductID": "1111",
"SKU": "WINNIEPOOH",
"ProductName": "Winnie the Pooh",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ProductURL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"Categories": ["Fiction", "Children"],
"Brand": "Kids Books"
},
{
"ProductID": "1112",
"SKU": "TALEOFTWO",
"ProductName": "A Tale of Two Cities",
"Quantity": 1,
"ItemPrice": 19.99,
"RowTotal": 19.99,
"ProductURL": "http://www.example.com/path/to/product2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"Categories": ["Fiction", "Classics"],
"Brand": "Harcourt Classics"
}
]
},
"tempo": 1387302423
}
Prodotto ordinato
Per ogni articolo di linea, deve anche fare una richiesta di tracciamento per un evento Prodotto ordinato:
{
"token": "API_KEY",
"evento": "Prodotto ordinato",
"proprietà_del_cliente": {
"$email": "john.smith@example.com",
"$first_name": "John",
"$last_name": "Smith"
},
"proprietà": {
"$event_id": "1234_WINNIEPOOH",
"$value": 9.99,
"ProductID": "1111",
"SKU": "WINNIEPOOH",
"ProductName": "Winnie the Pooh",
"Quantity": 1,
"ProductURL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"ProductCategories": [
"Fiction",
"Children"
],
"ProductBrand": "Kids Books"
},
"tempo": 1387302423
}
Ordine evaso, ordine annullato e ordine rimborsato
A seconda di come i suoi prodotti vengono inviati al cliente, o se possono essere annullati o rimborsati, potrebbe voler inviare eventi aggiuntivi che riflettano queste azioni. Ognuno di questi eventi correlati all'ordine avrà quasi lo stesso carico utile di un evento Ordine inviato.
Per l'Ordine evaso, l'unico aggiornamento da effettuare è il nome dell'evento e l'ora in cui ha avuto luogo l'evasione:
{
"token": "API_KEY",
"evento": "Ordine evaso",
"proprietà_del_cliente": {
"$email": "john.smith@example.com",
"$first_name": "John",
"$last_name": "Smith",
"$phone_number": "5551234567",
"$address1": "123 Abc st",
"$address2": "Suite 1",
"$city": "Boston",
"$zip": "02110",
"$region": "MA",
"$country": "USA"
},
"proprietà": {
"$event_id": "1234",
"$valore": 29.98,
"Categorie": [
"Narrativa",
"Classici",
"Bambini"
],
"ItemNames": [
"Winnie the Pooh",
"Racconto di due città"
],
"Marche: [
"Libri per bambini",
"Classici Harcourt"
],
"Codice sconto": "Spedizione gratuita",
"Valore di sconto": 5,
"Articoli": [
{
"ProductID": "1111",
"SKU": "WINNIEPOOH",
"ProductName": "Winnie the Pooh",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ProductURL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"Categories": [
"Fiction",
"Children"
],
"Brand": "Kids Books"
},
{
"ProductID": "1112",
"SKU": "TALEOFTWO",
"ProductName": "A Tale of Two Cities",
"Quantity": 1,
"ItemPrice": 19.99,
"RowTotal": 19.99,
"ProductURL": "http://www.example.com/path/to/product2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"Categories": [
"Fiction",
"Classics"
],
"Brand": "Harcourt Classics"
}
]
},
"tempo": 1387312956
}
Per l'Ordine Annullato e l'Ordine Rimborsato, aggiorna il nome dell'evento e il timestamp e aggiunge una proprietà aggiuntiva per il motivo dell'annullamento o del rimborso:
Ordine annullato
"token": "API_KEY",
"evento": "Ordine annullato",
"proprietà_del_cliente": {
"$email": "john.smith@example.com",
"$first_name": "John",
"$last_name": "Smith",
"$phone_number": "5551234567",
"$address1": "123 Abc st",
"$address2": "Suite 1",
"$city": "Boston",
"$zip": "02110",
"$region": "MA",
"$country": "USA"
},
"proprietà": {
"$event_id": "1234",
"$valore": 29.98,
"Motivo": "Non più necessario",
"Categorie": [
"Narrativa",
"Classici",
"Bambini"
],
"ItemNames": [
"Winnie the Pooh",
Una storia di due città"
],
"Marche": [
"Libri per bambini",
"Classici Harcourt"
],
"Codice Sconto": "Spedizione gratuita",
"Valore di sconto": 5,
"Articoli": [
{
"ProductID": "1111",
"SKU": "WINNIEPOOH",
"ProductName": "Winnie the Pooh",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ProductURL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"Categories": [
"Fiction",
"Children"
],
"Brand": "Kids Books"
},
{
"ProductID": "1112",
"SKU": "TALEOFTWO",
"ProductName": "A Tale of Two Cities",
"Quantity": 1,
"ItemPrice": 19.99,
"RowTotal": 19.99,
"ProductURL": "http://www.example.com/path/to/product2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"Categories": [
"Fiction",
"Classics"
],
"Brand": "Harcourt Classics"
}
]
},
"tempo": 1387312956
}
Ordine rimborsato
{
"token": "API_KEY",
"evento": "Ordine rimborsato",
"proprietà_del_cliente": {
"$email": "john.smith@example.com",
"$first_name": "John",
"$last_name": "Smith",
"$phone_number": "5551234567",
"$address1": "123 Abc st",
"$address2": "Suite 1",
"$city": "Boston",
"$zip": "02110",
"$region": "MA",
"$country": "USA"
},
"proprietà": {
"$event_id": "1234",
"$valore": 29.98,
"Motivo": "Non più necessario",
"Categorie": [
"Narrativa",
"Classici",
"Bambini"
],
"ItemNames": [
"Winnie the Pooh",
Racconto di due città"
],
"Marche": [
"Libri per bambini",
"Classici Harcourt"
],
"Codice Sconto": "Spedizione gratuita",
"Valore di sconto": 5,
"Articoli": [
{
"ProductID": "1111",
"SKU": "WINNIEPOOH",
"ProductName": "Winnie the Pooh",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ProductURL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"Categories": [
"Fiction",
"Children"
],
"Brand": "Kids Books"
},
{
"ProductID": "1112",
"SKU": "TALEOFTWO",
"ProductName": "A Tale of Two Cities",
"Quantity": 1,
"ItemPrice": 19.99,
"RowTotal": 19.99,
"ProductURL": "http://www.example.com/path/to/product2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"Categories": [
"Fiction",
"Classics"
],
"Brand": "Harcourt Classics"
}
]
},
"tempo": 1387312956
}
Integrazione dei feed del catalogo
L'integrazione del suo catalogo le consentirà di utilizzare i nostri Feed e Blocchi di prodotti nelle e-mail. Per impostare un'integrazione di catalogo personalizzata, si rivolga al nostro Team di assistenza. Le trasmetteranno la documentazione e gli esempi per questa impostazione e dovranno essere avvisati una volta completata l'impostazione per poter attivare il feed sul suo conto.
Sincronizzazione dei dati storici
È una buona pratica inviarci anche i dati storici degli ordini. Questo migliorerà la sua capacità di segmentare quei dati e di migliorare l'accuratezza storica nel monitoraggio dei ricavi. Questi dati possono essere inviati a noi iterando i suoi ordini storici e generando richieste API di tracciamento dell'ordine e del prodotto ordinato per ciascuno di essi.