В прошлой статье разбирали методы статистического трекинга и промокода для определения источника звонка. Сегодня расскажу про динамический колл-трекинг с примером. Естественно, пример будет максимально упрощен. Наша задача понять сам принцип работы. А как его будете совершенствовать и сколько труда и денег готовы вложить на свой проект уже зависит от вас.
Динамический колл-трекинг: принцип работы
Динамический колл-трекинг в идеале работает по следующему принципу «пришел — получил свой номер телефона навсегда». Это было бы прекрасно! Вы с высокой точностью смогли бы определить источник клиента. Но проблема кроется в том, что никто финансово не готов выделить столько номеров (бесконечно), да и нерешаемая эта задача. Количество номеров ограничено…
Но, мы готовы пожертвовать небольшой точностью. Для этого надо рассчитать количество требуемых номеров в зависимости от посещаемости ресурса и аудитории. Надо просчитать, сколько примерно времени необходимо для посетителя, чтобы он совершил звонок пребывая на сайте. На этот фактор могут влиять скорость загрузки страницы, объем информации и специфика вашей деятельности (выбрать пиццу быстрее, чем кондиционер). Все это можно откалибровать со временем.
Что нам потребуется?
Сначала создадим базу данных через phpMyAdmin и таблицу в ней. В моем примере база будет называться commondb, а таблица actouch2.
Phone — с этого поля номера будут браться для вывода на странице посетителя. Поэтому формат можете выбрать любой исходя из вашей верстки.
Alias — альтернативное значение телефонного номера. Когда он нужен? У нас все звонки принимает колл-центр. Как поступил звонок, у них открывается форма-анкета, где автоматом подставляется телефонный номер на который звонили. Так вот номер куда звонили принимается в формате 749900000X. У вас могут быть другие варианты.
FRelease — дата освобождения номера. Наш скрипт будет выдавать номер на определенное время, например, на 10 минут. После чего номер освобождается и может быть выдан следующему посетителю. У текущего посетителя номер тоже обновится при следующей загрузке страницы (можно сделать обновление аяксом).
FirstVisit — источник посетителя, откуда он пришел к вам в самый первый раз.
Referral — текущий источник посетителя. Если он впервые у вас, то совпадет с FirstVisit.
CallPage — форма захвата. Допустим у вас сотни автоматически генерируемых лендингов. Здесь будет информация о сайте на котором номер выдался.
Первые две строки заполнил тестовыми данными, чтобы вам было понятнее.
Теперь создадим файл actouch2.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
<?php date_default_timezone_set('Europe/Moscow'); //Соединяемся, выбираем базу данных $link = mysql_connect('localhost', 'login', 'password'); mysql_query('SET NAMES utf8'); mysql_select_db('commondb'); $req_new_phone = true; $reserve_phone = '+7 (499) 000-00-01'; //Если админ, то всегда выводим резервный номер if (trim($_COOKIE['noact2'])) { $phone = $reserve_phone; } else { //Если есть запись с номером в Cookies if (trim($_COOKIE['actid2'])) { $actid2 = $_COOKIE['actid2']; //Получим номер из пула $query = 'SELECT ID, Phone FROM actouch2 WHERE ID = "'.$actid2.'"'; $result = mysql_query($query); $num_rows = mysql_num_rows($result); if ($num_rows == 0) { //Если не нашли такой ID, тогда выводим дефолтный номер и зануляем Cookies $phone = $reserve_phone; setcookie('actid2', '', time() - 3600); } else { $row = mysql_fetch_assoc($result); $phone = $row['Phone']; $req_new_phone = false; //Добавим информацию в таблицу звонков //refer и first_visit берутся из файла metriks.php. $current_url = urldecode(getenv('SERVER_NAME').getenv('REQUEST_URI')); $db_first_visit = urldecode($first_visit); $db_current_visit = urldecode($refer); $query = 'UPDATE actouch2 SET FirstVisit="'.$db_first_visit.'", Referral="'.$db_current_visit.'", CallPage="'.$current_url.'" WHERE ID="'.$actid2.'"'; $result = mysql_query($query, $link); } mysql_free_result($result); } //Если требуется новый номер if ($req_new_phone) { $query = 'SELECT ID, Phone FROM actouch2 WHERE FRelease<"'.date("Y-m-d H:i:s").'" LIMIT 1'; $result = mysql_query($query); $num_rows = mysql_num_rows($result); if ($num_rows == 0) { $phone = $reserve_phone; setcookie('actid2', '', time() - 3600); } else { $row = mysql_fetch_assoc($result); $phone = $row['Phone']; $actid2 = $row['ID']; //Добавим информацию в таблицу звонков //refer и first_visit берутся из файла metriks.php. $current_url = urldecode(getenv('SERVER_NAME').getenv('REQUEST_URI')); $db_first_visit = urldecode($first_visit); $db_current_visit = urldecode($refer); $release_date = new DateTime(date('Y-m-d H:i:s')); $release_date->modify('+20 minutes'); //Время жизни номера 20 минут. $query = 'UPDATE actouch2 SET FirstVisit="'.$db_first_visit.'", Referral="'.$db_current_visit.'", CallPage="'.$current_url.'", FRelease="'.$release_date->format('Y-m-d H:i:s').'" WHERE ID="'.$row['ID'].'"'; $result = mysql_query($query, $link); } // Освобождаем память от результата mysql_free_result($result); } mysql_close($link); //Запишем информацию в куки echo " <script> var now = new Date(); var time = now.getTime(); var expireTime = time + 1000*60*20; //Время жизни номера на стороне клиента 20 минут. now.setTime(expireTime); document.cookie='actid2=".$actid2."; path=/; domain=.site.ru; expires='+now.toGMTString(); </script>"; } //Подменим номер echo " <script> $(function(){ $('.phone').text('".$phone."'); $('.phone').unbind('click').click(function() { location.href='tel:".eregi_replace("([^0-9])", "", $phone)."'; }); }) </script>"; ?> |
Мне кажется, что скрипт не нуждается в дополнительных комментариях. Если я не прав, то спрашивайте, постараюсь ответить.
Т.к. у нас в БД используется время жизни выданного телефонного номера, то нам необходимо синхронизировать время разных часовых поясов на стороне клиента и на сервере. Для этого мне было достаточно в этом скрипте задать часовой пояс Москвы.
1 |
date_default_timezone_set('Europe/Moscow'); |
Резервный телефонный номер будет выдаваться в случае, если есть запись в Cookies «noact2» и если нет свободных телефонных номеров из пула. Параметр «noact2» можете применять для администраторов и менеджеров, чтобы им не выдавался номер из пула. Код «noact2» будет приведен ниже в файле metriks.php. Инициировать запись можно введя в адресной строке браузера адрес вида http://site.ru/?noact2=no.
1 2 |
//Если админ, то всегда выводим резервный номер if (trim($_COOKIE['noact2'])) { $phone = $reserve_phone; } |
Дополнительный файл metriks.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php $noact2 = $_GET['noact2']; if (trim($noact2)) { //Если есть noact2, то для админа будем всегда показывать резервный номер $noact2_script = "document.cookie='noact2=".$noact2."; path=/; domain=.site.ru; expires=".date('r', strtotime('now +365 days'))."';"; } else if (trim($_COOKIE['noact2'])) { $noact2_script = "document.cookie='noact2=".$_COOKIE['noact2']."; path=/; domain=.site.ru; expires=".date('r', strtotime('now +365 days'))."';"; } /*Сохраним реферера на текущий сеанс*/ $refer = getenv("HTTP_REFERER"); if (trim($_COOKIE['current_visit'])) { //Если рефер уже определен $refer = $_COOKIE['current_visit']; } if (trim($refer)) { echo "<script> document.cookie='current_visit=".$refer."; path=/;'; </script>"; } /*Сохраним первоисточник*/ $first_visit = $_COOKIE['first_visit']; if (!trim($first_visit)) { $first_visit = getenv("HTTP_REFERER"); } if (!trim($first_visit)) { $first_visit = 'Неизвестно'; } if (trim($first_visit)) { echo "<script> document.cookie='first_visit=".$first_visit."; path=/; expires=".date('r', strtotime('now +365 days'))."'; var inp = document.getElementsByName('first_visit'); var i; for (i = 0; i < inp.length; i++) { inp[i].value = '".$first_visit."'; } </script>"; } /*Подключим скрипт телефонных номеров*/ include '../actouch2.php'; ?> |
Этот файл прикрепляете в подвале сайтов и начинаете получать данные в базу. А как обработать информацию спросите вы? Это зависит от того каким-образом устроен ваш бэк-офис: колл-центр или простые трубки, есть ли API у вашего оператора, используете CRM или таблицу в Excel… Пример интеграции с Zoho CRM напишу скоро. =)
Как калибровать трекинг?
Во-первых, если есть много ложных заявок (по телефону уточнили, что он звонил с Лендинга №1, а не с Лендинга №2), тогда увеличиваете время жизни выданного номера, т.к. ваши клиенты скорее всего долго думаю прежде чем позвонить.
Во-вторых, если у вас часто выдается резервный телефонный номер, значит необходимо увеличить количество телефонных номеров для пула. Это прямо пропорционально времени жизни выданных номеров и посещаемости сайта.
Где закупить номера?
Мы закупали номера в компании Zadarma. По отзывам качество телефонии не на высшем уровне, но сбои мы не часто наблюдаем, поэтому цена/качество нас вполне устраивает. Да и «косяки» техподдержка пока оперативно решала. Плюс к этому бесплатная АТС.
Закупить номера для трекинга можно по ссылке: https://zadarma.com
Желаю всем успешных рекламных кампаний и высоких показателей!