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"
)
type Facebook struct {
// Enable provider
Enabled bool `json:"enabled" yaml:"enabled"`
PixelID string `json:"pixelId" yaml:"pixelId"`
APIAccessToken string `json:"apiAccessToken" yaml:"apiAccessToken"`
TestEventToken string `json:"testEventToken" yaml:"testEventToken"`
// Google Consent settings
GoogleConsent GoogleConsent `json:"googleConsent" yaml:"googleConsent"`
// Google Tag Manager server container settings
ServerContainer contemplate.Config `json:"serverContainer" yaml:"serverContainer"`
type (
Facebook struct {
// Enable provider
Enabled bool `json:"enabled" yaml:"enabled"`
PixelID string `json:"pixelId" yaml:"pixelId"`
APIAccessToken string `json:"apiAccessToken" yaml:"apiAccessToken"`
TestEventToken string `json:"testEventToken" yaml:"testEventToken"`
// Google Consent settings
GoogleConsent GoogleConsent `json:"googleConsent" yaml:"googleConsent"`
// 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"
)
type GoogleAdsConversion struct {
// Enable provider
Enabled bool `json:"enabled" yaml:"enabled"`
// Google Tag Manager server container settings
ServerContainer ServerContainer `json:"serverContainer" yaml:"serverContainer"`
}
type (
GoogleAdsConversion struct {
// Enable provider
Enabled bool `json:"enabled" yaml:"enabled"`
// 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 {
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 {
func (s *GoogleAdsConversionServerContainer) Setting(eventName string) GoogleAdsConversionTracking {
if value, ok := s.Settings[eventName]; ok {
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
eventParameters, err := utils.LoadEventParams(cfg.ServerContainer)
eventParameters, err := utils.LoadEventParams(cfg.ServerContainer.Config)
if err != nil {
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)
}
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
}
}

View File

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

View File

@ -220,13 +220,39 @@
"description": "Google Consent settings"
},
"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"
}
},
"additionalProperties": false,
"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": {
"properties": {
"credentials": {
@ -275,13 +301,25 @@
"description": "Enable provider"
},
"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"
}
},
"additionalProperties": false,
"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": {
"properties": {
"label": {
@ -483,18 +521,6 @@
"additionalProperties": false,
"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": {
"properties": {
"enabled": {
@ -560,6 +586,12 @@
"additionalProperties": false,
"type": "object"
},
"map[string]config.FacebookConversionAPITag": {
"additionalProperties": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.FacebookConversionAPITag"
},
"type": "object"
},
"map[string]config.GoogleAdsConversionTracking": {
"additionalProperties": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking"