从后端发送事件到 GTM 服务器容器

Send Event to GTM server container from a back-end

我们正在使用 GTM 容器服务器。

我们想从 Web 应用程序的后端将不同的事件直接发送到我们的 GTM 服务器容器。

我们的想法是能够激活将这些事件发送到不同来源(Mixpanel、SendinBlue 等)的标签

GTM server-side documentation 中,我们发现可以使用 Google Analytics 使用的测量协议。

为此,您需要创建或使用 MeasurementProtocol 客户端

因此我们创建了一个路径为 /mp/collect 的新客户端,并尝试将 MeasurementProtocole 用于 GA4,因为我们也将 GA4 用于 Analytics。 https://developers.google.com/analytics/devguides/collection/protocol/ga4

但是在example request中,它被要求提供一个measurementId和一个apiSecret。 这些由 GA 提供。 如果我们想直接将事件发送到GTM服务器客户端,我们应该提供什么信息?

这是我们要测试的脚本:

function myFunction() {
const measurementId = `G-XXXXXXX`;
const apiSecret = `FFFFFFFFFFFFDDDDDDDDD`;

UrlFetchApp.fetch(`https://xxxxx.xxxxxxxx.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`, {
  method: "POST",
  payload: JSON.stringify({
    "client_id": "client_id",
    "events": [{
      "name": "generate_lead",
      "params": {
        "currency": "USD",
        "value": 99.99
      }
    }]
  })
});
}

但是我们有这个错误

所以为了能够将事件从我的后端发送到 sGTM(GTM 服务器容器),我在 Github:

上使用了这个 repo

https://github.com/square/server-to-server-gtm-client

1 - 要安装它,您必须从存储库下载 template.tpl 文件。

2 - 然后在 sGTM 上,您转到左侧菜单的底部并单击“模板”

3 - 您必须单击“客户端模板”部分中的“新建”。

4 - 单击右上角的三点菜单并 select 导入后。

5 - 这是您导入之前下载的 template.tpl 文件的时刻。

6 - 现在您可以单击左侧菜单中的“客户端”项并创建一个新客户端

7 - 对于客户端配置 select 您之前创建的模板。

8 - 然后按照 readme of the repo on Github :-)

使用此解决方案,您将能够将事件从后端直接发送到 sGTM 容器(服务器)。

您应该只提供 measurementId。没有 apiSecret。 然后,如果您处于 gtm 预览模式,您应该使用 X-Gtm-Server-Preview HTTP header(在 gtm 预览模式中,在右上角找到 3 个点)。您应该在请求中添加它。 然后创建 mp 客户端。 我的 python 示例:

# for GA4
import requests
import json

data = { "client_id": '111222333',
        "events": [{"name":"page_view",
                    "params":{
                            "external_id": '123123123',
                            "action_source": "app"}
                   }]
          }
data = json.dumps(data).encode("utf-8")
url = "https://yourserverdomain.com/mp?measurement_id=G-XXXXXXX"
headers = {
         "x-gtm-server-preview" : "ASDADASDASDASFASFASFASFASF",
          "Content-Type": "application/json",
          "Origin": "https://google.com"
          }


resp = requests.post(url, headers=headers, data=data)

print(resp.status_code)\    
# for Facebook conversion API
url = "https://yourserverdomain.com/mp"
data = {"client_id": '123123',
        "events":[{ "name":"PageView",
                    "params":{"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
                             "ip_override": "89.1.1.1",

                              "page_location":"https://google.com/",
                              "action_source": "app",
                              "external_id": "12345",
                              "user_data": { "email_address": 'asdasd',
                                             "phone_number": "123",
                                            "external_id": "12345",
                                            "adress": {"country": "uk"}
                                           }
                            }
                          }]
        }
data = json.dumps(data).encode("utf-8")

headers = {
         "x-gtm-server-preview" : "ASDASFDFAFASDFASDFASDFASDF=",
          "Content-Type": "application/json",
          "Origin": "https://google.com"
          }


resp = requests.post(url, headers=headers, data=data)

print(resp.status_code)

如果还是不行,试试不用“collect”的路径,只用“/mp”。 根据我的经验,如果您的事件格式无效(例如丢失必要的参数。

,您将收到 400 错误