Чтобы оценивать эффективность разных каналов, в Яндекс.Метрике настраивают отслеживание целей и внедряют передачу данных электронной коммерции. Но эти способы подразумевают регистрацию лида, который может не закрыться в сделку.
Чтобы передать данные о совершенной сделке, можно:
- использовать загрузку оффлайн-конверсий;
- передавать данные из оффлайн-магазина.
Это два потенциальных сценария, которые могут быть применены на практике, с целью как оценки эффективности каналов, так и для автоматической оптимизации кампаний Директа.
Допустим, вы получили от покупателя номер телефона, 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)
Готово!
На этом все. Экспорт оффлайн-конверсий в Метрику — полезный инструмент. Ему найдется применение в любой компании, которая активно работает с данными. Сама загрузка данных не представляет ничего сложного. Советую попробовать.