Skip to content

Emarsys ​

pkg/provider/emarsys.

Typed GA4 events for Emarsys marketing automation.

Event names ​

ConstantWire name
EventNameEmarsysCartemarsys_cart
EventNameEmarsysCategoryemarsys_category
EventNameEmarsysPurchaseemarsys_purchase
EventNameEmarsysViewemarsys_view

Event constructors ​

Each lives in pkg/provider/emarsys/event/:

go
import (
	emarsysevent "github.com/foomo/sesamy-go/pkg/provider/emarsys/event"
	"github.com/foomo/sesamy-go/pkg/provider/emarsys/event/params"
	sesamyparams "github.com/foomo/sesamy-go/pkg/event/params"
)

// Cart
ev := emarsysevent.NewEmarsysCart(params.EmarsysCart[sesamyparams.Item]{
	Items: []sesamyparams.Item{ /* ... */ },
})

// Category
evC := emarsysevent.NewEmarsysCategory(params.EmarsysCategory{Category: "shoes/boots"})

// Purchase
evP := emarsysevent.NewEmarsysPurchase(params.EmarsysPurchase[sesamyparams.Item]{
	TransactionID: "T-123",
	Items: []sesamyparams.Item{ /* ... */ },
})

// View
evV := emarsysevent.NewEmarsysView(params.EmarsysView[sesamyparams.Item]{
	Items: []sesamyparams.Item{ /* ... */ },
})

All four return sesamy.Event[P] and can be projected to Event[any] via .AnyEvent() for transport.

Params ​

pkg/provider/emarsys/event/params defines the typed param structs. They are generic over an Item type so that you can reuse sesamyparams.Item (the canonical GA4 item) or supply your own enriched item shape.

Reacting to inbound Emarsys events ​

Inside a cross-protocol EventHandler:

go
func handle(l *zap.Logger, r *http.Request, e *sesamy.Event[any]) error {
	switch e.Name {
	case emarsysevent.EventNameEmarsysPurchase:
		var p params.EmarsysPurchase[sesamyparams.Item]
		if err := e.DecodeParams(&p); err != nil {
			return err
		}
		// forward p to Emarsys' Web Behavior API ...
	}
	return nil
}