You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python向GA4发送事件后常规报表无数据,求解决方案

问题:GA4实时报表可见事件,但常规报表无数据

我编写了Python代码向Google Analytics 4(GA4)发送事件,请求返回204状态码(表明请求成功),但仅能在GA4的实时报表中看到事件计数,常规事件报表中无任何数据。希望解决该问题,让事件能在常规报表中显示,进而制作自定义报表。

我的代码如下:

import firebase_admin
from firebase_admin import credentials, db
import json
import requests
import uuid

# Configuração do Firebase
if not firebase_admin._apps:
    cred = credentials.Certificate("C:/SensiaFortaleza/Scripts/Assets/sensiafortaleza-firebase-adminsdk-ymbm5-4d5161e452.json")
    default_app = firebase_admin.initialize_app(cred, {'databaseURL': 'https://sensiafortaleza-default-rtdb.firebaseio.com/'})

# Carregar dados do arquivo JSON
file = "C:/SensiaFortaleza/Scripts/arquivoteste.json"
data = {}

try:
    with open(file, encoding="utf-16") as f:
        data = json.load(f)
except:
    with open(file, encoding="utf-8") as f:
        data = json.load(f)

# Referência ao caminho do banco de dados
ref = db.reference("Testando/")

def merge_dict(existing_data, new_data):
    for key, value in new_data.items():
        if isinstance(value, dict):
            node = existing_data.setdefault(key, {})
            merge_dict(node, value)
        else:
            existing_data[key] = value

# Atualizar os dados no banco de dados sem sobrescrever
existing_data = ref.get()
if existing_data:
    merge_dict(existing_data, data)
    ref.set(existing_data)
else:
    ref.set(data)

# Função para enviar eventos ao Google Analytics
def send_event_to_google_analytics(event_name, params):
    measurement_id = "G-9LVFTMGLV7"  # Substitua pelo seu Measurement ID
    api_secret = "VHxWrcbqQnG-FomGscQM6g"  # Se necessário, substitua pelo seu segredo da API

    url = f"https://www.google-analytics.com/mp/collect?measurement_id={measurement_id}&api_secret={api_secret}"
    headers = {
        "Content-Type": "application/json",
    }
    payload = {
        "client_id": str(uuid.uuid4()),  # Identificador único para o usuário. Pode ser um UUID ou similar
        "events": [
            {
                "name": event_name,
                "params": params,
            }
        ],
    }

    # Imprimir o payload para depuração
    print("Enviando payload:", json.dumps(payload, indent=4))

    response = requests.post(url, headers=headers, json=payload)
    
    # Imprimir a resposta para depuração
    print(f"Resposta do servidor: {response.status_code}, {response.text}")
    return response

# Enviar evento para o Google Analytics
def send_data_to_analytics(data):
    for op_id, op_data in data.get("ComCadastro", {}).items():
        for room, features in op_data.get("Apartamento Meio", {}).items():
            # Enviar um evento para cada cômodo com suas características
            event_name = f"room_{room.replace(' ', '_').lower()}"
            event_params = {
                "piso": features.get("Piso", "N/A"),
                "rodape": features.get("Rodape", "N/A"),
                "parede": features.get("Parede", "N/A"),
                "bancada": features.get("Bancada", "N/A"),
                "cuba": features.get("Cuba", "N/A"),
                "torneira": features.get("Torneira", "N/A"),
                "box": features.get("Box", "N/A"),
                "bacia": features.get("Bacia", "N/A"),
                "divisoria": features.get("Divisoria", "N/A"),
                "ducha": features.get("Ducha", "N/A"),
            }
            response = send_event_to_google_analytics(event_name, event_params)
            print(f"Evento {event_name} enviado: {response.status_code}, {response.text}")

send_data_to_analytics(data)

修复方案

1. 等待GA4数据处理延迟

GA4常规报表的数据处理存在延迟,通常需要24-48小时才能完成收录和展示。如果是刚发送的事件,先等待一段时间再查看常规报表。

2. 稳定Client ID,避免频繁生成新用户

当前代码每次发送事件都生成新的uuid.uuid4()作为client_id,这会让GA4将每个事件识别为独立新用户,容易被判定为异常流量过滤。

  • 修复方式:固定一个client_id(比如生成一次后保存到本地文件复用,或直接硬编码一个测试用UUID),也可添加user_id标识用户(如果有):
    修改send_event_to_google_analytics函数中的payload部分:
    # 固定client_id示例,可替换为你第一次生成的UUID值
    client_id = "123e4567-e89b-12d3-a456-426614174000"
    payload = {
        "client_id": client_id,
        # 可选:如果有用户唯一标识,添加user_id
        # "user_id": "你的用户唯一ID",
        "events": [
            {
                "name": event_name,
                "params": params,
            }
        ],
    }
    

3. 在GA4后台注册自定义参数

你发送的piso、rodape等自定义参数,需要在GA4后台注册为自定义维度,否则常规报表不会展示这些参数,甚至可能影响事件的正常收录:

  1. 登录GA4后台,进入「管理」→「自定义定义」→「创建自定义维度」
  2. 维度名称填写参数名(如piso),事件参数填相同名称,范围选择「事件」
  3. 对所有需要在报表中使用的参数重复此操作

4. 避免触发GA4自动过滤机制

如果短时间内发送大量事件,GA4可能会将其判定为垃圾流量并过滤。测试时可放慢发送频率(比如添加time.sleep(1)在事件发送之间),或临时关闭自动事件检测:

  • 操作路径:GA4后台「管理」→「数据流」→ 选择对应数据流 →「更多设置」→「自动事件检测」→ 关闭相关选项(仅测试用,不建议长期关闭)

5. 确认数据流与API配置正确

  • 确保Measurement ID对应的数据流类型(Web/应用)正确,API Secret是从对应数据流的「测量协议API秘钥」中生成的
  • 生成API Secret路径:GA4后台「管理」→「数据流」→ 选择数据流 →「测量协议API秘钥」→「创建」

内容的提问来源于stack exchange,提问作者João Pedro S. Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:54:55