准备在 google 标签管理器服务器端输入 table 作为 API 请求 body 的一部分发送

preparing an input table on google tag manager server side to be send as part of an API request body

我正在使用 Google 跟踪代码管理器服务器容器。

我正在尝试拨打 POST API 电话

https://api.hubapi.com/events/v3/send?hapikey={{hubspot api key}}

{{ }} 之间的部分是在 google 标签管理器中获取和设置的变量。它们正在正常填充。

此 API 调用的目的是将自定义行为事件(类似于 google 分析事件)发送到 Hubspot - custom behaviour events manual tracking

对于这些事件,您可以发送页面 url、google cid、文件类型、页面标题等属性。

这些属性被添加到请求body中,因此它们被包含在以下请求setBody

sendHttpRequest(url, (statusCode, headers, body) => {
                if (statusCode >= 200 && statusCode <300) {
                  data.gtmOnSuccess();
                } else {
                 data.gtmOnFailure();
            }
              setResponseStatus(statusCode);
              setResponseHeader('cache-control', headers['cache-control']);
              setResponseBody(body);
},{headers: postHeaders, method: 'POST', timeout: 3000}, setBody);

setBody设置代码如下:


if (data.additionalProperties) {
  for (let key in data.additionalProperties) {
    postPropertiesData = ["{",postPropertiesData, data.additionalProperties[key].property,":",data.additionalProperties[key].value,"}"].join('');
  }
}


const postProperties = JSON.stringify(postPropertiesData);

const setProperties = JSON.stringify({
  utk: data.userToken,
  eventName: data.eventName,
  ocurredAt: getTimestamp(),
});

const setBody = [setProperties,'properties:',postProperties].join(' ');

(if (data.additionalProperties) 部分像这样从输入 table 中获取属性 .

data.additionalProperties 访问 table。左列的内部名称为 属性,右列的内部名称为 value.

我需要它作为 object 输出到 'properties':{'firstname':'michael','lastname':'stone','email':'michael.stone@gmail.com'} 然后使用 JSON.stringify() 函数

进行字符串化

我使用上面的代码尝试准备成为请求的一部分 body。

我也试过了

let postPropertiesData = {};

if (data.additionalProperties) {
  for (let key in data.additionalProperties) {
    postPropertiesData[data.additionalProperties[key].property =data.additionalProperties[key].value,"};
  }
}




const setBody = JSON.stringify({
  utk: data.userToken,
  eventName: data.eventName,
  properties: postPropertiesData,
  ocurredAt: getTimestamp(),
});

无论哪种方式我得到相同的结果

属性部分为空。

我该如何解决?

最后,我找到了答案。我不得不使用 makeTableMap API

所以我做了 const makeTableMap = require('makeTableMap');

然后我在对象本身中使用了一个三元组,而不是 if 语句和 for。

const setBody = JSON.stringify({
  'portalId':data.portalID,
  'utk': data.userToken,
  'eventName': data.eventName,
  'properties': (data.additionalProperties) ? makeTableMap(data.additionalProperties,'property','value'):{},
  'ocurredAt': getTimestamp(),
});

这奏效了。

您还可以查看此 HubSpot GTM 服务器端标签的来源 https://github.com/stape-io/hubspot-tag

它还有向 HubSpot 发送自定义行为事件的功能。

关于如何使用它的博客 post 在这里 https://stape.io/how-to-connect-website-with-hubspot-using-server-side-tracking/