Экспорт оффлайн-конверсий в Я.Метрику. Зачем это и как?

Роман Любимцев
Head of Analytics&Marketplace, MediaGuru

Чтобы оценивать эффективность разных каналов, в Яндекс.Метрике настраивают отслеживание целей и внедряют передачу данных электронной коммерции. Но эти способы подразумевают регистрацию лида, который может не закрыться в сделку. 

Чтобы передать данные о совершенной сделке, можно:

  • использовать загрузку оффлайн-конверсий;
  • передавать данные из оффлайн-магазина. 

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

Допустим, вы получили от покупателя номер телефона, email и смогли сопоставить контакты с clientID. Полученную связку можно загрузить в Метрику. Она поможет узнать, с каких источников трафика пользователь заходил на сайт перед тем, как совершил покупку в розничном магазине.

Оффлайн-конверсии или модуль сквозной аналитики

Недавно Яндекс.Метрика выпустила инструмент, который позволяет загружать данные о заказах и клиентах из CRM для более полноценной статистики. Разумеется, если есть возможность, стоит обратить на него внимание. Объясняю, почему добавил оговорку «если…». В некоторых компаниях нет возможности сделать подобный импорт, или им нужно передавать дополнительные конверсии, не относящиеся к заказам/сделкам.

Как загрузить данные в метрику?

Рассмотрим случай, когда есть коллтрекинг и для звонков проставляются теги. Разрез по тегам можно получить в отчете по звонкам. Но если есть необходимость использовать звонок с определенным тегом как цель (например, для Директа), то с этим есть проблема. Здесь и поможет импорт конверсий.

Разберем передачу звонков с нужным тегом как конверсию (цель) в Метрику при помощи языка Python. Сделаем это на примере CallTouch. Последовательность действий должна быть такой:

  1. Скачать данные из CallTouch.
  2. Привести данные к нужному формату.
  3. Загрузить данные в Метрику.

Загрузка данных из 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)

Готово!

На этом все. Экспорт оффлайн-конверсий в Метрику — полезный инструмент. Ему найдется применение в любой компании, которая активно работает с данными. Сама загрузка данных не представляет ничего сложного. Советую попробовать.

Оцените статью

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Поделитесь в соцсетях

Похожие публикации

22 полезных отчета Universal Analytics для специалиста по рекламе

Австрийское управление по защите данных признало незаконным использование Google Аналитики — возможно, в обозримом будущем эту эстафету подхватит весь Европейский Союз. Пока наблюдаем за ходом событий и публикуем краткий обзор самых полезных отчетов Universal Analytics, который подготовил специалист отдела автоматизации и аналитики в MediaGuru Айнур Кильдияров. В Universal Analytics отчеты сгруппированы в пять сегментов — все они расположены на левой панели: «В реальном времени»; «Аудитория»; «Источники трафика»; […]

Оценка влияния блокировщиков рекламы при работе с server-side GTM

В конце сентября Симо Ахава поделился материалом, в котором подробно рассказал о влиянии блокировщиков рекламы. Но не стал делать акцент на способах обхода, а решил рассказать о технологии, которая помогает понять, применяется ли блокировка. Веб-аналитик MediaGuru Тимур Леденёв перевел для вас эту статью. Многим кажется, что server-side (GTM для сервера) GTM устойчив к блокировщикам рекламы и контента. В конце […]

10 причин, почему данные в Яндекс Директе и Яндекс Метрике не сходятся

Если у вас не сходятся данные в Директе и Метрике, возможно, вы не учитываете различия в механике отслеживания конверсий, путаете визиты с кликами или используете разные модели атрибуции. Эти и еще 7 причин, по которым данные могут не сходиться, разбирает руководитель отдела автоматизации и аналитики в MediaGuru Роман Любимцев. Вопрос «Почему статистика в Яндекс Директе отличается от статистики в Яндекс Метрике?» возникает от непонимания, как устроена механика работы отчетов и интеграция двух сервисов. […]