我如何在没有浏览器生成的用户代理的情况下通过cURL将事件数据发送到Google Measurement Protocol?

问题描述 投票:1回答:1

我正在通过Facebook Lead Ads产生潜在客户。我的服务器接受来自Facebook的RTU,并且我能够根据需要将数据推送到我的CRM。

我想在Facebook上填写表单时向GA发送事件。

读取Google Measurement Protocol Reference的状态:

user_agent_string –是格式化的用户代理字符串,用于计算以下维度:浏览器,平台和移动功能。

如果未设置此值,将不计算以上数据。

我相信,因为我试图通过不涉及浏览器的PHP webhook脚本发送事件,因此请求失败。

这里是我正在运行的代码的相关部分(我从POST更改为GET,以为可能是问题所在,一旦工作就将其更改回POST):

$eventData = [
      'v' => '1',
      't' => 'event',
      'tid' => 'UA-XXXXXXX-1',
      'cid' => '98a6a970-141c-4a26-b6j2-d42a253de37e',
      'ec' => 'my-category-here',
      'ea' => 'my-action-here',
      'ev' => 'my-value-here
  ];

  //Base URL for API submission
  $googleAnalyticsApiUrl = 'https://www.google-analytics.com/collect?';

  //Add vars from $eventData object
  foreach ($eventData as $key => $value) {
    $googleAnalyticsApiUrl .= "$key=$value&";
  }

  //Remove last comma for clean URL
  $googleAnalyticsApiUrl = substr($googleAnalyticsApiUrl, 0, -1);


  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $googleAnalyticsApiUrl);
  curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  curl_close($ch);

我相信是导致问题的用户代理,就像我将与尝试插入的URL手动放入浏览器一样,该事件立即在GA的实时跟踪中显示。

上述URL的示例是:

https://www.google-analytics.com/collect?v=1&t=event&tid=UA-XXXXX-1&cid=98a6a970-141c-4a26-b6j2-d42a253de37e&ec=my-category-here&ea=my-action-here&el=my-value-here

我同时使用了实时端点和/ debug /端点。我的代码也不会提交给任何错误,但是,如果我通过浏览器访问相关的URL,则调试端点说一切正常,然后在活动端点上,事件将按预期到达GA。

[我知道curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);正在尝试发送浏览器的用户代理,我曾尝试用以下内容填充此选项:

“ Mozilla / 5.0(Macintosh; Intel Mac OS X 10_15_1)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 78.0.3904.87 Safari / 537.36”

但是它永远不会被测量协议接受。

我的问题

  1. 我是否有可能在不使用Web浏览器的情况下将这些事件发送到GA?我曾经让Zapier为我推送这些事件,所以我认为这是可能的。

  2. 我如何通过PHP发送有效的user_agent_string?我曾尝试用'CURLOPT_USERAGENT'对其进行欺骗,但从未设法使其正常工作。

php curl google-analytics user-agent
1个回答
0
投票

我有同样的问题:从浏览器中获取收集URL就像是一种魅力(我在实时视图中看到了成功),但是用curlwget进行提取却没有。在终端上,也使用httpie

我向用户代理标头发送了curl,确实解决了该问题。

所以,我对@daveidivide的最后一条评论感到困惑,并且他的最初假设是错误的(我的意思是,我知道他可能有2个问题,但是发送用户代理标头似乎是强制性的。]]

© www.soinside.com 2019 - 2024. All rights reserved.