mirror of
https://github.com/foomo/sesamy-cli.git
synced 2025-10-16 12:35:36 +00:00
feat(googleads): support multiple conversions
This commit is contained in:
parent
ab5bb5d07f
commit
be65ea9157
50
README.md
50
README.md
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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"`
|
||||
}
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
package config
|
||||
|
||||
const Version = "1.0"
|
||||
const Version = "1.1"
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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"
|
||||
},
|
||||
|
||||
14
sesamy.yaml
14
sesamy.yaml
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user