Obecnie 257 forumowiczów jest online
Obecnie 257 forumowiczów jest online
Porozmawiaj na temat implementacji kodu śledzenia w wielu domenach, ustaw śledzenie zdarzeń. Dowiedz się, czym jest Universal Analytics i jak korzystać z Menedżera tagów Google.
Poprowadź mnie
star_border
Odpowiedz

Implementacja kodu prowizyjnego CENEO w GTM

[ Edytowane ]
Student ✭

Witam serdecznie, na początku, za racji iż jest to mój pierwszy post tutaj chciałbym się z wszystkimi serdecznie przywitać. Nie mam póki co zbyt wielkiego doświadczenia w prowadzeniu takich narzędzi jak GTM i GA - tym generalnie zajmuje się inna osoba u mnie w firmie, niemniej od czasu do czasu zostaję poproszony o wprowadzenie pewnych rzeczy, z którymi radzę sobie bardziej lub mniej sprawnie - w zależności od tematu. Tym razem padło jednak (niestety) na to "mniej sprawnie".

 

Krótka historia: Sklep internetowy, oparty na platformie IAI-Shop. Chciałem w Google Tag Managerze wprowadzić kod śledzenia kodu prowizyjnego z CENEO. Jako tako, nasza strona nie posiada zakodowanej samej w sobie warstwy danych, ale została ona wprowadzona nieco inaczej, poprzez niejako inną firmę zewnętrzną, zajmującą się analizą ruchu, sprzedaży itp itd. Kod z ceneo wygląda następująco:

Spoiler
<script type="text/javascript">
<!--ceneo_client_email = 'pełny adres e-mail klienta';
ceneo_order_id = '123SK-23';
ceneo_amount = 160.99;
ceneo_shop_product_ids = '#234#w475xk#5402#';
//-->
</script>
<script type="text/javascript" src="https://ssl.ceneo.pl/transactions/track/v2/script.js?accountGuid=XXXXXXXX"></script>

I teraz krótka instrukcja poniżej:

 

Spoiler
ceneo_client_email
parametr będący adresem e-mail Klienta składającego zamówienie w sklepie. Adres e-mail Klienta powinien być zawarty w pojedynczym apostrofie, a cały wiersz zakończony średnikiem jak na przykładzie poniżej. Adres jest niezbędnym elementem, dzięki niemu wyślemy Klientowi ankietę zbierającą informacje o przeprowadzonej transakcji oraz - jeśli Państwa sklep został przyłączony do programu POK - informację o tym, że transakcja została objęta ochroną przez Ceneo.

np. ceneo_client_email = ‘pełny adres e-mail klienta’;

ceneo_order_id
ten parametr jest numerem zamówienia Klienta. Podajemy go również w apostrofach (tak jak jest to przedstawione na przykładzie poniżej), a cały wiersz zakończony powinien być średnikiem. Numerem zamówienia może być dowolny ciąg cyfr i liter o max. długości 32 znaków. Numer zamówienia pozwoli łatwiej zidentyfikować transakcję w razie niejasności.

np. ceneo_order_id = ‘123SK-23’;

ceneo_amount
parametr zawiera wartość zamówienia jakie złożył Klient. W tym parametrze nie używamy apostrofów, wartości ułamkowe podajemy z użyciem kropki do drugiego miejsca, nie podajemy skrótu walutowego „zł.”. Cały wiersz powinien być zakończony średnikiem. Wartość zamówienia jest niezbędna w Systemie Transakcyjnym.

np.
prawidłowy zapis -> ceneo_amount = 160.99;
błędny zapis ->ceneo_amount = 160,990zł;

ceneo_shop_product_ids
parametr zawiera sklepowe identyfikatory produktów jakie zostały zamówione przez Klienta podczas transakcji. Każdy produkt musi być wyszczególniony separatorem „#”. Identyfikatory poszczególnych produktów występują tyle razy, ile zamówionych zostało sztuk. Parametr podawany jest w apostrofach jako ciąg znaków. Na końcu wartości parametru separator nie jest wymagany.

np. ceneo_shop_product_ids = ‘#234#w475xk#5402#’;
lub ceneo_shop_product_ids = ‘#234#w475xk#5402’;

Kod ten siłą rzeczy musi pobierać dane z ostatniej strony koszyka, czyli już jego finalizacji.

 

Ustawiam więc TAG jako NIESTANDARDOWY TAG HTML. Wklejam kod, w odpowiednie miejsca podstawiam dane z warstwy danych. Warunek uruchamiania ustawiam jako regułę Transaction, która przypisana jest do strony transakcyjnej (transactionPage). Niestety, przy próbie uruchomienia testu otrzymuję komunikat:

