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
|
||||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/foomo/sesamy-cli/refs/heads/main/sesamy.schema.json
|
# 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
|
# Whether to redact the visitor ip
|
||||||
redactVisitorIp: true
|
redactVisitorIp: true
|
||||||
@ -249,12 +249,20 @@ googleAds:
|
|||||||
conversion:
|
conversion:
|
||||||
# Enable Google Ads Conversion
|
# Enable Google Ads Conversion
|
||||||
enabled: true
|
enabled: true
|
||||||
# Google Ads Conversion Tracking Label
|
|
||||||
conversionLabel: ''
|
|
||||||
# Google Tag Manager server container settings
|
# Google Tag Manager server container settings
|
||||||
serverContainer:
|
serverContainer:
|
||||||
# Path to the go.mod file
|
# Path to the go.mod file
|
||||||
directory: .
|
directory: .
|
||||||
|
# Conversion settings map
|
||||||
|
settings:
|
||||||
|
add_to_cart:
|
||||||
|
- label: ''
|
||||||
|
- conversionId: ''
|
||||||
|
label: ''
|
||||||
|
purchase:
|
||||||
|
- label: ''
|
||||||
|
- conversionId: ''
|
||||||
|
label: ''
|
||||||
# Contemplate package config for generated events
|
# Contemplate package config for generated events
|
||||||
packages:
|
packages:
|
||||||
- path: github.com/foomo/sesamy-go/pkg/event
|
- path: github.com/foomo/sesamy-go/pkg/event
|
||||||
@ -447,6 +455,42 @@ cookiebot:
|
|||||||
adUserData: denied
|
adUserData: denied
|
||||||
# Default consent ad_personalization
|
# Default consent ad_personalization
|
||||||
adPersonalization: denied
|
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
|
## Caveats
|
||||||
|
|||||||
@ -13,13 +13,14 @@ type (
|
|||||||
}
|
}
|
||||||
GoogleAdsConversionServerContainer struct {
|
GoogleAdsConversionServerContainer struct {
|
||||||
contemplate.Config `json:",inline" yaml:",squash"`
|
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 {
|
if value, ok := s.Settings[eventName]; ok {
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
return GoogleAdsConversionTracking{}
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
type GoogleAdsConversionTracking struct {
|
type GoogleAdsConversionTracking struct {
|
||||||
|
// Conversion label
|
||||||
Label string `json:"label" yaml:"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
|
package config
|
||||||
|
|
||||||
const Version = "1.0"
|
const Version = "1.1"
|
||||||
|
|||||||
@ -69,11 +69,13 @@ func Server(ctx context.Context, l *slog.Logger, tm *tagmanager.TagManager, cfg
|
|||||||
return errors.Wrap(err, "failed to upsert event trigger: "+event)
|
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 {
|
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// remarketing
|
// remarketing
|
||||||
if cfg.Remarketing.Enabled {
|
if cfg.Remarketing.Enabled {
|
||||||
|
|||||||
@ -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 {
|
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{
|
return &tagmanager.Tag{
|
||||||
FiringTriggerId: utils.TriggerIDs(triggers),
|
FiringTriggerId: utils.TriggerIDs(triggers),
|
||||||
Name: GoogleAdsConversionTrackingName(name),
|
Name: tagName,
|
||||||
TagFiringOption: "oncePerEvent",
|
TagFiringOption: "oncePerEvent",
|
||||||
Parameter: []*tagmanager.Parameter{
|
Parameter: []*tagmanager.Parameter{
|
||||||
{
|
{
|
||||||
@ -39,7 +46,7 @@ func NewGoogleAdsConversionTracking(name string, value, currency, conversionID *
|
|||||||
{
|
{
|
||||||
Key: "conversionId",
|
Key: "conversionId",
|
||||||
Type: "template",
|
Type: "template",
|
||||||
Value: "{{" + conversionID.Name + "}}",
|
Value: tagConversionID,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Key: "currencyCode",
|
Key: "currencyCode",
|
||||||
|
|||||||
@ -15,6 +15,12 @@
|
|||||||
},
|
},
|
||||||
"type": "array"
|
"type": "array"
|
||||||
},
|
},
|
||||||
|
"[]config.GoogleAdsConversionTracking": {
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
"[]string": {
|
"[]string": {
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@ -388,7 +394,8 @@
|
|||||||
"$ref": "#/$defs/[]*contemplate.PackageConfig"
|
"$ref": "#/$defs/[]*contemplate.PackageConfig"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"$ref": "#/$defs/map[string]config.GoogleAdsConversionTracking"
|
"$ref": "#/$defs/map[string][]config.GoogleAdsConversionTracking",
|
||||||
|
"description": "Conversion settings map"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
@ -397,7 +404,12 @@
|
|||||||
"github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking": {
|
"github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"label": {
|
"label": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"description": "Conversion label"
|
||||||
|
},
|
||||||
|
"conversionId": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Optional conversion id overriding the default"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
@ -777,15 +789,15 @@
|
|||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
"map[string]config.FacebookConversionAPITag": {
|
"map[string][]config.GoogleAdsConversionTracking": {
|
||||||
"additionalProperties": {
|
"additionalProperties": {
|
||||||
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.FacebookConversionAPITag"
|
"$ref": "#/$defs/[]config.GoogleAdsConversionTracking"
|
||||||
},
|
},
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
"map[string]config.GoogleAdsConversionTracking": {
|
"map[string]config.FacebookConversionAPITag": {
|
||||||
"additionalProperties": {
|
"additionalProperties": {
|
||||||
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.GoogleAdsConversionTracking"
|
"$ref": "#/$defs/github.com.foomo.sesamy-cli.pkg.config.FacebookConversionAPITag"
|
||||||
},
|
},
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
|||||||
14
sesamy.yaml
14
sesamy.yaml
@ -1,5 +1,5 @@
|
|||||||
# yaml-language-server: $schema=sesamy.schema.json
|
# yaml-language-server: $schema=sesamy.schema.json
|
||||||
version: '1.0'
|
version: '1.1'
|
||||||
|
|
||||||
# Whether to redact the visitor ip
|
# Whether to redact the visitor ip
|
||||||
redactVisitorIp: true
|
redactVisitorIp: true
|
||||||
@ -200,14 +200,14 @@ googleAds:
|
|||||||
enabled: true
|
enabled: true
|
||||||
# Google Tag Manager server container settings
|
# Google Tag Manager server container settings
|
||||||
serverContainer:
|
serverContainer:
|
||||||
# Conversion labels map
|
|
||||||
settings:
|
|
||||||
add_to_cart:
|
|
||||||
label: ''
|
|
||||||
purchase:
|
|
||||||
label: ''
|
|
||||||
# Path to the go.mod file
|
# Path to the go.mod file
|
||||||
directory: .
|
directory: .
|
||||||
|
# Conversion settings map
|
||||||
|
settings:
|
||||||
|
add_to_cart:
|
||||||
|
- label: ''
|
||||||
|
purchase:
|
||||||
|
- label: ''
|
||||||
# Contemplate package config for generated events
|
# Contemplate package config for generated events
|
||||||
packages:
|
packages:
|
||||||
- path: github.com/foomo/sesamy-go/pkg/event
|
- path: github.com/foomo/sesamy-go/pkg/event
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user