如何修复 AnalyticsAdminServiceClient(GA4) Nodejs 上的 update_mask.paths 错误?

问题描述 投票:0回答:2

我尝试在 Nodejs 中使用 Google Analytics Admin Client(GA4) 更新“DataRetentionSettings”,但出现以下错误。

Error: 3 INVALID_ARGUMENT: One or more values in the field 'update_mask.paths_list' was invalid, but all values must be valid.eventDataRetention, resetUserDataOnNewActivity
    at Object.callErrorFromStatus (C:\my_working_path\GA4_manager\node_modules\@grpc\grpc-js\build\src\call.js:31:26)
    at Object.onReceiveStatus (C:\my_working_path\GA4_manager\node_modules\@grpc\grpc-js\build\src\client.js:189:52)
    at Object.onReceiveStatus (C:\my_working_path\GA4_manager\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:365:141)
    at Object.onReceiveStatus (C:\my_working_path\GA4_manager\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:328:181)
    at C:\my_working_path\GA4_manager\node_modules\@grpc\grpc-js\build\src\call-stream.js:187:78
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  code: 3,
  details: "One or more values in the field 'update_mask.paths_list' was invalid, but all values must be valid.eventDataRetention, resetUserDataOnNewActivity",
  metadata: Metadata {
    internalRepr: Map(1) { 'grpc-server-stats-bin' => [Array] },
    options: {}
  },
  note: 'Exception occurred in retry method that was not classified as transient'
}

代码如下

const analyticsAdmin = require("@google-analytics/admin");

class Main {
    constructor() {
        this.analyticsAdminClient = new analyticsAdmin.AnalyticsAdminServiceClient({
            keyFilename: "./mykeyfile.json",
        });
    }
    async updateDataRetentionSettings() {
        const name = "properties/*********/dataRetentionSettings";
        const request = {
            dataRetentionSettings: {
                name: name,
                eventDataRetention: "FOURTEEN_MONTHS",
                resetUserDataOnNewActivity: true,
            },
            updateMask: {
                paths: ["eventDataRetention", "resetUserDataOnNewActivity"],
            },
        };
        let retention = {};
        try {
            retention = await this.analyticsAdminClient.updateDataRetentionSettings(request);
        } catch (e) {
            console.log(e);
            process.exit(1);
        }
        return retention[0];
    }
}

const client = new Main();
client.updateDataRetentionSettings();

我还在 updateMask 的 paths 属性中添加了“name”,结果是一样的。

这是我参考的文件。 AnalyticsAdminServiceClient

客户端版本为4.0.0。

如何通过 API 更新 DataRetentionSettings?

node.js google-analytics-api google-analytics-4
2个回答
1
投票

要更新 GA 4 中的属性,您可以尝试如下:

const {AnalyticsAdminServiceClient} = require('@google-analytics/admin').v1alpha; // ---> This dependency should be installed
const credentialFile = '/usr/local/credentialFile.json';
 const adminClient = new AnalyticsAdminServiceClient(
        {keyFilename: credentialFile} // --> credentialFile will be the path of service account's detail json file in your local machine
    );

    async function callUpdateProperty() {
        // Construct request
        const updateMask = {
            paths: ["display_name"] // --> Please keep in mind that name should in snack case. like I have added for 'displayName' as 'display_name'
        };
        const property = {
            "name" : "properties/123",
            "displayName": "New Display Name"
        };

        const request = {
            property,
            updateMask,
        };

        // Run request
        const response = await adminClient.updateProperty(request);

0
投票

在 C# 中,

        Google.Apis.Admin.AnalyticsData.v1alpha.Property property = service.Properties.Get($"properties/{propertyId}").Execute();

        // Update the display name
        property.DisplayName = newDisplayName;

        // Build the update mask
        var updateMask = new Google.Protobuf.WellKnownTypes.FieldMask();
        updateMask.Paths.Add("display_name");

        // Build the request
        var request = service.Properties.Update(property, $"properties/{propertyId}");
        request.UpdateMask = updateMask.Paths;

        // Execute the request
        request.Execute();
© www.soinside.com 2019 - 2024. All rights reserved.