Błąd kompilatora JavaScript&colon; Błąd w linii 1, znak 0: Error compiling JavaScript. Unable to reconstruct template from serialization.  - Czy jest szansa na to by uzyskać od osób bardziej doświadczonych w temacie czyli Was, co robię nie tak? Będę niezmiernie wdzięczny.



 

Odpowiedź eksperta 1verified_user
1 ZAAKCEPTOWANE ROZWIĄZANIE

Zaakceptowane rozwiązania
Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Michał U
maja 2016

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda

Wartość dla pola ceneo_amount pokazywana jest w debugerze prawidłowo. To tylko tak dziwnie wygląda, bo w kodzie javascript nie masz apostrofów, ani cudzysłowów przy {{bruttovalue}}.
Jak dasz w kodzie:
ceneo_amount = '{{bruttovalue}}';
to Ci w debugerze pokaże poprawnie kwotę, ale nie powinno to robić różnicy, bo w przypadku wartości liczbowej nie są wymagane apostrofy, ani cudzysłowy przy definiowaniu wartości.

 

Natomiast dla dla ceneo_shop_products_ids nie podstawia Ci żadnej wartości, bo jej po prostu nie zna.

 

W warstwie danych masz zdefiniowaną wartość dla productsInBasket, która jest tablicą obiektów Emotikon: Szczęśliwy
Natomiast do swojego tagu ceneo musisz podstawić ciąg znaków.

 

Żeby to Ci zadziałało musisz nieco przerobić swój tag ceneo by przerabiał tą tablicę na ciąg znaków i to na dodatek (zgodnie z instrukcją) każdy identyfikator ma się pojawić tyle razy ile produktów było kupionych.

 

Aby wszystko zadziałało jak należy sprawdź najpierw czy masz dodaną prawidłowo zmienną warstwy danych productsInBasket:

productsInBasket.png

 

Następnie zmodyfikuj swój tag ceneo w taki sposób:

 

<script type="text/javascript">

var prod =  {{productsInBasket}};
var ids="";  
for(var i=0; i<prod.length; i++){
  for(var j=0; j<prod[i].quantity; j++){
    ids+="#"+prod[i].id;
  }
}
  
ceneo_client_email = '{{ceneo_client_email}}';
ceneo_order_id = '{{ceneo_order_id}}';
ceneo_amount = '{{ceneo_amount}}';
ceneo_shop_product_ids = ids;
  
console.log("ceneo_client_email: " + ceneo_client_email);
console.log("ceneo_order_id: " + ceneo_order_id);
console.log("ceneo_amount: " + ceneo_amount);
console.log("ceneo_shop_product_ids: " + ceneo_shop_product_ids);
  
</script>
<script type="text/javascript" src="https://ssl.ceneo.pl/transactions/track/v2/script.js?accountGuid=XXXXXXXX"></script>

To co jest na niebiesko będziesz mógł później wyrzucić - jest to tylko do celów diagnostycznych i wypisuje do konsoli JavaScript wartości wszystkich pól.

Jeżeli wszystko zrobisz prawidłowo do konsoli JavaScript po transakcji zostaną wypisane wszystkie wartości np. w takiej postaci:

ceneo_client_email: tu_email
ceneo_order_id: 12345
ceneo_amount: 123.45
ceneo_shop_product_ids: #12345#23456#23456

 

Tomasz Ciepłucha

Wyświetl rozwiązanie w oryginalnym poście

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda
Możesz wstawić zrzut ekranu jak dokładnie wygląda Twój tag?
Tomasz Ciepłucha

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Student ✭

Pewnie. Tak to wygląda.

 

tag_prev.jpg

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda
Wstaw w tagu do zmiennej ceneo_shop_product_ids jakąś stałą wartość, np:
ceneo_shop_product_ids='#123';
i zobacz, czy będziesz mógł uruchomić podgląd bez błędów.
Tomasz Ciepłucha

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Student ✭
Niestety, dalej wyrzuca ten sam błąd.

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda
To spróbuj to samom zrobić dla wszystkich zmiennych w tym tagu - wpisz jakieś testowe wartości na sztywno.
Poza tym czy ten błąd na pewno dotyczy tego nowo utworzonego tagu? Podawane jest to przy komunikacie o błędzie w kolumnie "Lokalizacja".
Bo to trochę dziwne, że jako źródło błędu jest podawany zerowy znak pierwszego wiersza.
Tomasz Ciepłucha

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

[ Edytowane ]
Student ✭

Jak pozmieniałem wszystkie zmienne w tym tagu na stałe wartości - ruszyło. Tylko w takim razie skoro podstawiam zmienne do zaciągania a to nie działa, to jak to inaczej zmusić do działania?

 

