diff --git a/pkg/provider/conversionlinker/server.go b/pkg/provider/conversionlinker/server.go index c59c739..f3e583f 100644 --- a/pkg/provider/conversionlinker/server.go +++ b/pkg/provider/conversionlinker/server.go @@ -2,8 +2,8 @@ package conversionlinker import ( "github.com/foomo/sesamy-cli/pkg/config" + containertag "github.com/foomo/sesamy-cli/pkg/provider/conversionlinker/server/tag" "github.com/foomo/sesamy-cli/pkg/tagmanager" - servertag "github.com/foomo/sesamy-cli/pkg/tagmanager/server/tag" servertrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/server/trigger" ) @@ -16,10 +16,8 @@ func Server(tm *tagmanager.TagManager, events config.ConversionLinker) error { } } - { - if _, err := tm.UpsertTag(servertag.NewConversionLinker(Name, servertrigger.AllPages)); err != nil { - return err - } + if _, err := tm.UpsertTag(containertag.NewConversionLinker(Name, servertrigger.AllPages)); err != nil { + return err } return nil diff --git a/pkg/tagmanager/server/tag/conversionlinker.go b/pkg/provider/conversionlinker/server/tag/conversionlinker.go similarity index 100% rename from pkg/tagmanager/server/tag/conversionlinker.go rename to pkg/provider/conversionlinker/server/tag/conversionlinker.go diff --git a/pkg/provider/googleads/server.go b/pkg/provider/googleads/server.go index 7ab138d..77484d2 100644 --- a/pkg/provider/googleads/server.go +++ b/pkg/provider/googleads/server.go @@ -9,6 +9,7 @@ import ( "github.com/foomo/sesamy-cli/pkg/tagmanager" commontrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/common/trigger" commonvariable "github.com/foomo/sesamy-cli/pkg/tagmanager/common/variable" + "github.com/foomo/sesamy-cli/pkg/tagmanager/server/variable" "github.com/pkg/errors" ) @@ -32,6 +33,16 @@ func Server(l *slog.Logger, tm *tagmanager.TagManager, cfg config.GoogleAds) err return err } + value, err := tm.UpsertVariable(variable.NewEventData("value")) + if err != nil { + return err + } + + currency, err := tm.UpsertVariable(variable.NewEventData("currency")) + if err != nil { + return err + } + { // create tags eventParameters, err := googletag.CreateServerEventTriggers(tm, cfg.Conversion.ServerContainer) if err != nil { @@ -44,7 +55,7 @@ func Server(l *slog.Logger, tm *tagmanager.TagManager, cfg config.GoogleAds) err return errors.Wrap(err, "failed to lookup event trigger: "+event) } - if _, err := tm.UpsertTag(servertagx.NewGoogleAdsConversionTracking(event, conversionID, conversionLabel, eventTrigger)); err != nil { + if _, err := tm.UpsertTag(servertagx.NewGoogleAdsConversionTracking(event, value, currency, conversionID, conversionLabel, eventTrigger)); err != nil { return err } } diff --git a/pkg/provider/googleads/server/tag/googleadsconversiontracking.go b/pkg/provider/googleads/server/tag/googleadsconversiontracking.go index 47ee308..5bd6b53 100644 --- a/pkg/provider/googleads/server/tag/googleadsconversiontracking.go +++ b/pkg/provider/googleads/server/tag/googleadsconversiontracking.go @@ -9,7 +9,7 @@ func GoogleAdsConversionTrackingName(v string) string { return "GAds Conversion - " + v } -func NewGoogleAdsConversionTracking(name string, conversionID, conversionLabel *tagmanager.Variable, triggers ...*tagmanager.Trigger) *tagmanager.Tag { +func NewGoogleAdsConversionTracking(name string, value, currency, conversionID, conversionLabel *tagmanager.Variable, triggers ...*tagmanager.Trigger) *tagmanager.Tag { return &tagmanager.Tag{ FiringTriggerId: utils.TriggerIDs(triggers), Name: GoogleAdsConversionTrackingName(name), @@ -33,7 +33,7 @@ func NewGoogleAdsConversionTracking(name string, conversionID, conversionLabel * { Key: "conversionValue", Type: "template", - Value: "{{value}}", + Value: "{{" + value.Name + "}}", }, { Key: "conversionId", @@ -43,7 +43,7 @@ func NewGoogleAdsConversionTracking(name string, conversionID, conversionLabel * { Key: "currencyCode", Type: "template", - Value: "{{currency}}", + Value: "{{" + currency.Name + "}}", }, { Key: "conversionLabel", diff --git a/pkg/provider/googleanalytics/server.go b/pkg/provider/googleanalytics/server.go index 801ea85..c242d92 100644 --- a/pkg/provider/googleanalytics/server.go +++ b/pkg/provider/googleanalytics/server.go @@ -2,11 +2,11 @@ package googleanalytics import ( "github.com/foomo/sesamy-cli/pkg/config" + containertag "github.com/foomo/sesamy-cli/pkg/provider/googleanalytics/server/tag" "github.com/foomo/sesamy-cli/pkg/provider/googletag" "github.com/foomo/sesamy-cli/pkg/tagmanager" commontrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/common/trigger" serverclient "github.com/foomo/sesamy-cli/pkg/tagmanager/server/client" - servertag "github.com/foomo/sesamy-cli/pkg/tagmanager/server/tag" servertrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/server/trigger" "github.com/pkg/errors" ) @@ -54,7 +54,7 @@ func Server(tm *tagmanager.TagManager, cfg config.GoogleAnalytics, redactVisitor return errors.Wrap(err, "failed to lookup event trigger: "+event) } - if _, err := tm.UpsertTag(servertag.NewGoogleAnalyticsGA4(event, redactVisitorIP, eventTrigger)); err != nil { + if _, err := tm.UpsertTag(containertag.NewGoogleAnalyticsGA4(event, redactVisitorIP, eventTrigger)); err != nil { return errors.Wrap(err, "failed to upsert google analytics ga4 tag: "+event) } } diff --git a/pkg/tagmanager/server/tag/googleanalyticsga4.go b/pkg/provider/googleanalytics/server/tag/googleanalyticsga4.go similarity index 100% rename from pkg/tagmanager/server/tag/googleanalyticsga4.go rename to pkg/provider/googleanalytics/server/tag/googleanalyticsga4.go diff --git a/pkg/provider/googleanalytics/web.go b/pkg/provider/googleanalytics/web.go index 365bbb5..0c415a8 100644 --- a/pkg/provider/googleanalytics/web.go +++ b/pkg/provider/googleanalytics/web.go @@ -2,11 +2,11 @@ package googleanalytics import ( "github.com/foomo/sesamy-cli/pkg/config" + containertag "github.com/foomo/sesamy-cli/pkg/provider/googleanalytics/web/tag" "github.com/foomo/sesamy-cli/pkg/provider/googletag" + commonvariable "github.com/foomo/sesamy-cli/pkg/provider/googletag/web/variable" "github.com/foomo/sesamy-cli/pkg/tagmanager" commontrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/common/trigger" - commonvariable "github.com/foomo/sesamy-cli/pkg/tagmanager/common/variable" - webtag "github.com/foomo/sesamy-cli/pkg/tagmanager/web/tag" "github.com/pkg/errors" ) @@ -41,7 +41,7 @@ func Web(tm *tagmanager.TagManager, cfg config.GoogleAnalytics) error { return errors.Wrap(err, "failed to lookup google tag event setting: "+event) } - if _, err := tm.UpsertTag(webtag.NewGoogleAnalyticsGA4Event(event, tagID, eventSettings, eventTrigger)); err != nil { + if _, err := tm.UpsertTag(containertag.NewGoogleAnalyticsGA4Event(event, tagID, eventSettings, eventTrigger)); err != nil { return err } } diff --git a/pkg/tagmanager/web/tag/googleanalyticsga4event.go b/pkg/provider/googleanalytics/web/tag/googleanalyticsga4event.go similarity index 98% rename from pkg/tagmanager/web/tag/googleanalyticsga4event.go rename to pkg/provider/googleanalytics/web/tag/googleanalyticsga4event.go index bd0daae..262d608 100644 --- a/pkg/tagmanager/web/tag/googleanalyticsga4event.go +++ b/pkg/provider/googleanalytics/web/tag/googleanalyticsga4event.go @@ -1,4 +1,4 @@ -package client +package tag import ( "google.golang.org/api/tagmanager/v2" diff --git a/pkg/provider/googletag/web.go b/pkg/provider/googletag/web.go index c742070..5c29250 100644 --- a/pkg/provider/googletag/web.go +++ b/pkg/provider/googletag/web.go @@ -3,10 +3,12 @@ package googletag import ( "github.com/foomo/gocontemplate/pkg/contemplate" "github.com/foomo/sesamy-cli/pkg/config" + webtag "github.com/foomo/sesamy-cli/pkg/provider/googletag/web/tag" + containervariable "github.com/foomo/sesamy-cli/pkg/provider/googletag/web/variable" "github.com/foomo/sesamy-cli/pkg/tagmanager" commontrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/common/trigger" commonvariable "github.com/foomo/sesamy-cli/pkg/tagmanager/common/variable" - webtag "github.com/foomo/sesamy-cli/pkg/tagmanager/web/tag" + "github.com/foomo/sesamy-cli/pkg/tagmanager/web/variable" "github.com/foomo/sesamy-cli/pkg/utils" api "google.golang.org/api/tagmanager/v2" ) @@ -36,7 +38,7 @@ func Web(tm *tagmanager.TagManager, cfg config.GoogleTag) error { return err } - settingsVariable, err := tm.UpsertVariable(commonvariable.NewGoogleTagSettings(NameGoogleTagSettings, settings)) + settingsVariable, err := tm.UpsertVariable(containervariable.NewGoogleTagConfigurationSettings(NameGoogleTagSettings, settings)) if err != nil { return err } @@ -65,12 +67,12 @@ func CreateWebEventTriggers(tm *tagmanager.TagManager, cfg contemplate.Config) ( settings := make(map[string]*api.Variable, len(parameters)) for _, parameter := range parameters { - if settings[parameter], err = tm.UpsertVariable(commonvariable.NewGoogleTagEventModel(parameter)); err != nil { + if settings[parameter], err = tm.UpsertVariable(variable.NewDataLayerVariable(parameter)); err != nil { return nil, err } } - if _, err := tm.UpsertVariable(commonvariable.NewGoogleTagEventSettings(event, settings)); err != nil { + if _, err := tm.UpsertVariable(containervariable.NewGoogleTagEventSettings(event, settings)); err != nil { return nil, err } } diff --git a/pkg/tagmanager/web/tag/googletag.go b/pkg/provider/googletag/web/tag/googletag.go similarity index 100% rename from pkg/tagmanager/web/tag/googletag.go rename to pkg/provider/googletag/web/tag/googletag.go diff --git a/pkg/tagmanager/common/variable/googletagsettings.go b/pkg/provider/googletag/web/variable/googletagconfigurationsettings.go similarity index 88% rename from pkg/tagmanager/common/variable/googletagsettings.go rename to pkg/provider/googletag/web/variable/googletagconfigurationsettings.go index 3b1e70d..62e05b3 100644 --- a/pkg/tagmanager/common/variable/googletagsettings.go +++ b/pkg/provider/googletag/web/variable/googletagconfigurationsettings.go @@ -6,7 +6,7 @@ import ( "google.golang.org/api/tagmanager/v2" ) -func NewGoogleTagSettings(name string, variables map[string]string) *tagmanager.Variable { +func NewGoogleTagConfigurationSettings(name string, variables map[string]string) *tagmanager.Variable { parameters := make([]string, 0, len(variables)) for k := range variables { parameters = append(parameters, k) diff --git a/pkg/provider/googletag/web/variable/googletageventmodel.go b/pkg/provider/googletag/web/variable/googletageventmodel.go new file mode 100644 index 0000000..1bd492a --- /dev/null +++ b/pkg/provider/googletag/web/variable/googletageventmodel.go @@ -0,0 +1,14 @@ +package variable + +import ( + "github.com/foomo/sesamy-cli/pkg/tagmanager/web/variable" + "google.golang.org/api/tagmanager/v2" +) + +func GoogleTagEventModelName(v string) string { + return variable.DataLayerVariableName("eventModel." + v) +} + +func NewGoogleTagEventModel(v string) *tagmanager.Variable { + return variable.NewDataLayerVariable("eventModel." + v) +} diff --git a/pkg/tagmanager/common/variable/googletageventsettings.go b/pkg/provider/googletag/web/variable/googletageventsettings.go similarity index 100% rename from pkg/tagmanager/common/variable/googletageventsettings.go rename to pkg/provider/googletag/web/variable/googletageventsettings.go diff --git a/pkg/provider/umami/server.go b/pkg/provider/umami/server.go index 773636a..7e20fb9 100644 --- a/pkg/provider/umami/server.go +++ b/pkg/provider/umami/server.go @@ -3,10 +3,10 @@ package umami import ( "github.com/foomo/sesamy-cli/pkg/config" "github.com/foomo/sesamy-cli/pkg/provider/googletag" - servertemplate "github.com/foomo/sesamy-cli/pkg/provider/umami/server/template" + containertag "github.com/foomo/sesamy-cli/pkg/provider/umami/server/tag" + containertemplate "github.com/foomo/sesamy-cli/pkg/provider/umami/server/template" "github.com/foomo/sesamy-cli/pkg/tagmanager" commontrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/common/trigger" - servertag "github.com/foomo/sesamy-cli/pkg/tagmanager/server/tag" "github.com/pkg/errors" ) @@ -19,7 +19,7 @@ func Server(tm *tagmanager.TagManager, cfg config.Umami) error { } } - template, err := tm.UpsertCustomTemplate(servertemplate.NewUmami(Name)) + template, err := tm.UpsertCustomTemplate(containertemplate.NewUmami(Name)) if err != nil { return err } @@ -36,7 +36,7 @@ func Server(tm *tagmanager.TagManager, cfg config.Umami) error { return errors.Wrap(err, "failed to lookup event trigger: "+event) } - if _, err := tm.UpsertTag(servertag.NewUmami(event, cfg, template, eventTrigger)); err != nil { + if _, err := tm.UpsertTag(containertag.NewUmami(event, cfg, template, eventTrigger)); err != nil { return err } } diff --git a/pkg/tagmanager/server/tag/umami.go b/pkg/provider/umami/server/tag/umami.go similarity index 100% rename from pkg/tagmanager/server/tag/umami.go rename to pkg/provider/umami/server/tag/umami.go diff --git a/pkg/tagmanager/server/variable/eventdata.go b/pkg/tagmanager/server/variable/eventdata.go new file mode 100644 index 0000000..e2e6f6a --- /dev/null +++ b/pkg/tagmanager/server/variable/eventdata.go @@ -0,0 +1,28 @@ +package variable + +import ( + "google.golang.org/api/tagmanager/v2" +) + +func EventDataName(v string) string { + return "event." + v +} + +func NewEventData(name string) *tagmanager.Variable { + return &tagmanager.Variable{ + Name: EventDataName(name), + Parameter: []*tagmanager.Parameter{ + { + Key: "setDefaultValue", + Type: "boolean", + Value: "false", + }, + { + Key: "keyPath", + Type: "template", + Value: name, + }, + }, + Type: "ed", + } +} diff --git a/pkg/tagmanager/web/trigger/initialization.go b/pkg/tagmanager/web/trigger/builtin.go similarity index 100% rename from pkg/tagmanager/web/trigger/initialization.go rename to pkg/tagmanager/web/trigger/builtin.go diff --git a/pkg/tagmanager/common/variable/googletageventmodel.go b/pkg/tagmanager/web/variable/datalayervariable.go similarity index 69% rename from pkg/tagmanager/common/variable/googletageventmodel.go rename to pkg/tagmanager/web/variable/datalayervariable.go index d5e643a..453a4ac 100644 --- a/pkg/tagmanager/common/variable/googletageventmodel.go +++ b/pkg/tagmanager/web/variable/datalayervariable.go @@ -4,13 +4,13 @@ import ( "google.golang.org/api/tagmanager/v2" ) -func GoogleTagEventModelName(v string) string { - return "dlv.eventModel." + v +func DataLayerVariableName(v string) string { + return "dlv." + v } -func NewGoogleTagEventModel(name string) *tagmanager.Variable { +func NewDataLayerVariable(name string) *tagmanager.Variable { return &tagmanager.Variable{ - Name: GoogleTagEventModelName(name), + Name: DataLayerVariableName(name), Parameter: []*tagmanager.Parameter{ { Key: "dataLayerVersion", diff --git a/test/tagmanager/client_test.go b/test/tagmanager/client_test.go index da6bfa9..d97f503 100644 --- a/test/tagmanager/client_test.go +++ b/test/tagmanager/client_test.go @@ -46,6 +46,15 @@ func TestNewClient_Server(t *testing.T) { }) } + { // --- Variables --- + t.Run("list variables", func(t *testing.T) { + cmd := c.Service().Accounts.Containers.Workspaces.Variables.List(c.WorkspacePath()) + if r, err := cmd.Do(); assert.NoError(t, err) { + dump(t, r) + } + }) + } + { // --- Built-In Variables --- t.Run("list built-in variables", func(t *testing.T) { cmd := c.Service().Accounts.Containers.Workspaces.BuiltInVariables.List(c.WorkspacePath()) @@ -53,7 +62,7 @@ func TestNewClient_Server(t *testing.T) { dump(t, r) } }) - t.Run("list built-in variables", func(t *testing.T) { + t.Run("create built-in variables", func(t *testing.T) { cmd := c.Service().Accounts.Containers.Workspaces.BuiltInVariables.Create(c.WorkspacePath()).Type() if r, err := cmd.Do(); assert.NoError(t, err) { dump(t, r)