Автор: Евгений Повх, ведущий менеджер по контекстной рекламе, Риалвеб

На формирование отчетов по звонкам, в котором нужно свести их количество с, например, расходами на рекламу, рекламные специалисты зачастую тратят много времени, вставляя цифры в отчеты руками или копируя их из excel-выгрузок.
При этом обычно не смотрят на число достижений целей по событию «звонок» в Google Analytics (GA), так как имеется расхождение между данными в GA и личном кабинете системы коллтрекинга.

Мой скрипт автоматически кладет статистику по звонкам в Google Spreadsheets, где ее можно свести с автоматической выгрузкой расходов рекламных систем, различных показателей из GA и т.п. В результате на составление отчетности можно будет не тратить ни секунды.

API CallTouch

CallTouch позволяет получать данные по звонкам с помощью обычных GET-запросов, а ответ отдает в формате JSONMapObject. Этот ответ можно парсить и работать с ним, как с обычной текстовой строкой, вычленяя из нее необходимые данные.

Чтобы начать работать с API CallTouch, необходимо в личном кабинете системы зайти в Настройки -> API и поставить галочку напротив «Включить/отключить Calltouch API»:

Параметры вызова

Для запроса статистики нам потребуется указать следующие значения:

— Идентификатор сайта;
— Токен для доступа к системе Calltouch (id сайта и токен нужно скопировать из того же раздела Настройки -> API):

— Ссылку на Google Spreadsheets и номер листа в нем, куда будет записываться статистика:

— Названия столбцов в Google-документе, куда требуется записывать дату, названия источника, канала, кампании и количество звонков:

— Дата начала отчетного периода (по умолчанию — вчерашний день):

— Источники, для которых нужно получить статистику, и их типы, как они называются в Calltouch:

— Название источников и каналов, как мы хотим их записать в Google Spreadsheets (это бывает актуально, например, когда Яндекс.Визитка в Calltouch считается отдельным источником, но нам ее надо записать yandex / cpc).

Запуск скрипта

Скрипт написан на языке JavaScript и его можно запустить даже в аккаунте Google Awdords в разделе Массовые операции -> Скрипты.
Для этого нужно в данном разделе нажать «+Скрипт»:

В появившемся окне вставить код, указанный в конце статьи. Затем нужно указать название этого скрипта, нажать на кнопку «Авторизация» и выполнить эту несложную процедуру. После этого можно нажать на кнопку «Выполнить скрипт»:

Чтобы скрипт запускался автоматически, нужно нажать на «+ Расписание» и настроить частоту и время его запуска:

В дальнейшем я планирую еще модифицировать данный скрипт, добавив в него возможность, например, импортировать статистику по звонкам с определенными тегами или выбирать модель атрибуции.

Скрипт

function main()
{
var msk = new  MskDate (); 

var id = 'id';                                   // id клиента в CallTouch
var token = 'token';                             // токен

var unique = 1; // 1 - если нужны уникальные звонки, 0 - если нет
var target = 1; // 1 - если нужны целевые звонки, 0 - если нет
  //Если выбраны в обоих случаях 1, то статистика будет собираться по уникально-целевым звонкам.
  //Если выбраны в обоих случаях 0, то статистика будет собираться по всем звонкам.

var date = msk.yesterday();             // выбираем для ежедневного сбора статистики за вчерашний день
//var date = msk.makeDate(2017,6,30);       // Или задаем дату, с которой начать сбор в формате "год,месяц,день"

// Для того, чтобы выбрать один из двух вариантов, нужно убрать // в начале соответствующей строки и поставить их перед строкой с другим вариантом.

var ss = SpreadsheetApp.openByUrl("google_spreadsheet_url");  //Задаем ссылку на гуглдок для выгрузки статы
ss.setActiveSheet(ss.getSheets()[2]);           // в квадратных скобках указываем номер листа в гугл таблице для записи (нумерация ведется от 0!)

var line = 1;                // номер строки в гуглдоке, с которой начать поиск пустой строки для записи
  while (ss.getRange("A"+line).getValue()!="") {line = line + 1; }

var date_row = "A";      // Столбец для даты
var source_row = "B";    // Столбец для источника
var medium_row = "C";    // Столбец для канала
var campaign_row = "D";  // Столбец для кампании
var call_row = "E";      // Столбец для количества звонков

var Sources = {};

Sources['s1'] = new Source('google','cpc',1,'google','cpc');            //Прописываем с новой строки в скобках через запятую:
Sources['s2'] = new Source('yandex','cpc',1,'yandex','cpc');            // - название источника и тип источника, как они названы в CallTouch
Sources['s3'] = new Source('Гугл.Визитка','',0,'google','cpc');         // - 1 или 0 в зависимости от того, нужна ли стата по этому каналу в разрезе кампаний
Sources['s4'] = new Source('Яндекс.Визитка','',0,'yandex','cpc');       // - название источника и канала, которое мы хотим записать в таблицу
Sources['s5'] = new Source('Facebook_lead','',0,'Facebook_lead','cpc');

//=====================================================================  while (date < msk.today())
  {
            var rqst = request(id,token,date,unique,target); 

            for (var i in Sources)
            {
            Sources[i].count(rqst);
            line = 
Sources[i].write_info(line,date_row,source_row,medium_row,campaign_row,call_row,date,ss);
            Sources[i].set_to_zero();
            }

            date = msk.next_day(date); 
  }

}