EDIT: Powstawiałem od nowa zmienne, po kolei, krok po kroku. Wykrzacza się na zmiennej w formie podawanego maila, który teoretycznie jest zaszyfrowany w md5. Będę musiał znaleźć jakieś rozwiązanie, jak by można było "odszyfrować" maila klienta, które ma być przekazywany do ceneo i zamiast zaszyfrowanego podstawiał już czysty adres e-mail.

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda
Wydaje mi się, że jest problem w przekazywaniu danych do dataLayer. Sprawdź, czy na stronie podziękowania po transakcji nie występują błędy w kodzie JavaScript i jak dokładnie wygląda ten zaszyfrowany email. Może tam występuje jakiś błąd i to powoduje dalsze komplikacje.
Tomasz Ciepłucha

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Student ✭

 

Po wielu perturbacjach w końcu udało się coś ruszyć do działania. Nie obyło się bez paniki, że się posypał cały dataLayer, ale jakoś uratowałem sytuację. Zacząłem wiec robić nie wszystko na raz a krok po kroku. W momencie kiedy napotykałem błąd, wiedziałem w którym miejscu i starałem się go rozwiązać. Obecnie przygotowałem sobie tak, by oddzielić w warstwie danych pewne rzeczy i wiedzieć, co do czego mniej więcej może się w późniejszym czasie zaciągać. Powstał więc productsInBasketCeneo. Wygląda to tak:

 

pr1.jpg

 

Musiałem tak zrobić ponieważ zgodnie z wymogami ceneo, przed ID produktu musi być hasztag. Następnie wprowadziłem sam tag od ceneo, który wygląda następująco:

pr3.jpg

 

Błąd kompilatora spowodowany był tym, że oryginalnie ceneo pierwszą linię ma zapisaną tak: <!--ceneo_client_email tymczasem, wystarczyło oddzielić znaki <!-- od reszty i poszło. W sumie, trochę się dziwie, nie sądziłem, że GTM jest aż tak wrażliwy na takie rzeczy?. Niemniej. Tag się odpala. W debuggerze widać jednak, że mimo dobrze podstawionych zmiennych, wszystko się sypie. Poprawnie wpisany jest tylko mail oraz ceneo_order_id. Przy ceneo_amount zaczynają się wstawiać jakieś dziwne rzeczy tak samo jak i przy ceneo_shop_products_ids. Podgląd poniżej:

pr2.jpg 

Do tego to trzeba by zatrudnić szeroko wykwalifikowanego programistę. A niby to takie "intuicyjne" narzędzie. Zastanawiam się czy przy ceneo_shop_products_ids widnieje undefined dla tego, że nadałem podstawianie hasztagu do id produktu na poziomie dataLayer, ale z drugiej strony za cholerę nie wiem jak by to zrobić inaczej. Zresztą, to nie wyklucza tak czy siak dziwnego podstawiania się także przy wartości ceneo_amount, gdzie powinna być wartość brutto zamówienia.

Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Michał U
maja 2016

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda

Wartość dla pola ceneo_amount pokazywana jest w debugerze prawidłowo. To tylko tak dziwnie wygląda, bo w kodzie javascript nie masz apostrofów, ani cudzysłowów przy {{bruttovalue}}.
Jak dasz w kodzie:
ceneo_amount = '{{bruttovalue}}';
to Ci w debugerze pokaże poprawnie kwotę, ale nie powinno to robić różnicy, bo w przypadku wartości liczbowej nie są wymagane apostrofy, ani cudzysłowy przy definiowaniu wartości.

 

Natomiast dla dla ceneo_shop_products_ids nie podstawia Ci żadnej wartości, bo jej po prostu nie zna.

 

W warstwie danych masz zdefiniowaną wartość dla productsInBasket, która jest tablicą obiektów Emotikon: Szczęśliwy
Natomiast do swojego tagu ceneo musisz podstawić ciąg znaków.

 

Żeby to Ci zadziałało musisz nieco przerobić swój tag ceneo by przerabiał tą tablicę na ciąg znaków i to na dodatek (zgodnie z instrukcją) każdy identyfikator ma się pojawić tyle razy ile produktów było kupionych.

 

Aby wszystko zadziałało jak należy sprawdź najpierw czy masz dodaną prawidłowo zmienną warstwy danych productsInBasket:

productsInBasket.png

 

Następnie zmodyfikuj swój tag ceneo w taki sposób:

 

<script type="text/javascript">

var prod =  {{productsInBasket}};
var ids="";  
for(var i=0; i<prod.length; i++){
  for(var j=0; j<prod[i].quantity; j++){
    ids+="#"+prod[i].id;
  }
}
  
ceneo_client_email = '{{ceneo_client_email}}';
ceneo_order_id = '{{ceneo_order_id}}';
ceneo_amount = '{{ceneo_amount}}';
ceneo_shop_product_ids = ids;
  
