Чтобы оценивать эффективность разных каналов, в Яндекс.Метрике настраивают отслеживание целей и внедряют передачу данных электронной коммерции. Но эти способы подразумевают регистрацию лида, который может не закрыться в сделку.
Чтобы передать данные о совершенной сделке, можно:
- использовать загрузку оффлайн-конверсий;
- передавать данные из оффлайн-магазина.
Это два потенциальных сценария, которые могут быть применены на практике, с целью как оценки эффективности каналов, так и для автоматической оптимизации кампаний Директа.
Допустим, вы получили от покупателя номер телефона, email и смогли сопоставить контакты с clientID. Полученную связку можно загрузить в Метрику. Она поможет узнать, с каких источников трафика пользователь заходил на сайт перед тем, как совершил покупку в розничном магазине.
Оффлайн-конверсии или модуль сквозной аналитики
Недавно Яндекс.Метрика выпустила инструмент, который позволяет загружать данные о заказах и клиентах из CRM для более полноценной статистики. Разумеется, если есть возможность, стоит обратить на него внимание. Объясняю, почему добавил оговорку «если…». В некоторых компаниях нет возможности сделать подобный импорт, или им нужно передавать дополнительные конверсии, не относящиеся к заказам/сделкам.
Как загрузить данные в метрику?
Рассмотрим случай, когда есть коллтрекинг и для звонков проставляются теги. Разрез по тегам можно получить в отчете по звонкам. Но если есть необходимость использовать звонок с определенным тегом как цель (например, для Директа), то с этим есть проблема. Здесь и поможет импорт конверсий.
Разберем передачу звонков с нужным тегом как конверсию (цель) в Метрику при помощи языка Python. Сделаем это на примере CallTouch. Последовательность действий должна быть такой:
- Скачать данные из CallTouch.
- Привести данные к нужному формату.
- Загрузить данные в Метрику.
Загрузка данных из CallTouch
Заходим в личный кабинет CallTouch и получаем токен. Также понадобится ID кабинета.
Напишем функцию для загрузки звонков из CallTouch.
import requests
def get_calls(token, site_id, date_from, date_to,
attribution=1, bind_to='call', tags=True):
'''
Функиция возвращает журнал звонков.
Параметры:
token: str, токен из ЛК
site_id: str: id ЛК
date_from: str, дата начала периода в формате dd/mm/yyyy
date_to: str, дата окончания периода в формате dd/mm/yyyy
attribution: int, атрибуция (0 - последнее взаимодействие,
1 - последний непрямой)
bind_to: str, флаг привязвки звонка
call: по дате звонков
session: по дате сессий)
tags: выгрузка тегов звонков
True: выгружaть
False: не выгружать
'''
calls = []
page, limit, pages = 1, 500, 1
url = f'http://api.calltouch.ru/calls-service/RestAPI/{site_id}/calls-diary/calls'
params = {'clientApiId':token,
'dateFrom': date_from,
'dateTo': date_to,
'page': page,
'limit': limit,
'attribution': attribution,
'bindTo': bind_to}
if tags: params.update(withCallTags='true')
while page <= pages:
r = requests.get(url, params=params)
pages = int(r.json()['pageTotal'])
page += 1
params.update(page=page)
calls += [x for x in r.json()['records']]
return calls
Преобразование данных
Чтобы загрузить данные в Метрику, они должны соответствовать формату. Метрика принимает файлы в CSV с разделителем в виде запятой. В качестве обязательного параметра — clientID или yaclid (только для импорта конверсий Я.Директа), идентификатор цели и временная метка.
Напишем две простые функции (их скрин ниже).
- Первая будет вынимать из объекта со звонками нужные нам значения, а именно timestamp (временная метка в UNIX формате) и yaClientId (clientID Я.Метрики).
- Вторая будет проверять наличие нужного тега в звонке.
def extract_params(params, element):
result = []
for p in params:
result.append(element.get(p))
return result
def check_tags(tag, element):
result = False
for el in element['callTags']:
if tag in el['names']: result = True
return result
Для примера возьмём тег, который автоматически определяет CallTouch — гендерную принадлежность «Женщина».
params = ('timestamp', 'yaClientId')
tag = 'Женщина'
export_data = []
for d in data:
if check_tags(tag, d):
export_data.append(extract_params(params, d))
В некоторых строках вместо clientID стоит значение None. Это звонки без сессии, их нужно отфильтровать.
Фильтруем:
export_data = [x for x in export_data if x[1] is not None]
Теперь сохраним в CSV-файл полученные данные и добавим идентификатор конверсии.
with open('export.csv', 'w', encoding='utf-8') as f:
f.write('DateTime,ClientID,Target\n')
for row in export_data:
row = [str(x) for x in row]
row.append('women_call')
f.write(','.join(row) + '\n')
f.close()
Посмотрим что получилось:
Перейдем к Метрике.
Подготовка для работы с API Метрики
Первым делом идем в настройки счетчика в раздел «Загрузка данных». Включаем «Оффлайн-конверсии» или убеждаемся, что функция включена.
Для работы с API Метрики нужно создать OAuth приложение.
Указываем название. В платформе выбираем «Веб-сервисы», а в Callback URI указываем этот URL: https://oauth.yandex.ru/verification_code
В доступах находим Яндекс.Метрику и ставим галочки.
Жмем «Создать приложение».
В созданном приложении потребуется ID, чтобы получить отладочный токен.
Чтобы получить токен переходим по адресу: https://oauth.yandex.ru/authorize?response_type=token&client_id=358934bf12d246b78dc57deac012f4c4 , где client_id — это ID вашего приложения.
Авторизируемся под логином, у которого есть доступ к счетчику с возможностью редактирования. Получаем токен. Его нужно сохранить в файлик и никому не показывать! Тут мы будем использовать отладочный токен при переносе на постоянную работу. Лучше получать токен с обменом на код. Срок жизни отладочного токена 180 дней.
Загрузка данных в Метрику
Осталось написать функцию для загрузки данных, которые уже были в Метрике.
def upload_convertions(file_path, token, counter):
'''
Функция загружает файл CSV с конверсиями в Метрику
Параметры:
file_path: str, путь до файла
token: str, токен
counter: str, номер счетчика
'''
file = open(file_path, "r").read()
id_type = "CLIENT_ID"
url = f"https://api-metrika.yandex.net/management/v1/counter/{counter}/offline_conversions/upload?client_id_type={id_type}"
headers = {
"Authorization": "OAuth {}".format(token)
}
r = requests.post(url, headers=headers, files={"file":file})
print(r.json())
И вызвать функцию:
upload_convertions(file_path, token, counter)
Готово!
На этом все. Экспорт оффлайн-конверсий в Метрику — полезный инструмент. Ему найдется применение в любой компании, которая активно работает с данными. Сама загрузка данных не представляет ничего сложного. Советую попробовать.










