在谷歌标签管理器服务器端准备一个输入表,作为 API 请求正文的一部分发送
Posted
技术标签:
【中文标题】在谷歌标签管理器服务器端准备一个输入表,作为 API 请求正文的一部分发送【英文标题】:preparing an input table on google tag manager server side to be send as part of an API request body 【发布时间】:2021-10-23 06:57:42 【问题描述】:我正在使用 Google 跟踪代码管理器服务器容器。
我正在尝试对 POST API 进行调用
https://api.hubapi.com/events/v3/send?hapikey=hubspot api key
之间的部分是在谷歌标签管理器中获取和设置的变量。它们正在正确填充。
此 API 调用的目的是将自定义行为事件(类似于 google 分析事件)发送到 Hubspot - custom behaviour events manual tracking
对于这些事件,您可以发送页面 url、google cid、文件类型、页面标题等属性。
这些属性被添加到请求正文中,因此它们包含在以下请求的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)
部分从这样的输入表中获取属性
.
data.additionalProperties 访问表。左列具有名为 property 的内部名称,右列具有称为 value 的内部名称。
我需要将它作为对象输出到“属性”:'firstname':'michael','lastname':'stone','email':'michael.stone@gmail.com' 然后字符串化使用 JSON.stringify() 函数
我使用上面的代码尝试准备成为请求正文的一部分。
我也试过了。
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(),
);
无论哪种方式我都会得到相同的结果
属性部分为空。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:您也可以查看这个 HubSpot GTM 服务器端标签https://github.com/stape-io/hubspot-tag的来源
它还具有向 HubSpot 发送自定义行为事件的功能。
这里有一篇关于如何使用它的博文https://stape.io/how-to-connect-website-with-hubspot-using-server-side-tracking/
【讨论】:
我看到你把它上传到了 github。挺好看的,就是有限制。例如,我的最终目标是能够使用 hubspot 用户令牌来获取 id,以便进行更新。我没有他们的电子邮件地址,并且通过谷歌标签管理器网络版本发送该地址可能会暴露 PII, 我们这样使用它: - 用户提交注册表。 - 我们此时有用户电子邮件并将其发送到 GTM 服务器。 - 在 GTM 上,我们向少数几个系统发送用户电子邮件,其中之一是 HubSpot。在注册时发送用户电子邮件是正常的。这就是后端开发人员通常会做的事情。 此外,HubSpot Stape 标签支持“utk”,以防您没有电子邮件但已将 utk 存储在 cookie 中。【参考方案2】:最后,我找到了答案。我不得不使用 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(),
);
而且成功了。
【讨论】:
以上是关于在谷歌标签管理器服务器端准备一个输入表,作为 API 请求正文的一部分发送的主要内容,如果未能解决你的问题,请参考以下文章
谷歌标签管理器无法在 Ionic+Angular 应用程序中工作
有没有办法在谷歌部署管理器中打印到stdout,stderr或日志文件?