O Google Tag Manager tem como finalidade simplificar como os scripts e códigos personalizados são inseridos e gerenciados em seu site. Ao invés de fazer as inserções e manutenções diretamente no código fonte de seu site, é possível incluir apenas o script do Google Tag Manager e usar o painel administrativo da ferramenta para adicionar e gerenciar todos os scripts do seu site.
O link abaixo (oficial do Google) contém informações adicionais:
https://www.google.com/intl/pt-BR/tagmanager/
Este artigo tem por finalidade explicar como o Google Tag Manager pode ser usado para capturar informações de um formulário do seu site para gerar Leads no Ploomes. Similarmente você pode usar a técnica para fazer qualquer inserção no Ploomes, como Clientes, Contatos, Negócios entre outros, mas vamos focar nosso exemplo nos Leads que é o pedido mais recorrente.
Primeiramente é necessário criar uma nova TAG, clicando no botão vermelho como da imagem a seguir:
Então é preciso escolher o tipo de TAG. Usaremos "HTML Customizado".
É aqui que vamos inserir o código da integração. Este código é um script que em nada difere de um script que você colocaria no seu site direto no código fonte. A imagem abaixo mostra um trecho de exemplo.
O próximo passo é escolher o acionador, ou seja, o que fará com que a TAG recém-criada seja acionada. O ideal é utilizar o evento "Envio de formulário". Isso garante que sempre que um formulário seja enviado, a TAG será acionada.
Nesta etapa é possível escolher quais formulários dispararão a TAG. Caso nenhum seja especificado, isso implicará que qualquer envio de formulário pelo visitante do seu site fará com que a TAG seja acionada.
Geralmente as chamadas https nos scripts (Javascript) são feitas via AJAX. Para possibilitar isso, em nosso exemplo criamos uma TAG adicional do tipo "HTML" customizado que faz o carregamento do AJAX nas páginas onde ele será requisitado, ou seja, basicamente onde existem formulários integrados com o Ploomes.
Abaixo existe um exemplo de código para fazer o carregamento do AJAX. Use-o e modifique-o conforme necessário:
__________________________________
<script id="gtm-jq-ajax-listen" type="text/javascript">
(function() {
var script = document.createElement('script');
script.src = 'https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.0.min.js';
document.getElementsByTagName('head')[0].appendChild(script);
var done = false;
script.onload = handleLoad;
script.onreadystatechange = handleReadyStateChange;
function handleLoad() {
if (!done) {
done = true;
runNoConflict();
}
}
function handleReadyStateChange() {
var state;
if (!done) {
state = script.readyState;
if (state === "complete") {
handleLoad();
}
}
}
function runNoConflict() {
if (window.jQuery) {
window.$ = jQuery.noConflict(true);
}
}
'use strict';
var $;
var n = 0;
init();
function init(n) {
// Ensure jQuery is available before anything
if (typeof jQuery !== 'undefined') {
// Define our $ shortcut locally
$ = jQuery;
bindToAjax();
// Check for up to 10 seconds
} else if (n < 20) {
n++;
setTimeout(init, 500);
}
}
function bindToAjax() {
$(document).bind('ajaxComplete', function(evt, jqXhr, opts) {
// Create a fake a element for magically simple URL parsing
var fullUrl = document.createElement('a');
fullUrl.href = opts.url;
// IE9+ strips the leading slash from a.pathname because who wants to get home on time Friday anyways
var pathname = fullUrl.pathname[0] === '/' ? fullUrl.pathname : '/' + fullUrl.pathname;
// Manually remove the leading question mark, if there is one
var queryString = fullUrl.search[0] === '?' ? fullUrl.search.slice(1) : fullUrl.search;
// Turn our params and headers into objects for easier reference
var queryParameters = objMap(queryString, '&', '=', true);
var headers = objMap(jqXhr.getAllResponseHeaders(), '\n', ':');
// Blindly push to the dataLayer because this fires within GTM
dataLayer.push({
'event': 'ajaxComplete',
'attributes': {
// Return empty strings to prevent accidental inheritance of old data
'type': opts.type || '',
'url': fullUrl.href || '',
'queryParameters': queryParameters,
'pathname': pathname || '',
'hostname': fullUrl.hostname || '',
'protocol': fullUrl.protocol || '',
'fragment': fullUrl.hash || '',
'statusCode': jqXhr.status || '',
'statusText': jqXhr.statusText || '',
'headers': headers,
'timestamp': evt.timeStamp || '',
'contentType': opts.contentType || '',
// Defer to jQuery's handling of the response
'response': (jqXhr.responseJSON || jqXhr.responseXML || jqXhr.responseText || '')
}
});
});
}
function objMap(data, delim, spl, decode) {
var obj = {};
// If one of our parameters is missing, return an empty object
if (!data || !delim || !spl) {
return {};
}
var arr = data.split(delim);
var i;
if (arr) {
for (i = 0; i < arr.length; i++) {
// If the decode flag is present, URL decode the set
var item = decode ? decodeURIComponent(arr[i]) : arr[i];
var pair = item.split(spl);
var key = trim_(pair[0]);
var value = trim_(pair[1]);
if (key && value) {
obj[key] = value;
}
}
}
return obj;
}
// Basic .trim() polyfill
function trim_(str) {
if (str) {
return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
}
}
})();
</script>
__________________________________
Para este exemplo, duas TAGs foram criadas como mostrada a seguir:
Uma é o código da integração com o Ploomes em si, que captura os dados do formulário e envia para a API do Ploomes, o outro é o código que permite que o AJAX seja carregado na sua página.
Como explicado no início do artigo, o GTM permite que scripts sejam adicionados e gerenciados externamente ao seu site, facilitando a manutenção uma vez que o código-fonte do seu site não precisa ser alterado. Os scripts usados em nada diferem de scripts que você escreveria normalmente em seu site, sendo assim, o artigo abaixo, que explica como integrar seu site com o Ploomes via programação direta, pode ser útil:
Como integrar o formulário de contato de seu site com o Ploomes
Para demais dúvidas sobre a API do Ploomes, nossa equipe de suporte estará sempre à disposição para ajudar.