121 lines
3.4 KiB
TypeScript
121 lines
3.4 KiB
TypeScript
import { z, ActionDefinition } from '@botpress/sdk'
|
|
|
|
export const leadSchema = z.object({
|
|
id: z.string().title('Lead ID').describe('The ID of the lead'),
|
|
name: z.string().title('Name').describe('The name of the lead'),
|
|
createdAt: z.string().title('Created At').describe('Creation date of the lead'),
|
|
updatedAt: z.string().title('Updated At').describe('Last time the lead was updated'),
|
|
properties: z.record(z.string().nullable()).title('Properties').describe('The properties of the lead'),
|
|
})
|
|
|
|
const searchLead: ActionDefinition = {
|
|
title: 'Search Lead',
|
|
description: 'Search for a lead in HubSpot',
|
|
input: {
|
|
schema: z.object({
|
|
name: z.string().optional().title('Name').describe('The name of the lead to search for'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({
|
|
lead: leadSchema.optional().title('Lead').describe('The lead found, or undefined if not found'),
|
|
}),
|
|
},
|
|
}
|
|
const createLead: ActionDefinition = {
|
|
title: 'Create Lead',
|
|
description: 'Create a lead in HubSpot',
|
|
input: {
|
|
schema: z.object({
|
|
name: z.string().title('Name').describe('The name of the lead'),
|
|
contact: z
|
|
.string()
|
|
.title('Contact')
|
|
.describe('The contact to associate the lead with. Can be an email address or contact ID'),
|
|
properties: z
|
|
.array(
|
|
z.object({
|
|
name: z.string().title('Property Name').describe('The name of the property'),
|
|
value: z.string().title('Property Value').describe('The value of the property'),
|
|
})
|
|
)
|
|
.optional()
|
|
.title('Properties')
|
|
.describe('The properties of the lead'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({
|
|
lead: leadSchema.title('Lead').describe('The created lead'),
|
|
}),
|
|
},
|
|
}
|
|
|
|
const getLead: ActionDefinition = {
|
|
title: 'Get Lead',
|
|
description: 'Get a lead from HubSpot',
|
|
input: {
|
|
schema: z.object({
|
|
leadId: z.string().title('Lead ID').describe('The ID of the lead to get'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({
|
|
lead: leadSchema.title('Lead').describe('The fetched lead'),
|
|
}),
|
|
},
|
|
}
|
|
|
|
const updateLead: ActionDefinition = {
|
|
title: 'Update Lead',
|
|
description: 'Update a lead in HubSpot',
|
|
input: {
|
|
schema: z.object({
|
|
leadId: z.string().title('Lead ID').describe('The ID of the lead to update'),
|
|
name: z.string().optional().title('Name').describe('The name of the lead'),
|
|
properties: z
|
|
.array(
|
|
z.object({
|
|
name: z.string().title('Property Name').describe('The name of the property'),
|
|
value: z.string().title('Property Value').describe('The value of the property'),
|
|
})
|
|
)
|
|
.optional()
|
|
.title('Properties')
|
|
.describe('The properties of the lead'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({
|
|
lead: leadSchema
|
|
.extend({
|
|
// May not be returned by API
|
|
name: leadSchema.shape.name.optional(),
|
|
})
|
|
.title('Lead')
|
|
.describe('The updated lead'),
|
|
}),
|
|
},
|
|
}
|
|
|
|
const deleteLead: ActionDefinition = {
|
|
title: 'Delete Lead',
|
|
description: 'Delete a lead in HubSpot',
|
|
input: {
|
|
schema: z.object({
|
|
leadId: z.string().title('Lead ID').describe('The ID of the lead to delete'),
|
|
}),
|
|
},
|
|
output: {
|
|
schema: z.object({}).title('Empty').describe('Empty output'),
|
|
},
|
|
}
|
|
|
|
export const actions = {
|
|
searchLead,
|
|
createLead,
|
|
getLead,
|
|
updateLead,
|
|
deleteLead,
|
|
} as const
|