console.log("ceneo_client_email: " + ceneo_client_email);
console.log("ceneo_order_id: " + ceneo_order_id);
console.log("ceneo_amount: " + ceneo_amount);
console.log("ceneo_shop_product_ids: " + ceneo_shop_product_ids);
  
</script>
<script type="text/javascript" src="https://ssl.ceneo.pl/transactions/track/v2/script.js?accountGuid=XXXXXXXX"></script>

To co jest na niebiesko będziesz mógł później wyrzucić - jest to tylko do celów diagnostycznych i wypisuje do konsoli JavaScript wartości wszystkich pól.

Jeżeli wszystko zrobisz prawidłowo do konsoli JavaScript po transakcji zostaną wypisane wszystkie wartości np. w takiej postaci:

ceneo_client_email: tu_email
ceneo_order_id: 12345
ceneo_amount: 123.45
ceneo_shop_product_ids: #12345#23456#23456

 

Tomasz Ciepłucha

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

[ Edytowane ]
Student ✭

pr1.png

 

pr2.png

pr3.png

 

Mam rozumieć, że mimo tego, iż na zdjęciu nr 2 czyli z debuggera google tag manager wychodzą jakieś pierduły, to sugerować się mam i tak tym co wyrzuciła konsola na ostatnim zdjęciu? Znaczy, że działa prawidłowo?

 

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda
W tym kodzie, który Ci napisałem, wyświetlają się do konsoli wartości wszystkich pól, które podstawiasz wcześniej w tagu dla ceneo więc jeżeli konsola wypisuje Ci prawidłowe wartości, to znaczy, że wszystko zrobiłeś poprawnie i tag będzie działać, jak należy.
Tomasz Ciepłucha

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Student ✭
Dzięki serdeczne. Podesłałem testową transakcję do CENEO. Mają zweryfikować czy faktycznie ich system poprawnie wszystko pobiera, ale myślę, że to już jest właśnie TO! Dziękuję Ci Tomaszu (jeśli mogę pozwolić sobie na zwrot per Ty) niezmiernie! Bardzo a nawet przebardzo mi pomogłeś. Dam jeszcze ostatecznie znać co odpowiedziało CENEO, ale mam nadzieję, że ich odpowiedź zwrotna będzie tą pozytywną. Wiszę Ci niejedno piwo!

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Student ✭

No niestety. Muszę odkopać wątek. Myślałem, że temat został rozwiązany, aczkolwiek dostałem informację od ceneo, że do ich systemu przekazują się nieprawidłowo dane. Zapytałem i poprosiłem o to, jak te dane wyglądają. Oto jaką otrzymałem odpowiedź: 

 

 

for(var prod=google_tag_manager["GTM-KST6MF"].macro('gtm1464871303468'),ids="",i=0;i<prod.length;i++)for(var j=0;j<prod[i].quantity;j++)ids+="#"+prod[i].id;
ceneo_client_email="test@ceneo.pl";
ceneo_order_id="597722";
ceneo_amount="34.90";
ceneo_shop_product_ids=ids;

Czyli wysyła im się razem z całym skryptem mającym za zadanie zliczenie ilości produktów i wstawienie ich wg instrukcji z hashtagami. Emotikon: Smutny

 

Dot.: Implementacja kodu prowizyjnego CENEO w GTM

Wschodząca Gwiazda

Coś musiałeś zmienić w kodzie tagu, albo ktoś Cię wprowadza w błąd.
Jeżeli skrypt wypisywał na konsolę poprawne wartości (kilka postów wcześniej wrzuciłeś screenshot, który by to potwierdzał), to nie ma możliwości by skrypt ceneo (ten pobierany w tagu: https://ssl.ceneo.pl/transactions/track/v2/script.js?accountGuid=XXXXXXXX) ich prawidłowo nie widział. Sprawdziłem całość (łącznie z symulacją tego co będzie się wysyłać do ceneo) i wszystko działa prawidłowo.

 

Zrób tak:

1. otwórz konsolę JavaScript w Google Chrome

2. przejdź na kartę "Network"

3. kliknij w ikonkę filtra i wpisz w polu filtrowania słowo: pixel (wyświetli to tylko żądania do plików z nazwą pixel - na razie lista może być pusta)

4. zrób testową transakcję i na stronie podziękowania zobacz, czy na liście żądań pojawi się plik pixel?random=...

5. jeśli tak to kliknij na niego

6. otwórz kartę "Header" i zjedź w niej na sam dół, tam gdzie będzie część "Query string parameters"

7. sprawdź czy pojawią się poprawne wartości dla email, orderid, amount oraz shopproductsids

8. jeżeli tak, to znaczy, że wszystko działa prawidłowo

 

Poniżej screenshot, który powinien Ci pomóc:

 

ceneo-debug.png

 

Tomasz Ciepłucha