diff --git a/_example/sesamy.yaml b/_example/sesamy.yaml index 28201ce..fc6d546 100644 --- a/_example/sesamy.yaml +++ b/_example/sesamy.yaml @@ -15,6 +15,7 @@ google: measurement_id: GTM-57BHX34G credentials_file: ./tmp/google_service_account_creds.json + server_container_url: http://sst.my-domain.com/ typescript: packages: diff --git a/cmd/tagmanagerweb.go b/cmd/tagmanagerweb.go index b442ba0..53d5c24 100644 --- a/cmd/tagmanagerweb.go +++ b/cmd/tagmanagerweb.go @@ -50,6 +50,25 @@ var tagmanagerWebCmd = &cobra.Command{ return err } + logger.Info("- Variable:", logger.Args("name", "server-container-url")) + serverContainerURL, err := c.UpsertConstantVariable("server-container-url", cfg.Google.ServerContainerURL) + if err != nil { + return err + } + + logger.Info("- Variable:", logger.Args("name", "Google Tag Settings")) + googleTagSettings, err := c.UpsertGoogleTagSettingsVariable("Google Tag Settings", map[string]*tagmanager2.Variable{ + "server_container_url": serverContainerURL, + }) + if err != nil { + return err + } + + logger.Info("- Variable:", logger.Args("name", "server-container-url")) + if _, err = c.UpsertGoogleTagWebTag("Google Tag", measurementID, googleTagSettings); err != nil { + return err + } + for event, parameters := range eventParameters { logger.Info("- GA4 Event Trigger:", logger.Args("name", event)) trigger, err := c.UpsertCustomEventTrigger(event) diff --git a/pkg/config/config.go b/pkg/config/config.go index c0a2976..e9faa3b 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -13,10 +13,11 @@ type Config struct { } type Google struct { - GA4 GA4 `yaml:"ga4"` - GTM GTM `yaml:"gtm"` - CredentialsFile string `yaml:"credentials_file"` - CredentialsJSON string `yaml:"credentials_json"` + GA4 GA4 `yaml:"ga4"` + GTM GTM `yaml:"gtm"` + CredentialsFile string `yaml:"credentials_file"` + CredentialsJSON string `yaml:"credentials_json"` + ServerContainerURL string `yaml:"server_container_url"` } type GA4 struct { diff --git a/pkg/tagmanager/client.go b/pkg/tagmanager/client.go index 9544146..56bb9a0 100644 --- a/pkg/tagmanager/client.go +++ b/pkg/tagmanager/client.go @@ -525,6 +525,51 @@ func (c *Client) UpsertGTEventSettingsVariable(name string, variables map[string return c.UpsertVariable(obj) } +func (c *Client) UpsertGoogleTagSettingsVariable(name string, variables map[string]*tagmanager.Variable) (*tagmanager.Variable, error) { + parameters := make([]string, 0, len(variables)) + for k := range variables { + parameters = append(parameters, k) + } + sort.Strings(parameters) + + list := make([]*tagmanager.Parameter, len(parameters)) + for i, parameter := range parameters { + list[i] = &tagmanager.Parameter{ + Type: "map", + Map: []*tagmanager.Parameter{ + { + Key: "parameter", + Type: "template", + Value: parameter, + }, + { + Key: "parameterValue", + Type: "template", + Value: "{{" + variables[parameter].Name + "}}", + }, + }, + } + } + + obj := &tagmanager.Variable{ + AccountId: c.accountID, + ContainerId: c.containerID, + WorkspaceId: c.workspaceID, + Name: name, + Notes: c.notes, + Parameter: []*tagmanager.Parameter{ + { + Key: "configSettingsTable", + Type: "list", + List: list, + }, + }, + Type: "gtes", + } + + return c.UpsertVariable(obj) +} + func (c *Client) UpsertCustomEventTrigger(name string) (*tagmanager.Trigger, error) { fullname := "Event." + name cache, err := c.Trigger(fullname) @@ -721,6 +766,52 @@ func (c *Client) UpsertGA4WebTag(name string, eventSettings *tagmanager.Variable return c.Tag(fullname) } +func (c *Client) UpsertGoogleTagWebTag(name string, measurementID *tagmanager.Variable, configSettings *tagmanager.Variable) (*tagmanager.Tag, error) { + cache, err := c.Tag(name) + if err != nil && !errors.Is(err, ErrNotFound) { + return nil, err + } + + folder, err := c.Folder(c.folderName) + if err != nil { + return nil, err + } + + obj := &tagmanager.Tag{ + AccountId: c.accountID, + ContainerId: c.containerID, + WorkspaceId: c.workspaceID, + FiringTriggerId: []string{"2147479573"}, + ParentFolderId: folder.FolderId, + Name: name, + Notes: c.notes, + Parameter: []*tagmanager.Parameter{ + { + Key: "tagId", + Type: "template", + Value: "{{" + measurementID.Name + "}}", + }, + { + Key: "configSettingsVariable", + Type: "template", + Value: "{{" + configSettings.Name + "}}", + }, + }, + Type: "googtag", + } + + if cache == nil { + c.tags[name], err = c.Service().Accounts.Containers.Workspaces.Tags.Create(c.WorkspacePath(), obj).Do() + } else { + c.tags[name], err = c.Service().Accounts.Containers.Workspaces.Tags.Update(c.WorkspacePath()+"/tags/"+cache.TagId, obj).Do() + } + if err != nil { + return nil, err + } + + return c.Tag(name) +} + func (c *Client) UpsertGA4ServerTag(name string, measurementID *tagmanager.Variable, trigger *tagmanager.Trigger) (*tagmanager.Tag, error) { cache, err := c.Tag(name) if err != nil && !errors.Is(err, ErrNotFound) { diff --git a/pkg/tagmanager/client_test.go b/pkg/tagmanager/client_test.go index 254722e..9723c63 100644 --- a/pkg/tagmanager/client_test.go +++ b/pkg/tagmanager/client_test.go @@ -85,6 +85,7 @@ func TestNewClient_Server(t *testing.T) { func TestNewClient_Web(t *testing.T) { t.Skip() + c, err := tagmanager.NewClient( context.TODO(), os.Getenv("TEST_ACCOUNT_ID"),