Атрибуция событий протокола измерений GA4, не работает с событием неделю спустя?

На моем сайте работает GA4, и в моем бэкэнде я храню client_id и session_id пользователя. Используя протокол измерения на нашем серверном сервере, я отправляю событие начала пользовательской пробной версии, когда пользователь запускает пробную версию, и отправляю событие оплаты пользовательской подписки, когда пользователь платит за полный месяц. Оба этих события используют одну и ту же функцию в моем коде, поэтому я знаю, что между ними ничего не меняется:

# sends google analytics event
def send_ga4_event(event_name, customer_id):
    measurement_id = os.getenv("GA_MEASUREMENT_ID")
    api_secret = os.getenv("GA_MP_SECRET")
    ga_debug_mode = os.getenv("GA_DEBUG_MODE") == "true"

    user = get_user(stripe_id=customer_id, tag = "send_ga4_event")
    if not user:
        logging.warn("send_ga4_event: User doesn't exist in database")
        return False
    elif not user.stripe_email:
        logging.warn("send_ga4_event: No stripe email associated with user")
        return False
    elif not user.ga_client_id:
        logging.warn("send_ga4_event: No ga_client_id associated with user")
        return False

    if not user.ga_session_id:
        logging.warn("send_ga4_event: No ga session id associated with user, continuing anyway.")
    """Send an event to GA4 with a hashed email."""
    hashed_email = hashlib.sha256(user.stripe_email.lower().encode()).hexdigest()
    params = {"debug_mode": ga_debug_mode}

    if user.ga_session_id:
        # logging.debug(f"send_ga4_event: USER {user}")
        params["session_id"] = user.ga_session_id

    event_data = {
        "client_id": user.ga_client_id,
        "user_id": hashed_email,
        "non_personalized_ads": False,
        "events": [{"name": event_name, "params": params}],
    }
    headers = {"Content-Type": "application/json"}
    url = f"https://www.google-analytics.com/mp/collect?measurement_id = {measurement_id}&api_secret = {api_secret}"

    response = requests.post(url, headers=headers, data=json.dumps(event_data))
    if response.ok:
        logging.debug(
            f"send_ga4_event: event_name {event_name}, customer_id {customer_id}, email {hashed_email}, measure id {measurement_id}, api secret {api_secret} [{response.status_code}, {response.text}]"
        )
        return True
    else:
        logging.error(
            f"send_ga4_event: event_name {event_name}, customer_id {customer_id}, email {hashed_email}, measure id {measurement_id}, api secret {api_secret} [{response.status_code}, {response.text}]"
        )
        return False

Когда я говорю, что атрибуция неверна, я имею в виду, что событие с оплаченной подпиской отображается в отчете о трафике в GA4 как «неназначенное». Первоначально эта проблема возникла и для событий, запущенных пробной версией, но как только я добавил session_id к событиям, он был правильно атрибутирован.

В отправляемых данных я отправляю их client_id, user_id (это их хешированный адрес электронной почты), а внутри «событий» я отправляю «session_id».

Прочитав документацию, у меня сложилось впечатление, что мне следует обновлять session_id и client_id, хранящиеся в нашем бэкэнде, каждый раз, когда они изменяются в их браузере. Документы звучат так, будто они должны связывать любые сеансы, продолжающиеся 90 дней. Время между запуском пробной версии и оплатой подписки составляет одну неделю, поэтому это не должно быть проблемой.

Кто-нибудь испытал это? если да, то как это исправить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

События можно отправлять для сеансов, срок действия которых истек, но метрики, связанные с сеансами, будут отображаться как «не заданы» в GA4, даже если они присутствуют в BigQuery.

Отправка события для сеанса, который завершился, скажем, более 3 дней назад, хотя оно учитывается в общем количестве событий и отображается в BigQuery, будет отображаться как «не установлено» для таких показателей, как целевая страница и источник/канал сеанса в отчетах GA4. Это связано с тем, что сеансы не могут принимать новые события после истечения их срока действия.

также вы можете проверить другие проблемы, связанные с атрибуцией, которая не работает на этом носителе: https://medium.com/@aliiz/navigating-measurement-protocol-challenges-and-elimination-not-set-issues-in-ga4- а-технический-7f01863649d6

Интересный! В чем тогда решение? Могу ли я получить аналог отчета о трафике и получить правильную атрибуцию даже для событий, происходящих за неделю? Кроме того, я просто запутался, потому что GA4 говорит в своих документах, что первый источник будет правильно атрибутирован до 90 дней.

Max 15.06.2024 16:35

В BigQuery вы можете создавать собственные атрибуции, недоступные в GA4. Это связано с тем, что протокол измерения (MP) GA4 и его настройки атрибуции изменить нельзя. Кроме того, 90-дневный период ретроспективного анализа в GA4 отличается от вашей конкретной проблемы. GA4 использует модель непрямой атрибуции «последний» для определения источника сеанса. 90-дневное окно — это максимальный период, который GA4 использует для анализа и определения источника/канала сеансов, независимо от того, отправляются ли они через протокол измерений или уровень данных.

ali izadi 18.06.2024 15:03

Идентификатор сеанса — это временная метка начала сеанса на вашем веб-сайте. Таким образом, он меняется каждый раз, когда пользователь запускает сеанс на вашем сайте. Следует иметь в виду, что вы не можете отправлять события по протоколу измерений в течение 72 часов после начала сеанса.

Окно атрибуции по умолчанию составляет 90 дней для ключевого события, поэтому это не должно быть проблемой, если вы отправляете точные сведения о сеансе с каждым событием.

Вам следует проверить источник всего неназначенного трафика в отчете GA4. Мы также отправляем наше ключевое событие, то есть покупку, через протокол измерения. Наша полезная нагрузка имела один настраиваемый параметр с именем source, который, как оказалось, переопределял фактический источник сеанса значениями нашего сеанса с настраиваемыми параметрами. Поэтому убедитесь, что у вас нет чего-то подобного.

Другие вопросы по теме