Files
2026-07-13 13:34:48 +08:00

60 lines
1.7 KiB
TypeScript

import { z, IntegrationDefinition } from '@botpress/sdk'
import schemas from './definitions/schemas'
// TODO: use default options
const toJSONSchemaOptions: Partial<z.transforms.JSONSchemaGenerationOptions> = {
discriminatedUnionStrategy: 'anyOf',
discriminator: false,
}
export default new IntegrationDefinition({
name: 'tally',
title: 'Tally',
description: 'Integrate with Tally forms to capture form submissions and automate workflows.',
version: '0.1.2',
readme: 'hub.md',
icon: 'icon.svg',
configuration: {
schema: z.object({
apiKey: z.string().min(1).title('API Key').describe('Tally API Key'),
formIds: z.array(z.string().min(1)).min(1).title('Form IDs').describe('Tally form IDs'),
signingSecret: z.string().min(1).optional().title('Signing Secret').describe('Webhook signing secret (optional)'),
}),
},
states: {
tallyIntegrationInfo: {
type: 'integration',
schema: z.object({
tallyWebhookIds: z
.record(z.string().min(1), z.string().min(1))
.title('Tally webhooks')
.describe('Mapping of Tally form IDs to their registered webhook IDs'),
}),
},
},
events: {
formSubmitted: {
title: 'Form Submitted',
description: 'This event happens when the form is submitted',
schema: schemas.formSchema,
},
},
actions: {
listSubmissions: {
title: 'List Submissions',
description: 'List all the submissions for a specified form',
input: {
schema: schemas.listSubmissionsInputSchema,
},
output: {
schema: schemas.listSubmissionsOuputSchema,
},
},
},
__advanced: { toJSONSchemaOptions },
attributes: {
category: 'Business Operations',
repo: 'botpress',
},
})