feat(googleads): support multiple conversions

This commit is contained in:
Kevin Franklin Kim 2025-05-23 13:22:28 +02:00
parent ab5bb5d07f
commit be65ea9157
No known key found for this signature in database
8 changed files with 93 additions and 24 deletions

View File

@ -53,7 +53,7 @@ Add a `sesamy.yaml` configuration
```yaml
# yaml-language-server: $schema=https://raw.githubusercontent.com/foomo/sesamy-cli/refs/heads/main/sesamy.schema.json
version: '1.0'
version: '1.1'
# Whether to redact the visitor ip
redactVisitorIp: true
@ -249,12 +249,20 @@ googleAds:
conversion:
# Enable Google Ads Conversion
enabled: true
# Google Ads Conversion Tracking Label
conversionLabel: ''
# Google Tag Manager server container settings
serverContainer:
# Path to the go.mod file
directory: .
# Conversion settings map
settings:
add_to_cart:
- label: ''
- conversionId: ''
label: ''
purchase:
- label: ''
- conversionId: ''
label: ''
# Contemplate package config for generated events
packages:
- path: github.com/foomo/sesamy-go/pkg/event
@ -447,6 +455,42 @@ cookiebot:
adUserData: denied
# Default consent ad_personalization
adPersonalization: denied
# --- Mixpanel
mixpanel:
# Enable provider
enabled: true
# Project Token
projectToken: ''
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: analytics_storage
# Google Tag Manager server container settings
serverContainer:
# Track events
track:
# Directory containing the go.mod file
directory: .
# Contemplate package config for generated events
packages:
- path: 'github.com/foomo/sesamy-go/pkg/event'
types:
- AddPaymentInfo
- AddShippingInfo
- AddToCart
- BeginCheckout
- PageView
- Purchase
- RemoveFromCart
- Search
- SelectItem
- ViewCart
- ViewItem
- ViewItemList
```
## Caveats

View File

@ -13,13 +13,14 @@ type (
}
GoogleAdsConversionServerContainer struct {
contemplate.Config `json:",inline" yaml:",squash"`
Settings map[string]GoogleAdsConversionTracking `json:"settings" yaml:"settings"`
// Conversion settings map
Settings map[string][]GoogleAdsConversionTracking `json:"settings" yaml:"settings"`
}
)
func (s *GoogleAdsConversionServerContainer) Setting(eventName string) GoogleAdsConversionTracking {
func (s *GoogleAdsConversionServerContainer) Setting(eventName string) []GoogleAdsConversionTracking {
if value, ok := s.Settings[eventName]; ok {
return value
}
return GoogleAdsConversionTracking{}
return nil
}

View File

@ -1,5 +1,8 @@
package config
type GoogleAdsConversionTracking struct {
// Conversion label
Label string `json:"label" yaml:"label"`
// Optional conversion id overriding the default
ConversionID string `json:"conversionId" yaml:"conversionId"`
}

View File

@ -1,3 +1,3 @@
package config
const Version = "1.0"
const Version = "1.1"

View File

@ -69,8 +69,10 @@ func Server(ctx context.Context, l *slog.Logger, tm *tagmanager.TagManager, cfg
return errors.Wrap(err, "failed to upsert event trigger: "+event)
}
if _, err := tm.UpsertTag(ctx, folder, servertagx.NewGoogleAdsConversionTracking(event, value, currency, conversionID, cfg.Conversion.ServerContainer.Setting(event), eventTrigger)); err != nil {
return err
for _, setting := range cfg.Conversion.ServerContainer.Setting(event) {
if _, err := tm.UpsertTag(ctx, folder, servertagx.NewGoogleAdsConversionTracking(event, value, currency, conversionID, setting, eventTrigger)); err != nil {
return err
}
}
}
}

View File

@ -11,9 +11,16 @@ func GoogleAdsConversionTrackingName(v string) string {
}
func NewGoogleAdsConversionTracking(name string, value, currency, conversionID *tagmanager.Variable, settings config.GoogleAdsConversionTracking, triggers ...*tagmanager.Trigger) *tagmanager.Tag {
tagName := GoogleAdsConversionTrackingName(name)
tagConversionID := "{{" + conversionID.Name + "}}"
if settings.ConversionID != "" {
tagName += " (" + settings.ConversionID + ")"
tagConversionID = settings.ConversionID
}
return &tagmanager.Tag{
FiringTriggerId: utils.TriggerIDs(triggers),
Name: GoogleAdsConversionTrackingName(name),
Name: tagName,
TagFiringOption: "oncePerEvent",
Parameter: []*tagmanager.Parameter{
{
@ -39,7 +46,7 @@ func NewGoogleAdsConversionTracking(name string, value, currency, conversionID *
{
Key: "conversionId",
Type: "template",
Value: "{{" + conversionID.Name + "}}",
Value: tagConversionID,
},
{
Key: "currencyCode",

View File

@ -15,6 +15,12 @@
},
"type": "array"
},
"[]config.GoogleAdsConversionTracking": {
"items": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking"
},
"type": "array"
},
"[]string": {
"items": {
"type": "string"
@ -388,7 +394,8 @@
"$ref": "#/$defs/[]*contemplate.PackageConfig"
},
"settings": {
"$ref": "#/$defs/map[string]config.GoogleAdsConversionTracking"
"$ref": "#/$defs/map[string][]config.GoogleAdsConversionTracking",
"description": "Conversion settings map"
}
},
"additionalProperties": false,
@ -397,7 +404,12 @@
"github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking": {
"properties": {
"label": {
"type": "string"
"type": "string",
"description": "Conversion label"
},
"conversionId": {
"type": "string",
"description": "Optional conversion id overriding the default"
}
},
"additionalProperties": false,
@ -777,15 +789,15 @@
"additionalProperties": false,
"type": "object"
},
"map[string]config.FacebookConversionAPITag": {
"map[string][]config.GoogleAdsConversionTracking": {
"additionalProperties": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.FacebookConversionAPITag"
"$ref": "#/$defs/[]config.GoogleAdsConversionTracking"
},
"type": "object"
},
"map[string]config.GoogleAdsConversionTracking": {
"map[string]config.FacebookConversionAPITag": {
"additionalProperties": {
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking"
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.FacebookConversionAPITag"
},
"type": "object"
},

View File

@ -1,5 +1,5 @@
# yaml-language-server: $schema=sesamy.schema.json
version: '1.0'
version: '1.1'
# Whether to redact the visitor ip
redactVisitorIp: true
@ -200,14 +200,14 @@ googleAds:
enabled: true
# Google Tag Manager server container settings
serverContainer:
# Conversion labels map
settings:
add_to_cart:
label: ''
purchase:
label: ''
# Path to the go.mod file
directory: .
# Conversion settings map
settings:
add_to_cart:
- label: ''
purchase:
- label: ''
# Contemplate package config for generated events
packages:
- path: github.com/foomo/sesamy-go/pkg/event