fix(provider/facebook): make enableEventEnhancement & extendCookies configurable

This commit is contained in:
Kevin Franklin Kim 2024-12-09 10:34:09 +01:00
parent fd0227455b
commit d4c9ccb16f
No known key found for this signature in database
7 changed files with 103 additions and 45 deletions

View File

@ -4,14 +4,27 @@ import (
"github.com/foomo/gocontemplate/pkg/contemplate" "github.com/foomo/gocontemplate/pkg/contemplate"
) )
type Facebook struct { type (
// Enable provider Facebook struct {
Enabled bool `json:"enabled" yaml:"enabled"` // Enable provider
PixelID string `json:"pixelId" yaml:"pixelId"` Enabled bool `json:"enabled" yaml:"enabled"`
APIAccessToken string `json:"apiAccessToken" yaml:"apiAccessToken"` PixelID string `json:"pixelId" yaml:"pixelId"`
TestEventToken string `json:"testEventToken" yaml:"testEventToken"` APIAccessToken string `json:"apiAccessToken" yaml:"apiAccessToken"`
// Google Consent settings TestEventToken string `json:"testEventToken" yaml:"testEventToken"`
GoogleConsent GoogleConsent `json:"googleConsent" yaml:"googleConsent"` // Google Consent settings
// Google Tag Manager server container settings GoogleConsent GoogleConsent `json:"googleConsent" yaml:"googleConsent"`
ServerContainer contemplate.Config `json:"serverContainer" yaml:"serverContainer"` // Google Tag Manager server container settings
ServerContainer FacebookServerContainer `json:"serverContainer" yaml:"serverContainer"`
}
FacebookServerContainer struct {
contemplate.Config `json:",inline" yaml:",squash"`
Settings map[string]FacebookConversionAPITag `json:"settings" yaml:"settings"`
}
)
func (s *FacebookServerContainer) Setting(eventName string) FacebookConversionAPITag {
if value, ok := s.Settings[eventName]; ok {
return value
}
return FacebookConversionAPITag{}
} }

View File

@ -0,0 +1,8 @@
package config
type FacebookConversionAPITag struct {
// Extend Meta Pixel cookies (fbp/fbc)
ExtendCookies bool `json:"extendCookies" yaml:"extendCookies"`
// Enable Use of HTTP Only Secure Cookie (gtmeec) to Enhance Event Data
EnableEventEnhancement bool `json:"enableEventEnhancement" yaml:"enableEventEnhancement"`
}

View File

@ -4,23 +4,20 @@ import (
"github.com/foomo/gocontemplate/pkg/contemplate" "github.com/foomo/gocontemplate/pkg/contemplate"
) )
type GoogleAdsConversion struct { type (
// Enable provider GoogleAdsConversion struct {
Enabled bool `json:"enabled" yaml:"enabled"` // Enable provider
// Google Tag Manager server container settings Enabled bool `json:"enabled" yaml:"enabled"`
ServerContainer ServerContainer `json:"serverContainer" yaml:"serverContainer"` // Google Tag Manager server container settings
} ServerContainer GoogleAdsConversionServerContainer `json:"serverContainer" yaml:"serverContainer"`
}
GoogleAdsConversionServerContainer struct {
contemplate.Config `json:",inline" yaml:",squash"`
Settings map[string]GoogleAdsConversionTracking `json:"settings" yaml:"settings"`
}
)
type ServerContainer struct { func (s *GoogleAdsConversionServerContainer) Setting(eventName string) GoogleAdsConversionTracking {
contemplate.Config `json:",inline" yaml:",squash"`
Settings map[string]GoogleAdsConversionTracking `json:"settings" yaml:"settings"`
}
type GoogleAdsConversionTracking struct {
Label string `json:"label" yaml:"label"`
}
func (s *ServerContainer) Setting(eventName string) GoogleAdsConversionTracking {
if value, ok := s.Settings[eventName]; ok { if value, ok := s.Settings[eventName]; ok {
return value return value
} }

View File

@ -0,0 +1,5 @@
package config
type GoogleAdsConversionTracking struct {
Label string `json:"label" yaml:"label"`
}

View File

@ -47,7 +47,7 @@ func Server(l *slog.Logger, tm *tagmanager.TagManager, cfg config.Facebook) erro
} }
{ // create tags { // create tags
eventParameters, err := utils.LoadEventParams(cfg.ServerContainer) eventParameters, err := utils.LoadEventParams(cfg.ServerContainer.Config)
if err != nil { if err != nil {
return err return err
} }
@ -70,7 +70,7 @@ func Server(l *slog.Logger, tm *tagmanager.TagManager, cfg config.Facebook) erro
return errors.Wrap(err, "failed to upsert event trigger: "+event) return errors.Wrap(err, "failed to upsert event trigger: "+event)
} }
if _, err := tm.UpsertTag(servertagx.NewConversionsAPITag(event, pixelID, apiAccessToken, testEventToken, template, eventTrigger)); err != nil { if _, err := tm.UpsertTag(servertagx.NewConversionsAPITag(event, pixelID, apiAccessToken, testEventToken, cfg.ServerContainer.Setting(event), template, eventTrigger)); err != nil {
return err return err
} }
} }

View File

@ -1,6 +1,9 @@
package tag package tag
import ( import (
"strconv"
"github.com/foomo/sesamy-cli/pkg/config"
"github.com/foomo/sesamy-cli/pkg/utils" "github.com/foomo/sesamy-cli/pkg/utils"
"google.golang.org/api/tagmanager/v2" "google.golang.org/api/tagmanager/v2"
) )
@ -9,7 +12,7 @@ func ConversionsAPITagName(v string) string {
return "FB Conversion - " + v return "FB Conversion - " + v
} }
func NewConversionsAPITag(name string, pixelID, apiAccessToken, testEventCode *tagmanager.Variable, template *tagmanager.CustomTemplate, triggers ...*tagmanager.Trigger) *tagmanager.Tag { func NewConversionsAPITag(name string, pixelID, apiAccessToken, testEventCode *tagmanager.Variable, settings config.FacebookConversionAPITag, template *tagmanager.CustomTemplate, triggers ...*tagmanager.Trigger) *tagmanager.Tag {
return &tagmanager.Tag{ return &tagmanager.Tag{
FiringTriggerId: utils.TriggerIDs(triggers), FiringTriggerId: utils.TriggerIDs(triggers),
Name: ConversionsAPITagName(name), Name: ConversionsAPITagName(name),
@ -33,12 +36,12 @@ func NewConversionsAPITag(name string, pixelID, apiAccessToken, testEventCode *t
{ {
Key: "enableEventEnhancement", Key: "enableEventEnhancement",
Type: "boolean", Type: "boolean",
Value: "false", Value: strconv.FormatBool(settings.EnableEventEnhancement),
}, },
{ {
Key: "extendCookies", Key: "extendCookies",
Type: "boolean", Type: "boolean",
Value: "false", Value: strconv.FormatBool(settings.ExtendCookies),
}, },
{ {
Key: "actionSource", Key: "actionSource",

View File

@ -220,13 +220,39 @@
"description": "Google Consent settings" "description": "Google Consent settings"
}, },
"serverContainer": { "serverContainer": {
"$ref": "#/$defs/github.com.foomo.gocontemplate.pkg.contemplate.Config", "$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.FacebookServerContainer",
"description": "Google Tag Manager server container settings" "description": "Google Tag Manager server container settings"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
"type": "object" "type": "object"
}, },
"github.com.foomo.sesamy-cli.pkg.config.FacebookConversionAPITag": {
"properties": {
"extendCookies": {
"type": "boolean",
"description": "Extend Meta Pixel cookies (fbp/fbc)"
},
"enableEventEnhancement": {
"type": "boolean",
"description": "Enable Use of HTTP Only Secure Cookie (gtmeec) to Enhance Event Data"
}
},
"additionalProperties": false,
"type": "object"
},
"github.com.foomo.sesamy-cli.pkg.config.FacebookServerContainer": {
"properties": {
"packages": {
"$ref": "#/$defs/[]*contemplate.PackageConfig"
},
"settings": {
"$ref": "#/$defs/map[string]config.FacebookConversionAPITag"
}
},
"additionalProperties": false,
"type": "object"
},
"github.com.foomo.sesamy-cli.pkg.config.GoogleAPI": { "github.com.foomo.sesamy-cli.pkg.config.GoogleAPI": {
"properties": { "properties": {
"credentials": { "credentials": {
@ -275,13 +301,25 @@
"description": "Enable provider" "description": "Enable provider"
}, },
"serverContainer": { "serverContainer": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.ServerContainer", "$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionServerContainer",
"description": "Google Tag Manager server container settings" "description": "Google Tag Manager server container settings"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
"type": "object" "type": "object"
}, },
"github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionServerContainer": {
"properties": {
"packages": {
"$ref": "#/$defs/[]*contemplate.PackageConfig"
},
"settings": {
"$ref": "#/$defs/map[string]config.GoogleAdsConversionTracking"
}
},
"additionalProperties": false,
"type": "object"
},
"github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking": { "github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking": {
"properties": { "properties": {
"label": { "label": {
@ -483,18 +521,6 @@
"additionalProperties": false, "additionalProperties": false,
"type": "object" "type": "object"
}, },
"github.com.foomo.sesamy-cli.pkg.config.ServerContainer": {
"properties": {
"packages": {
"$ref": "#/$defs/[]*contemplate.PackageConfig"
},
"settings": {
"$ref": "#/$defs/map[string]config.GoogleAdsConversionTracking"
}
},
"additionalProperties": false,
"type": "object"
},
"github.com.foomo.sesamy-cli.pkg.config.Tracify": { "github.com.foomo.sesamy-cli.pkg.config.Tracify": {
"properties": { "properties": {
"enabled": { "enabled": {
@ -560,6 +586,12 @@
"additionalProperties": false, "additionalProperties": false,
"type": "object" "type": "object"
}, },
"map[string]config.FacebookConversionAPITag": {
"additionalProperties": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.FacebookConversionAPITag"
},
"type": "object"
},
"map[string]config.GoogleAdsConversionTracking": { "map[string]config.GoogleAdsConversionTracking": {
"additionalProperties": { "additionalProperties": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking" "$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking"