Merge pull request #45 from foomo/sesamy-cli-0.4.1

Sesamy cli 0.4.1
This commit is contained in:
Kevin Franklin Kim 2024-08-27 17:00:17 +02:00 committed by GitHub
commit 29900c5010
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 302 additions and 8 deletions

View File

@ -21,7 +21,7 @@ $ brew install foomo/tap/sesamy-cli
Add a `sesamy.yaml` configuration
```yaml
# yaml-language-server: $schema=https://raw.githubusercontent.com/foomo/sesamy-cli/v0.3.0/sesamy.yaml
# yaml-language-server: $schema=https://raw.githubusercontent.com/foomo/sesamy-cli/v0.4.1/sesamy.yaml
version: '1.0'
# Whether to redact the visitor ip
@ -211,6 +211,12 @@ googleAds:
conversionLinker:
# Enable provider
enabled: true
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: ad_storage
# --- Umami settings
umami:
@ -298,7 +304,7 @@ cookiebot:
enabled: true
# Name of the manually installed Cookiebot CMP tag template
# "https://tagmanager.google.com/gallery/#/owners/cybotcorp/templates/gtm-templates-cookiebot-cmp
templateName: "Cookiebot CMP"
templateName: Cookiebot CMP
# Cookiebot id
cookiebotId: ''
# CDN Region (eu, com)

View File

@ -1,5 +1,6 @@
package config
type ConversionLinker struct {
Enabled bool `json:"enabled" yaml:"enabled"`
Enabled bool `json:"enabled" yaml:"enabled"`
GoogleConsent GoogleConsent `json:"googleConsent" yaml:"googleConsent"`
}

View File

@ -1,6 +1,7 @@
package conversionlinker
const (
Tag = "cl"
Name = "Conversion Linker"
Tag = "cl"
Name = "Conversion Linker"
NameConversionLinkerTrigger = "Conversion Linker"
)

View File

@ -3,11 +3,14 @@ package conversionlinker
import (
"github.com/foomo/sesamy-cli/pkg/config"
containertag "github.com/foomo/sesamy-cli/pkg/provider/conversionlinker/server/tag"
"github.com/foomo/sesamy-cli/pkg/provider/conversionlinker/server/trigger"
"github.com/foomo/sesamy-cli/pkg/provider/googleconsent"
googleconsentvariable "github.com/foomo/sesamy-cli/pkg/provider/googleconsent/server/variable"
"github.com/foomo/sesamy-cli/pkg/tagmanager"
servertrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/server/trigger"
"github.com/pkg/errors"
)
func Server(tm *tagmanager.TagManager, events config.ConversionLinker) error {
func Server(tm *tagmanager.TagManager, cfg config.ConversionLinker) error {
{
if folder, err := tm.UpsertFolder("Sesamy - " + Name); err != nil {
return err
@ -16,7 +19,24 @@ func Server(tm *tagmanager.TagManager, events config.ConversionLinker) error {
}
}
if _, err := tm.UpsertTag(containertag.NewConversionLinker(Name, servertrigger.AllPages)); err != nil {
var eventTriggerOpts []trigger.ConversionLinkerEventOption
if cfg.GoogleConsent.Enabled {
if err := googleconsent.ServerEnsure(tm); err != nil {
return err
}
consentVariable, err := tm.LookupVariable(googleconsentvariable.GoogleConsentModeName(cfg.GoogleConsent.Mode))
if err != nil {
return err
}
eventTriggerOpts = append(eventTriggerOpts, trigger.ConversionLinkerEventWithConsentMode(consentVariable))
}
eventTrigger, err := tm.UpsertTrigger(trigger.NewConversionLinkerEvent(NameConversionLinkerTrigger, eventTriggerOpts...))
if err != nil {
return errors.Wrap(err, "failed to upsert event trigger: "+NameConversionLinkerTrigger)
}
if _, err := tm.UpsertTag(containertag.NewConversionLinker(Name, eventTrigger)); err != nil {
return err
}

View File

@ -0,0 +1,54 @@
package trigger
import (
"google.golang.org/api/tagmanager/v2"
)
type (
ConversionLinkerEventOptions struct {
consentMode *tagmanager.Variable
}
ConversionLinkerEventOption func(*ConversionLinkerEventOptions)
)
func ConversionLinkerEventWithConsentMode(mode *tagmanager.Variable) ConversionLinkerEventOption {
return func(o *ConversionLinkerEventOptions) {
o.consentMode = mode
}
}
func NewConversionLinkerEvent(name string, opts ...ConversionLinkerEventOption) *tagmanager.Trigger {
o := &ConversionLinkerEventOptions{}
for _, opt := range opts {
if opt != nil {
opt(o)
}
}
var filter []*tagmanager.Condition
if o.consentMode != nil {
filter = append(filter,
&tagmanager.Condition{
Parameter: []*tagmanager.Parameter{
{
Key: "arg0",
Type: "template",
Value: "{{" + o.consentMode.Name + "}}",
},
{
Key: "arg1",
Type: "template",
Value: "granted",
},
},
Type: "equals",
},
)
}
return &tagmanager.Trigger{
Type: "serverPageview",
Name: name,
Filter: filter,
}
}

View File

@ -7,6 +7,84 @@
"properties": {
"enabled": {
"type": "boolean"
},
"googleConsent": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"mode": {
"type": "string"
}
}
}
}
},
"cookiebot": {
"type": "object",
"properties": {
"AdvertiserConsentModeEnabled": {
"type": "boolean"
},
"cdnRegion": {
"type": "string"
},
"cookiebotId": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"templateName": {
"type": "string"
},
"urlPassthrough": {
"type": "boolean"
}
}
},
"emarsys": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"googleConsent": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"mode": {
"type": "string"
}
}
},
"merchantId": {
"type": "string"
},
"serverContainer": {
"type": "object",
"properties": {
"packages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"types": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
}
},
@ -19,6 +97,17 @@
"enabled": {
"type": "boolean"
},
"googleConsent": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"mode": {
"type": "string"
}
}
},
"pixelId": {
"type": "string"
},
@ -87,6 +176,17 @@
},
"enabled": {
"type": "boolean"
},
"googleConsent": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"mode": {
"type": "string"
}
}
}
}
},
@ -96,6 +196,31 @@
"enabled": {
"type": "boolean"
},
"googleConsent": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"mode": {
"type": "string"
}
}
},
"googleGTag": {
"type": "object",
"properties": {
"ecommerceItems": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
},
"priority": {
"type": "integer"
}
}
},
"serverContainer": {
"type": "object",
"properties": {
@ -290,6 +415,17 @@
"endpointUrl": {
"type": "string"
},
"googleConsent": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"mode": {
"type": "string"
}
}
},
"serverContainer": {
"type": "object",
"properties": {

View File

@ -127,6 +127,20 @@ googleTag:
googleAnalytics:
# Enable provider
enabled: true
# Google GTag.js settings
googleGTag:
# Provision custom client
enabled: true
# Client priority
priority: 10
# Patch ecommerce items
ecommerceItems: true
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: analytics_storage
# Google Tag Manager web container settings
webContainer:
# Contemplate package config for generated events
@ -148,6 +162,12 @@ googleAnalytics:
googleAds:
# Enable provider
enabled: true
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: ad_storage
# Google Ads Conversion settings
conversion:
# Google Ads Conversion Tracking ID
@ -167,6 +187,12 @@ googleAds:
conversionLinker:
# Enable provider
enabled: true
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: ad_storage
# --- Umami settings
umami:
@ -178,6 +204,12 @@ umami:
websiteId: ''
# Endpoint url of the umami api
endpointUrl: https://umami.your-domain.com
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: analytics_storage
# Google Tag Manager server container settings
serverContainer:
# Contemplate package config for generated events
@ -199,6 +231,12 @@ facebook:
# Code used to verify that your server events are received correctly by Conversions API
testEventToken: ''
# Google Tag Manager server container settings
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: ad_storage
serverContainer:
# Contemplate package config for generated events
packages:
@ -213,3 +251,41 @@ facebook:
- BeginCheckout
- GenerateLead
- ViewItem
# --- Emarsys
emarsys:
# Enable provider
enabled: true
# Emarsys merchant id
merchantId: ''
# Google Consent settings
googleConsent:
# Enable consent mode
enabled: true
# Consent mode name
mode: analytics_storage
# Google Tag Manager server container settings
serverContainer:
# Contemplate package config for generated events
packages:
- path: github.com/foomo/sesamy-go/pkg/event
types:
- Purchase
- ViewItem
- ViewItemList
# --- Cookiebot CMP
cookiebot:
# Enable provider
enabled: true
# Name of the manually installed Cookiebot CMP tag template
# "https://tagmanager.google.com/gallery/#/owners/cybotcorp/templates/gtm-templates-cookiebot-cmp
templateName: Cookiebot CMP
# Cookiebot id
cookiebotId: ''
# CDN Region (eu, com)
cdnRegion: eu
# Enable URL passthrough
urlPassthrough: false
# Enable advertiser consent mode
AdvertiserConsentModeEnabled: false