//=====================================================================function MskDate ()
{
this.now = new Date();
this.MILLIS_PER_HOUR = 1000 * 60 * 60;
this.MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
this.msk_time = new Date(this.now.getTime() + 10*this.MILLIS_PER_HOUR);

this.makeDate = function(year,month,day)
  {  return new Date(year,month-1,day);  };

this.today = function()
  {return new Date(this.msk_time.getFullYear(),this.msk_time.getMonth(),this.msk_time.getDate());};

this.yesterday = function()
  { var yes = new Date(this.msk_time.getTime() - this.MILLIS_PER_DAY);
            return new Date(yes.getFullYear(),yes.getMonth(),yes.getDate());
  };

this.next_day = function(date)
  {return new Date(date.getTime() + this.MILLIS_PER_DAY);};

this.write_date = function(date)
  {
            var n = new Date(date);
            return Utilities.formatDate(n, 'Europe/Moscow', 'dd.MM.y');
  };

};

//=====================================================================function request (id,token,date,unique,target)
{
var d = new Date(date);
var rq1 = 'http://api.calltouch.ru/calls-service/RestAPI/';
var rq2 = '/calls-diary/calls?clientApiId=';
var rq3 = '';

  if(unique==1 && target==1) {rq3 = '&uniqTargetOnly=true';}
  else if(unique==1 && target==0) {rq3 = '&uniqueOnly=true';}
  else if(target==1 && unique==0){ rq3 = '&targetOnly=true';}

var day = d.getDate();
var month = d.getMonth()+1;
var year = d.getFullYear(); 
var date_rq = '&dateFrom='+day+'/'+month+'/'+year+'&dateTo='+day+'/'+month+'/'+year;
var rq = rq1+id+rq2+token+date_rq+rq3;

return UrlFetchApp.fetch(rq).getContentText();
}
//=====================================================================function Source(source,medium,need_campaign,source_write,medium_write) {
this.source = source;
  if (medium=='') {this.medium =  '<не указано>';}
  else {this.medium = medium;}
this.need_campaign = need_campaign;
this.source_write = source_write;
this.medium_write = medium_write;
this.campaigns = {};

this.count = function(request)
  {
  if (this.need_campaign==0)
  {this.campaigns[this.source] = (request.split('"source":"'+this.source+'","medium":"'+this.medium+'"').length - 1);}

   else if (this.need_campaign==1)
            {
            var camp_search = 0;
            while (request.indexOf('"source":"'+this.source+'","medium":"'+this.medium+'"',camp_search)>0)
            {
            var camp_start = request.indexOf('"utmCampaign":"',request.indexOf('"source":"'+this.source+'","medium":"'+this.medium+'"',camp_search))+15;
            var camp_end = request.indexOf('","',camp_start);
            var campaign = request.substr(camp_start, camp_end-camp_start);
            camp_search = camp_end;
            if (this.campaigns[campaign]>0)
            {this.campaigns[campaign] = this.campaigns[campaign]+1;}
            else {this.campaigns[campaign] = 1;}
            }
            } 
  };

this.write_info = function(line,date_row,source_row,medium_row,campaign_row,call_row,date,ss)
{
  var mosk = new  MskDate (); 
            for (var i in this.campaigns) 
            {
            if (this.campaigns[i] != 0)
            {
            ss.getRange(date_row+line).setValue(mosk.write_date(date));
            ss.getRange(source_row+line).setValue(this.source_write);
            ss.getRange(medium_row+line).setValue(this.medium_write);
            ss.getRange(campaign_row+line).setValue(i);
            ss.getRange(call_row+line).setValue(this.campaigns[i]);
            line = line + 1;
            }
            }
  return line;
};

this.set_to_zero = function()
{
  for (var i in this.campaigns) 
  {  this.campaigns[i]=0; }
}

};

 

Журналист, новостной редактор, работает на сайте с 2009 года. Специализация: интернет-маркетинг, SEO, поисковые системы, обзоры профильных мероприятий, отраслевые новости рунета. Языки: румынский, испанский. Кредо: Арфы нет, возьмите бубен.

Прокомментировать

2 Комментарий на "Скрипт для автоматического импорта статистики из системы коллтрекинга"

Notify of
Sort by:   newest | oldest | most voted
Дмитрий Калиниченко
Участник

Для этого обязательно надо пользоваться на сайте вашей системой колтрекинга, установить ее? А если стоит уже другая и настроена, надо и ваш код ставить?

Евгений Повх
Участник

Скрипт работает только для конкретной системы коллтрекинга

wpDiscuz