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"
|
pkgcmd "github.com/foomo/sesamy-cli/pkg/cmd"
|
||||||
conversionlinkerprovider "github.com/foomo/sesamy-cli/pkg/provider/conversionlinker"
|
conversionlinkerprovider "github.com/foomo/sesamy-cli/pkg/provider/conversionlinker"
|
||||||
facebookprovider "github.com/foomo/sesamy-cli/pkg/provider/facebook"
|
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"
|
googleanalyticsprovider "github.com/foomo/sesamy-cli/pkg/provider/googleanalytics"
|
||||||
googletagprovider "github.com/foomo/sesamy-cli/pkg/provider/googletag"
|
googletagprovider "github.com/foomo/sesamy-cli/pkg/provider/googletag"
|
||||||
googletagmanagerprovider "github.com/foomo/sesamy-cli/pkg/provider/googletagmanager"
|
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
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ type Config struct {
|
|||||||
GoogleAPI GoogleAPI `json:"googleAPI" yaml:"googleAPI"`
|
GoogleAPI GoogleAPI `json:"googleAPI" yaml:"googleAPI"`
|
||||||
GoogleTagManager GoogleTagManager `json:"googleTagManager" yaml:"googleTagManager"`
|
GoogleTagManager GoogleTagManager `json:"googleTagManager" yaml:"googleTagManager"`
|
||||||
// Providers
|
// Providers
|
||||||
|
GoogleAds GoogleAds `json:"googleAds" yaml:"googleAds"`
|
||||||
GoogleAnalytics GoogleAnalytics `json:"googleAnalytics" yaml:"googleAnalytics"`
|
GoogleAnalytics GoogleAnalytics `json:"googleAnalytics" yaml:"googleAnalytics"`
|
||||||
ConversionLinker ConversionLinker `json:"conversionLinker" yaml:"conversionLinker"`
|
ConversionLinker ConversionLinker `json:"conversionLinker" yaml:"conversionLinker"`
|
||||||
Facebook Facebook `json:"facebook" yaml:"facebook"`
|
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 (
|
const (
|
||||||
Tag = "meta"
|
Tag = "meta"
|
||||||
Name = "Facebook"
|
Name = "Facebook"
|
||||||
NamePixelIDConstant = "Facebook Pixel ID"
|
NamePixelIDConstant = "FB Pixel ID"
|
||||||
NameAPIAcessTokenConstant = "Facebook API Access Token"
|
NameAPIAcessTokenConstant = "FB API Access Token"
|
||||||
NameTestEventTokenConstant = "Facebook Test Event Token"
|
NameTestEventTokenConstant = "FB Test Event Token"
|
||||||
NameConversionsAPITagTemplate = "Conversions API Tag"
|
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:
|
webContainer:
|
||||||
# Contemplate package config for generated events
|
# Contemplate package config for generated events
|
||||||
packages:
|
packages:
|
||||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
- path: github.com/foomo/sesamy-go/pkg/event
|
||||||
types:
|
types:
|
||||||
- PageView
|
- PageView
|
||||||
- SelectItem
|
- SelectItem
|
||||||
@ -54,7 +54,7 @@ googleTag:
|
|||||||
serverContainer:
|
serverContainer:
|
||||||
# Contemplate package config for generated events
|
# Contemplate package config for generated events
|
||||||
packages:
|
packages:
|
||||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
- path: github.com/foomo/sesamy-go/pkg/event
|
||||||
types:
|
types:
|
||||||
- PageView
|
- PageView
|
||||||
- SelectItem
|
- SelectItem
|
||||||
@ -131,7 +131,7 @@ googleAnalytics:
|
|||||||
webContainer:
|
webContainer:
|
||||||
# Contemplate package config for generated events
|
# Contemplate package config for generated events
|
||||||
packages:
|
packages:
|
||||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
- path: github.com/foomo/sesamy-go/pkg/event
|
||||||
types:
|
types:
|
||||||
- PageView
|
- PageView
|
||||||
- SelectItem
|
- SelectItem
|
||||||
@ -139,11 +139,30 @@ googleAnalytics:
|
|||||||
serverContainer:
|
serverContainer:
|
||||||
# Contemplate package config for generated events
|
# Contemplate package config for generated events
|
||||||
packages:
|
packages:
|
||||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
- path: github.com/foomo/sesamy-go/pkg/event
|
||||||
types:
|
types:
|
||||||
- PageView
|
- PageView
|
||||||
- SelectItem
|
- 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
|
# --- Conversion Linker settings
|
||||||
conversionLinker:
|
conversionLinker:
|
||||||
# Enable provider
|
# Enable provider
|
||||||
@ -163,7 +182,7 @@ umami:
|
|||||||
serverContainer:
|
serverContainer:
|
||||||
# Contemplate package config for generated events
|
# Contemplate package config for generated events
|
||||||
packages:
|
packages:
|
||||||
- path: 'github.com/foomo/sesamy-cli/_example/server'
|
- path: github.com/foomo/sesamy-go/pkg/event
|
||||||
types:
|
types:
|
||||||
- PageView
|
- PageView
|
||||||
- SelectItem
|
- SelectItem
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user