O artigo considerará uma das opções possíveis para implementar o rastreamento de chamadas no site. Este material foi escrito exclusivamente para fins educacionais e não tem o objetivo de substituir os serviços especializados existentes que fornecem o serviço de rastreamento de chamadas.
Requisitos funcionais
- O serviço deve fornecer a capacidade de substituir números (números) pela origem da transição para o site - a transição dos mecanismos de pesquisa, a transição para a publicidade, a passagem de links com tags utm.
- O serviço deve fixar o número exibido ao visitante do site e exibir esse número em uma visita adicional.
- Ao iniciar uma chamada para o número exibido, o serviço deve iniciar a criação de um evento no Google Analytics.
Mecânica geral
Quando você acessa o site, determinamos a origem da transição e, em seguida, verificamos se o número está atribuído a esse visitante. Se o visitante visitou o site pela primeira vez, atribuímos a ele um identificador exclusivo, após o qual atribuímos um número do pool de números relacionados a essa fonte de referência. No futuro, quando o visitante retornar ao site, exibiremos o número atribuído a ele anteriormente.
Gostaria de me concentrar no registro de chamadas. Substituir o número, atribuí-lo ao usuário é um problema técnico, o principal é poder comparar uma chamada específica e o número atualmente atribuído ao usuário. Se a telefonia usada permitir que você receba informações detalhadas das chamadas em andamento de forma contínua, sabendo o momento de uma chamada para um número específico e tendo informações sobre qual número foi exibido naquele momento no site de qual usuário, é possível iniciar a criação de um evento no Google Analytics e associá-lo à ROK.
Estrutura
- ct-server.ru - um script executável de serviço da web será colocado aqui, um banco de dados para armazenar configurações da sala e registrar visitantes;
- refer-to-site-with-ct-code.ru - neste site emularemos a transição da rede de pesquisa;
- site-with-ct-code.ru - o site no qual o script de substituição de número será colocado.
Vamos começar
O exemplo abaixo será implementado no servidor local.
Crie um host virtual
site-with-ct-code.ru , no qual colocamos o arquivo
index.html do seguinte conteúdo.
<!DOCTYPE HTML> <html> <head> <meta charset='utf-8'> <title>CT</title> <script src="http://ct-server.ru/script.js"></script> <script> </script> </head> <body> <p id='calltracking'>79000000000</p> </body> </html>
Como você pode ver no exemplo, conectamos um script externo
ct-server.ru/script.js , que "comunicará" entre
site-with-ct-code.ru e
ct-server.ru , além de interagir com a árvore DOM do site
site-with-ct-code.ru . O número será substituído pelo id do elemento - 'calltracking'.
Agora crie um
refer-to-site-with-ct-code.ru , que conterá um link para site-with-ct-code.ru para a capacidade de verificar o número do pino na transição do referenciador.
<!DOCTYPE HTML> <html> <head> <meta charset='utf-8'> <title>CT</title> </head> <body> <a href="http://site-with-ct-code.ru"></a> </body> </html>
Depois disso,
criaremos o host
ct-server.ru , que terá a seguinte estrutura:
index.php - um arquivo de script executável que aceita solicitações de postagem do site-with-ct-code.ru e interage com o banco de dados;
script.js - arquivo de script que será conectado nos sites onde a substituição de número será realizada.
Banco de Dados
Vamos precisar criar duas placas. Na tabela
ct , armazenaremos números e configurações para a exibição deles; na tabela de
números , registraremos a exibição dos números.
CREATE TABLE `ct` ( `id` int(11) NOT NULL, `phone` varchar(200) NOT NULL, `refer` varchar(200) NOT NULL, `utm` varchar(200) NOT NULL, `host` varchar(200) NOT NULL, `ga` varchar(200) NOT NULL, `login` varchar(200) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `ct` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `id` (`id`); ALTER TABLE `ct` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
Uma pequena explicação dos campos adicionados:
telefone - número de telefone substituído;
refer - a fonte da transição;
utm - link para a página na qual a substituição de número deve ocorrer;
host - o site no qual o script de substituição de número está localizado;
ga - id do contador do Google Analytics;
login - login do proprietário do número.
Encha o prato com dados.
INSERT INTO `ct` (`id`, `phone`, `refer`, `utm`, `host`, `ga`, `login`) VALUES (2, '78000000001', '', 'http://site-with-ct-code.ru/?utm_medium=cpc', 'http://site-with-ct-code.ru', 'UA-12345678-1', ''), (3, '78000000002', 'http://refer-to-site-with-ct-code.ru/', 'http://site-with-ct-code.ru/', 'http://site-with-ct-code.ru', 'UA-12345678-1', ''), (4, '78000000003', 'http://refer-to-site-with-ct-code.ru/', 'http://site-with-ct-code.ru/', 'http://site-with-ct-code.ru', 'UA-12345678-1', ''), (5, '78000000004', 'http://refer-to-site-with-ct-code.ru/', 'http://site-with-ct-code.ru/', 'http://site-with-ct-code.ru', 'UA-12345678-1', ''), (6, '78000000005', '', 'http://site-with-ct-code.ru/', 'http://site-with-ct-code.ru', 'UA-12345678-1', '');

Agora crie a placa de números.
CREATE TABLE `numbers` ( `id` int(11) NOT NULL, `phone` varchar(200) DEFAULT NULL, `ct_user` varchar(200) DEFAULT NULL, `refer` varchar(200) DEFAULT NULL, `gid` varchar(200) DEFAULT NULL, `page` varchar(200) DEFAULT NULL, `time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `numbers` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `id` (`id`), ALTER TABLE `numbers` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;COMMIT;
Nesta placa, registraremos qual visitante, qual número e em que momento é exibido no site. No futuro, esses dados poderão ser comparados com o registro de chamadas para iniciar a ação de destino - enviando um evento para o Google Analytics, criando um lead no CRM, enviando um email, etc.
telefone - número de telefone;
ct_user - ID do visitante;
refer - a fonte da transição;
gid - cookie do Google Analytics
página - a página na qual o número é exibido;
hora - hora de exibição do número.
Crie um manipulador de solicitações
A interação entre o serviço da web ct-server.ru e o site que hospeda o script será feita por meio de solicitações POST XHR (XMLHttpRequest) entre domínios.
Vamos abrir o arquivo
ct-server.ru/index.php criado anteriormente e adicionar uma verificação para receber dados de hosts permitidos; no nosso caso, são
site-with-ct-code.ru ,
site-with-ct-code2.ru e
site-with -ct-code3.ru .
<?php if (isset($_SERVER["HTTP_ORIGIN"]) === true) { $host = $_SERVER["HTTP_ORIGIN"];
Escrevemos valores variáveis de solicitações POST provenientes de site-with-ct-code.ru
$phone = $_POST["phone"]; $ct_user = $_POST["ct_user"]; $gid = $_POST["gid"]; $refer = $_POST["ref"]; $page = $_POST["page"];
O cozinheiro _ga tem o formato _ga = GA1.2.1212121212.12.1212121212, o trazeremos para o formato "1212121212.12121212121212".
if ($gid) { $pos = strpos($gid, '.', strpos($gid, '.') + 1); $gid = substr($gid, $pos + 1); }
Estabeleceremos uma conexão com o banco de dados onde criamos anteriormente nossas tabelas.
$conn = new mysqli("localhost", "root", "", "calltracking"); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
A interação com o serviço da web será feita por dois métodos -
get_num_first e
get_num .
O método
get_num_first é chamado quando o visitante interage pela primeira vez com o site para obter um número selecionando no banco de dados de acordo com os critérios - mail, referrer, utm, host. Se o resultado da seleção retornar um valor, exibimos o número de telefone.
Além disso, enviamos o evento para o Google Analytics por meio do
Protocolo de avaliação do
Google . O mesmo método é aplicável ao rastreamento de ações offline; no futuro, ele pode ser usado ao comparar o registro de chamadas e o registro de números na tabela de números.
if ($_POST['method'] == 'get_num_first') { $sql = "SELECT * FROM `ct` where `host` = '" . $host . "' and `refer` = '" . $refer . "' and `utm` = '" . $page . "' ORDER BY RAND() LIMIT 1 "; $result = $conn->query($sql); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { print_r($row["phone"]); $event = file_get_contents('https://www.google-analytics.com/collect?v=1&tid=UA-12345678-1&cid=' . $gid . '&t=event&ec=GetNumber&ea=number&z=' . $row["phone"] . ''); } } else {
O método
get_num é necessário para
registrar entradas na tabela de números.
else if ($_POST['method'] == 'get_num') { $sql = "INSERT INTO `numbers` (`phone`, `ct_user`, `gid`, `refer`,`page`) VALUES ( '" . $phone . "', '" . $ct_user . "', '" . $gid . "', '" . $refer . "', '" . $page . "');"; $result = $conn->query($sql); $sql = "SELECT * FROM `numbers` where `ct_user` = '" . $ct_user . "' ORDER BY `id` DESC LIMIT 1 "; $result = $conn->query($sql); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { print_r($row["phone"]); $event = file_get_contents('https://www.google-analytics.com/collect?v=1&tid=UA-12345678-1&cid=' . $gid . '&t=event&ec=ShowNumber&ea=number&z=' . $row["phone"] . ''); } } else {
Script de substituição numérica
Em seguida, seguiremos para o script
ct-server.ru/script.js , que conectamos no site-with-ct-code.ru
Para começar, vamos criar duas funções -
setcookie para criar e
getcookie para ler cookies. Nós os usaremos para gravar e obter o ID do cookie do usuário e número de telefone.
Depois disso, adicione a função
makeid para gerar o ID para o usuário.
Agora vamos criar uma função para gerar cookies contendo um ID de usuário de 33 dígitos.
O cookie
ct_user resultante é armazenado por 1 hora.
Prosseguimos para gerar uma solicitação de número através do método
get_num_first . O número resultante de ct-server.ru é gravado no cookie por 1 hora e realizamos a primeira substituição do número na página pelo ID do elemento.
Vamos criar uma função que enviará periodicamente o número exibido, ID do usuário, endereço da página, valor do cookie do Google Analytics, fonte de referência para ct-server.ru.
function getNumberPeriodically() { var method = "get_num"; var ct_user = getcookie("ct_user"); var phone = getcookie("phone"); var gid = getcookie("_ga"); var ref = document.referrer; var page = document.location.href; var host = window.location.origin; var xhr = new XMLHttpRequest(); var body = "&method=" + encodeURIComponent(method) + "&page=" + encodeURIComponent(page) + "&ct_user=" + encodeURIComponent(ct_user) + "&ref=" + encodeURIComponent(ref) + "&host=" + encodeURIComponent(host) + "&phone=" + encodeURIComponent(phone) + "&gid=" + encodeURIComponent(gid); xhr.open("POST", "http://ct-server.ru", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.withCredentials = true; xhr.send(body); xhr.onreadystatechange = function() {
No final, adicionamos a função sendToCalltracking, que verifica a presença do número de telefone do cookie e da ID do usuário.
function sendToCalltracking() { var ggg = getcookie("ct_user"); var ccc = getcookie("phone"); var gac = getcookie("_ga"); if ( typeof ggg === "undefined" || ggg === null || ccc === "undefined" || ccc === null || ccc.length < 1 || ggg.length < 1 || ccc === "" || ggg === "" ) {
No início do script, chamamos nossa função timer.
var myTimer = setTimeout(sendToCalltracking, 500);

Se os cookies forem excluídos durante a próxima operação, a função atribuirá um novo ao visitante de acordo com a seleção recebida por host e fonte. Além disso, é possível gravar os valores recebidos no navegador localStorage.

A cada minuto, o script enviará o valor do número do cookie e da ID do usuário, indicando a página em que foi aplicado sem recarregá-lo. Entende-se que o script será colocado em todas as páginas do domínio.

No próximo artigo, discutiremos o desenvolvimento de uma interface simples para adicionar e configurar números.