mirror of
https://github.com/foomo/sesamy-cli.git
synced 2025-10-16 12:35:36 +00:00
feat: add google ads conversion
This commit is contained in:
parent
0949037e31
commit
dcc4eeb19b
@ -4,6 +4,7 @@ import (
|
||||
pkgcmd "github.com/foomo/sesamy-cli/pkg/cmd"
|
||||
conversionlinkerprovider "github.com/foomo/sesamy-cli/pkg/provider/conversionlinker"
|
||||
facebookprovider "github.com/foomo/sesamy-cli/pkg/provider/facebook"
|
||||
googleadsprovider "github.com/foomo/sesamy-cli/pkg/provider/googleads"
|
||||
googleanalyticsprovider "github.com/foomo/sesamy-cli/pkg/provider/googleanalytics"
|
||||
googletagprovider "github.com/foomo/sesamy-cli/pkg/provider/googletag"
|
||||
googletagmanagerprovider "github.com/foomo/sesamy-cli/pkg/provider/googletagmanager"
|
||||
@ -84,6 +85,13 @@ func NewServer(root *cobra.Command) {
|
||||
}
|
||||
}
|
||||
|
||||
if cfg.GoogleAds.Enabled && pkgcmd.Tag(googleadsprovider.Tag, tags) {
|
||||
l.Info("🅿️ Running provider", "name", googleadsprovider.Name)
|
||||
if err := googleadsprovider.Server(l, tm, cfg.GoogleAds); err != nil {
|
||||
return errors.Wrap(err, "failed to provision google ads")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ type Config struct {
|
||||
GoogleAPI GoogleAPI `json:"googleAPI" yaml:"googleAPI"`
|
||||
GoogleTagManager GoogleTagManager `json:"googleTagManager" yaml:"googleTagManager"`
|
||||
// Providers
|
||||
GoogleAds GoogleAds `json:"googleAds" yaml:"googleAds"`
|
||||
GoogleAnalytics GoogleAnalytics `json:"googleAnalytics" yaml:"googleAnalytics"`
|
||||
ConversionLinker ConversionLinker `json:"conversionLinker" yaml:"conversionLinker"`
|
||||
Facebook Facebook `json:"facebook" yaml:"facebook"`
|
||||
|
||||
6
pkg/config/googleads.go
Normal file
6
pkg/config/googleads.go
Normal file
@ -0,0 +1,6 @@
|
||||
package config
|
||||
|
||||
type GoogleAds struct {
|
||||
Enabled bool `json:"enabled" yaml:"enabled"`
|
||||
Conversion GoogleAdsConversion `json:"conversion" yaml:"conversion"`
|
||||
}
|
||||
12
pkg/config/googleadsconversion.go
Normal file
12
pkg/config/googleadsconversion.go
Normal file
@ -0,0 +1,12 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"github.com/foomo/gocontemplate/pkg/contemplate"
|
||||
)
|
||||
|
||||
type GoogleAdsConversion struct {
|
||||
Enabled bool `json:"enabled" yaml:"enabled"`
|
||||
ConversionID string `json:"conversionId" yaml:"conversionId"`
|
||||
ConversionLabel string `json:"conversionLabel" yaml:"conversionLabel"`
|
||||
ServerContainer contemplate.Config `json:"serverContainer" yaml:"serverContainer"`
|
||||
}
|
||||
@ -3,8 +3,8 @@ package facebook
|
||||
const (
|
||||
Tag = "meta"
|
||||
Name = "Facebook"
|
||||
NamePixelIDConstant = "Facebook Pixel ID"
|
||||
NameAPIAcessTokenConstant = "Facebook API Access Token"
|
||||
NameTestEventTokenConstant = "Facebook Test Event Token"
|
||||
NamePixelIDConstant = "FB Pixel ID"
|
||||
NameAPIAcessTokenConstant = "FB API Access Token"
|
||||
NameTestEventTokenConstant = "FB Test Event Token"
|
||||
NameConversionsAPITagTemplate = "Conversions API Tag"
|
||||
)
|
||||
|
||||
8
pkg/provider/googleads/constants.go
Normal file
8
pkg/provider/googleads/constants.go
Normal file
@ -0,0 +1,8 @@
|
||||
package googleads
|
||||
|
||||
const (
|
||||
Tag = "gads"
|
||||
Name = "Google Ads"
|
||||
NameConversionIDConstant = "GAds Conversion ID"
|
||||
NameConversionLabelConstant = "GAds Conversion Label"
|
||||
)
|
||||
55
pkg/provider/googleads/server.go
Normal file
55
pkg/provider/googleads/server.go
Normal file
@ -0,0 +1,55 @@
|
||||
package googleads
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
|
||||
"github.com/foomo/sesamy-cli/pkg/config"
|
||||
servertagx "github.com/foomo/sesamy-cli/pkg/provider/googleads/server/tag"
|
||||
"github.com/foomo/sesamy-cli/pkg/provider/googletag"
|
||||
"github.com/foomo/sesamy-cli/pkg/tagmanager"
|
||||
commontrigger "github.com/foomo/sesamy-cli/pkg/tagmanager/common/trigger"
|
||||
commonvariable "github.com/foomo/sesamy-cli/pkg/tagmanager/common/variable"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func Server(l *slog.Logger, tm *tagmanager.TagManager, cfg config.GoogleAds) error {
|
||||
{ // create folder
|
||||
if folder, err := tm.UpsertFolder("Sesamy - " + Name); err != nil {
|
||||
return err
|
||||
} else {
|
||||
tm.SetFolderName(folder.Name)
|
||||
}
|
||||
}
|
||||
|
||||
{ // conversion
|
||||
conversionID, err := tm.UpsertVariable(commonvariable.NewConstant(NameConversionIDConstant, cfg.Conversion.ConversionID))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
conversionLabel, err := tm.UpsertVariable(commonvariable.NewConstant(NameConversionLabelConstant, cfg.Conversion.ConversionLabel))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
{ // create tags
|
||||
eventParameters, err := googletag.CreateServerEventTriggers(tm, cfg.Conversion.ServerContainer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for event := range eventParameters {
|
||||
eventTrigger, err := tm.LookupTrigger(commontrigger.EventName(event))
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to lookup event trigger: "+event)
|
||||
}
|
||||
|
||||
if _, err := tm.UpsertTag(servertagx.NewGoogleAdsConversionTracking(event, conversionID, conversionLabel, eventTrigger)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
package tag
|
||||
|
||||
import (
|
||||
"github.com/foomo/sesamy-cli/pkg/utils"
|
||||
"google.golang.org/api/tagmanager/v2"
|
||||
)
|
||||
|
||||
func GoogleAdsConversionTrackingName(v string) string {
|
||||
return "GAds Conversion - " + v
|
||||
}
|
||||
|
||||
func NewGoogleAdsConversionTracking(name string, conversionID, conversionLabel *tagmanager.Variable, triggers ...*tagmanager.Trigger) *tagmanager.Tag {
|
||||
return &tagmanager.Tag{
|
||||
FiringTriggerId: utils.TriggerIDs(triggers),
|
||||
Name: GoogleAdsConversionTrackingName(name),
|
||||
TagFiringOption: "oncePerEvent",
|
||||
Parameter: []*tagmanager.Parameter{
|
||||
{
|
||||
Key: "enableNewCustomerReporting",
|
||||
Type: "boolean",
|
||||
Value: "false",
|
||||
},
|
||||
{
|
||||
Key: "enableConversionLinker",
|
||||
Type: "boolean",
|
||||
Value: "true",
|
||||
},
|
||||
{
|
||||
Key: "enableProductReporting",
|
||||
Type: "boolean",
|
||||
Value: "false",
|
||||
},
|
||||
{
|
||||
Key: "conversionValue",
|
||||
Type: "template",
|
||||
Value: "{{value}}",
|
||||
},
|
||||
{
|
||||
Key: "conversionId",
|
||||
Type: "template",
|
||||
Value: "{{" + conversionID.Name + "}}",
|
||||
},
|
||||
{
|
||||
Key: "currencyCode",
|
||||
Type: "template",
|
||||
Value: "{{currency}}",
|
||||
},
|
||||
{
|
||||
Key: "conversionLabel",
|
||||
Type: "template",
|
||||
Value: "{{" + conversionLabel.Name + "}}",
|
||||
},
|
||||
{
|
||||
Key: "rdp",
|
||||
Type: "boolean",
|
||||
Value: "false",
|
||||
},
|
||||
},
|
||||
Type: "sgtmadsct",
|
||||
}
|
||||
}
|
||||
29
sesamy.yaml
29
sesamy.yaml
@ -46,7 +46,7 @@ googleTag:
|
||||
webContainer:
|
||||
# Contemplate package config for generated events
|
||||
packages:
|
||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
||||
- path: github.com/foomo/sesamy-go/pkg/event
|
||||
types:
|
||||
- PageView
|
||||
- SelectItem
|
||||
@ -54,7 +54,7 @@ googleTag:
|
||||
serverContainer:
|
||||
# Contemplate package config for generated events
|
||||
packages:
|
||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
||||
- path: github.com/foomo/sesamy-go/pkg/event
|
||||
types:
|
||||
- PageView
|
||||
- SelectItem
|
||||
@ -131,7 +131,7 @@ googleAnalytics:
|
||||
webContainer:
|
||||
# Contemplate package config for generated events
|
||||
packages:
|
||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
||||
- path: github.com/foomo/sesamy-go/pkg/event
|
||||
types:
|
||||
- PageView
|
||||
- SelectItem
|
||||
@ -139,11 +139,30 @@ googleAnalytics:
|
||||
serverContainer:
|
||||
# Contemplate package config for generated events
|
||||
packages:
|
||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
||||
- path: github.com/foomo/sesamy-go/pkg/event
|
||||
types:
|
||||
- PageView
|
||||
- SelectItem
|
||||
|
||||
# --- Google Ads
|
||||
googleAds:
|
||||
# Enable provider
|
||||
enabled: true
|
||||
# Google Ads Conversion settings
|
||||
conversion:
|
||||
# Google Ads Conversion Tracking ID
|
||||
conversionId: ''
|
||||
# Google Ads Conversion Tracking Label
|
||||
conversionLabel: ''
|
||||
# Google Tag Manager server container settings
|
||||
serverContainer:
|
||||
# Contemplate package config for generated events
|
||||
packages:
|
||||
- path: github.com/foomo/sesamy-go/pkg/event
|
||||
types:
|
||||
- AddToCart
|
||||
- Purchase
|
||||
|
||||
# --- Conversion Linker settings
|
||||
conversionLinker:
|
||||
# Enable provider
|
||||
@ -163,7 +182,7 @@ umami:
|
||||
serverContainer:
|
||||
# Contemplate package config for generated events
|
||||
packages:
|
||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
||||
- path: github.com/foomo/sesamy-go/pkg/event
|
||||
types:
|
||||
- PageView
|
||||
- SelectItem
|
||||
|
||||
Loading…
Reference in New Issue
Block a user