【问题标题】:Unable to update GTM Variable using Google API无法使用 Google API 更新 GTM 变量
【发布时间】:2017-06-29 06:33:15
【问题描述】:

使用“试试看!” GTM API 文档中的功能: https://developers.google.com/tag-manager/api/v1/reference/accounts/containers/variables/list?authuser=2 我可以从 GTM 获取包含我的变量的列表

但是,当我尝试更新变量 (https://developers.google.com/tag-manager/api/v1/reference/accounts/containers/variables/update?authuser=2) 时,再次使用“试试看!”,我得到:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidArgument",
    "message": "Bad Request"
   }
  ],
  "code": 400,
  "message": "Bad Request"
 }
}

我很确定我正确插入了所有参数,经过一天的尝试后,我认为 GTM 的更新变量 API 有问题。

有人可以确认更新 GTM 变量对他们有用吗?

我也尝试从后端执行此操作并弹出相同的响应。

这是我的代码:

   public void Authenticate()
{


    string serviceAccountEmail = "xxxxxxxxxxxx@local-proj.iam.gserviceaccount.com";

    string folder = System.Web.HttpContext.Current.Server.MapPath("/App_Data/MyGoogleStorage/key.p12");
    var certificate = new X509Certificate2(folder, "notasecret", X509KeyStorageFlags.Exportable);

    ServiceAccountCredential credential = new ServiceAccountCredential(
       new ServiceAccountCredential.Initializer(serviceAccountEmail)
       {
           Scopes = new[] { TagManagerService.Scope.TagmanagerEditContainers}
       }.FromCertificate(certificate));

    // Create the service.
    var service = new TagManagerService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "My Local Proj"
    });

此时服务已通过身份验证,所以我可以简单地做:

var myGTMVars = service.Accounts.Containers.Variables.List("AccountID", "ContainerID").Execute();

从后端的 GTM 获取我的所有变量。一切正常。

但是当我尝试更新一个时:

    Variable gTMVar = new Variable();
    gTMVar.Name = "IsAfterSignUpSuccess";
    gTMVar.Type = "c";
    var param = new Parameter()
    {
        Type = "template",
        Value = "true"
    };
    gTMVar.Parameter = new List<Parameter>();
    gTMVar.Parameter.Add(param);
    try
    {
        var newVar = service.Accounts.Containers.Variables.Update(body: gTMVar, accountId: "xxx", containerId: "xxx", variableId: "x").Execute();
    }
    catch (Exception ex)
    {

    }

每次给我 BadRequest 都会失败。我尝试了不同的参数,变量的不同类型,但没有任何帮助。还尝试了不同的范围来启动服务 - 没有任何帮助。

关于这个主题的信息很差,尤其是对于 c#。

我在这里发布了我的代码 - 希望可以节省一些人的时间,因为在没有用户交互的情况下从后端验证服务并不是直接的。 (最终结果很容易)

【问题讨论】:

  • 你解决了吗?我在 awct 标签上遇到了类似的问题,虽然每个设置和参数都完全正确,但它仍然返回 400 Bad Request,在自定义 html 中效果很好,我已经完全复制了字典中推荐的设置,但似乎没有任何效果.
  • 我最终放弃了这种集成,因为我知道它主要用于管理容器本身,而不是从后端打磨事件或其他东西。

标签: c# .net google-api oauth-2.0 google-tag-manager


【解决方案1】:

如果您尝试更新值,则请求中的参数必须具有 3 个属性:
类型:您要编辑的类型,
键:值,
价值:你的价值

网址:https://www.googleapis.com/tagmanager/v1/accounts/accountId/containers/containerId/variables/variableId
参数:

{
  "name":"YOUR_VARIABLE_NAME",
  "type":"YOUR_VARIABLE_TYPE", 
  "parameter":[{
      "type":"YOUR_TYPE",
      "key":"value",
      "value":"YOUR_VALUE"
   }]
}

跟踪代码管理器 API 的文档有遗漏,并且几乎没有可用的帮助。 大多数指南侧重于 GUI,Simo Ahava 在他的示例中主要使用 Python。

最好, 西卡

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-14
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    相关资源
    最近更新 更多