feat: add google ads conversion

This commit is contained in:
Kevin Franklin Kim 2024-07-14 14:05:21 +02:00
parent 0949037e31
commit dcc4eeb19b
No known key found for this signature in database
9 changed files with 178 additions and 8 deletions

View File

@ -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
},
}

View File

@ -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
View File

@ -0,0 +1,6 @@
package config
type GoogleAds struct {
Enabled bool `json:"enabled" yaml:"enabled"`
Conversion GoogleAdsConversion `json:"conversion" yaml:"conversion"`
}

View 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"`
}

View File

@ -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"
)

View File

@ -0,0 +1,8 @@
package googleads
const (
Tag = "gads"
Name = "Google Ads"
NameConversionIDConstant = "GAds Conversion ID"
NameConversionLabelConstant = "GAds Conversion Label"
)

View 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
}

View File

@ -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",
}
}

View File

@ -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