2
0

Add Meta Pixel block

Closes #582
This commit is contained in:
Baptiste Arnaud
2023-06-28 09:52:03 +02:00
parent 92f7f3cbe2
commit 033f8f99dd
39 changed files with 826 additions and 38 deletions

View File

@ -8,4 +8,5 @@ export enum IntegrationBlockType {
MAKE_COM = 'Make.com',
PABBLY_CONNECT = 'Pabbly',
CHATWOOT = 'Chatwoot',
PIXEL = 'Pixel',
}

View File

@ -7,3 +7,5 @@ export * from './pabblyConnect'
export * from './sendEmail'
export * from './webhook'
export * from './zapier'
export * from './pixel/schemas'
export * from './pixel/constants'

View File

@ -0,0 +1,134 @@
// Reference: https://developers.facebook.com/docs/meta-pixel/reference#standard-events
export const pixelEventTypes = [
'Lead',
'Contact',
'CompleteRegistration',
'Schedule',
'SubmitApplication',
'ViewContent',
'AddPaymentInfo',
'AddToCart',
'AddToWishlist',
'CustomizeProduct',
'Donate',
'FindLocation',
'InitiateCheckout',
'Purchase',
'Search',
'StartTrial',
'Subscribe',
] as const
export const allEventTypes = ['Custom', ...pixelEventTypes] as const
export const pixelObjectProperties: {
key: string
type: 'text' | 'code'
associatedEvents: (typeof pixelEventTypes)[number][]
}[] = [
{
key: 'content_category',
type: 'text',
associatedEvents: [
'AddPaymentInfo',
'AddToWishlist',
'InitiateCheckout',
'Lead',
'Search',
'ViewContent',
],
},
{
key: 'content_ids',
type: 'code',
associatedEvents: [
'AddPaymentInfo',
'AddToCart',
'AddToWishlist',
'InitiateCheckout',
'Purchase',
'Search',
'ViewContent',
],
},
{
key: 'content_name',
type: 'text',
associatedEvents: [
'AddToCart',
'AddToWishlist',
'CompleteRegistration',
'Lead',
'Purchase',
'ViewContent',
],
},
{
key: 'contents',
type: 'code',
associatedEvents: [
'AddPaymentInfo',
'AddToCart',
'AddToWishlist',
'InitiateCheckout',
'Purchase',
'Search',
'ViewContent',
],
},
{
key: 'currency',
type: 'text',
associatedEvents: [
'AddPaymentInfo',
'AddToCart',
'AddToWishlist',
'CompleteRegistration',
'InitiateCheckout',
'Lead',
'Purchase',
'Search',
'StartTrial',
'Subscribe',
'ViewContent',
],
},
{
key: 'num_items',
type: 'text',
associatedEvents: ['InitiateCheckout', 'Purchase'],
},
{
key: 'predicted_ltv',
type: 'text',
associatedEvents: ['StartTrial', 'Subscribe'],
},
{
key: 'search_string',
type: 'text',
associatedEvents: ['Search'],
},
{
key: 'status',
type: 'text',
associatedEvents: ['CompleteRegistration'],
},
{
key: 'value',
type: 'text',
associatedEvents: [
'AddPaymentInfo',
'AddToCart',
'AddToWishlist',
'CompleteRegistration',
'InitiateCheckout',
'Lead',
'Purchase',
'Search',
'StartTrial',
'Subscribe',
'ViewContent',
],
},
]

View File

@ -0,0 +1,51 @@
import { z } from 'zod'
import { pixelEventTypes } from './constants'
import { blockBaseSchema } from '../../baseSchemas'
import { IntegrationBlockType } from '../enums'
const basePixelOptionSchema = z.object({
pixelId: z.string().optional(),
params: z
.array(
z.object({
id: z.string(),
key: z.string().optional(),
value: z.any().optional(),
})
)
.optional(),
})
const initialPixelOptionSchema = basePixelOptionSchema.merge(
z.object({
eventType: z.undefined(),
})
)
const standardPixelEventOptionSchema = basePixelOptionSchema.merge(
z.object({
eventType: z.enum(pixelEventTypes),
})
)
const customPixelOptionSchema = basePixelOptionSchema.merge(
z.object({
eventType: z.enum(['Custom']),
name: z.string().optional(),
})
)
export const pixelOptionsSchema = z.discriminatedUnion('eventType', [
initialPixelOptionSchema,
standardPixelEventOptionSchema,
customPixelOptionSchema,
])
export const pixelBlockSchema = blockBaseSchema.merge(
z.object({
type: z.enum([IntegrationBlockType.PIXEL]),
options: pixelOptionsSchema,
})
)
export type PixelBlock = z.infer<typeof pixelBlockSchema>

View File

@ -1,9 +1,9 @@
import { ZodDiscriminatedUnionOption, z } from 'zod'
import { z } from 'zod'
import { BubbleBlockType } from './bubbles/enums'
import { choiceInputSchema } from './inputs/choice'
import { InputBlockType } from './inputs/enums'
import { IntegrationBlockType } from './integrations/enums'
import { ConditionBlock, conditionBlockSchema } from './logic/condition'
import { conditionBlockSchema } from './logic/condition'
import { LogicBlockType } from './logic/enums'
import { blockBaseSchema } from './baseSchemas'
import { startBlockSchema } from './start/schemas'
@ -31,6 +31,7 @@ import {
googleSheetsBlockSchema,
makeComBlockSchema,
pabblyConnectBlockSchema,
pixelBlockSchema,
sendEmailBlockSchema,
webhookBlockSchema,
zapierBlockSchema,
@ -125,6 +126,7 @@ export const blockSchema = z.discriminatedUnion('type', [
sendEmailBlockSchema,
webhookBlockSchema,
zapierBlockSchema,
pixelBlockSchema,
])
export type Block = z.infer<typeof blockSchema>