224 lines
7.9 KiB
TypeScript
224 lines
7.9 KiB
TypeScript
import * as sdk from '@botpress/sdk'
|
|
import proactiveConversation from 'bp_modules/proactive-conversation'
|
|
import proactiveUser from 'bp_modules/proactive-user'
|
|
|
|
const emailProps = {
|
|
cc: sdk.z
|
|
.array(sdk.z.object({ email: sdk.z.string().email(), name: sdk.z.string().optional() }))
|
|
.optional()
|
|
.describe('The CC recipients of the initial email')
|
|
.title('CC Recipients'),
|
|
bcc: sdk.z
|
|
.array(sdk.z.object({ email: sdk.z.string().email(), name: sdk.z.string().optional() }))
|
|
.optional()
|
|
.describe('The BCC recipients of the initial email')
|
|
.title('BCC Recipients'),
|
|
subject: sdk.z.string().optional().describe('The subject of the email').title('Email Subject'),
|
|
}
|
|
|
|
export default new sdk.IntegrationDefinition({
|
|
name: 'postmark',
|
|
title: 'Postmark',
|
|
description: 'Send and receive emails through Postmark',
|
|
version: '0.1.1',
|
|
readme: 'hub.md',
|
|
icon: 'icon.svg',
|
|
configuration: {
|
|
schema: sdk.z.object({
|
|
serverToken: sdk.z.string().secret().min(1).title('Server Token').describe('Your Postmark Server API Token'),
|
|
fromEmail: sdk.z.string().email().min(1).title('From Email').describe('Default sender email address'),
|
|
webhookSecret: sdk.z
|
|
.string()
|
|
.secret()
|
|
.optional()
|
|
.title('Webhook Secret')
|
|
.describe(
|
|
'Optional secret to verify inbound webhooks. Append ?secret=YOUR_SECRET to your Postmark webhook URL.'
|
|
),
|
|
}),
|
|
},
|
|
actions: {
|
|
sendEmail: {
|
|
title: 'Send Email',
|
|
description: 'Send an email through Postmark',
|
|
input: {
|
|
schema: sdk.z
|
|
.object({
|
|
conversationInformation: sdk.z
|
|
.object({
|
|
rootEmailId: sdk.z
|
|
.string()
|
|
.optional()
|
|
.describe('The ID of the root email in the thread')
|
|
.title('Root Email ID'),
|
|
lastEmailId: sdk.z
|
|
.string()
|
|
.optional()
|
|
.describe('The ID of the last email in the thread')
|
|
.title('Last Email ID'),
|
|
})
|
|
.optional()
|
|
.describe('Information about the conversation thread, used to group emails into threads')
|
|
.title('Conversation Information'),
|
|
userEmailAddress: sdk.z.string().describe('The recipient email address').title('Recipient Email Address'),
|
|
userName: sdk.z.string().optional().describe('The recipient name').title('Recipient Name'),
|
|
cc: sdk.z
|
|
.array(sdk.z.object({ email: sdk.z.string().email(), name: sdk.z.string().optional() }))
|
|
.optional()
|
|
.describe('The CC recipients of the initial email')
|
|
.title('CC Recipients'),
|
|
bcc: sdk.z
|
|
.array(sdk.z.object({ email: sdk.z.string().email(), name: sdk.z.string().optional() }))
|
|
.optional()
|
|
.describe('The BCC recipients of the initial email')
|
|
.title('BCC Recipients'),
|
|
subject: sdk.z
|
|
.string()
|
|
.optional()
|
|
.describe('The subject of the initial email')
|
|
.title('Initial Email Subject'),
|
|
text: sdk.z
|
|
.string()
|
|
.min(1)
|
|
.describe('The body of the initial email that opens the thread')
|
|
.title('Initial Email Body'),
|
|
})
|
|
.title('Conversation')
|
|
.describe('The conversation object fields'),
|
|
},
|
|
output: {
|
|
schema: sdk.z.object({
|
|
conversationId: sdk.z
|
|
.string()
|
|
.describe('The ID of the conversation associated with the email')
|
|
.title('Conversation ID'),
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
user: {
|
|
tags: {
|
|
emailAddress: {
|
|
title: 'Email Address',
|
|
description: 'Email address of the user',
|
|
},
|
|
},
|
|
},
|
|
channels: {
|
|
mail: {
|
|
title: 'Mail',
|
|
description: 'Send and receive emails through Postmark',
|
|
conversation: {
|
|
tags: {
|
|
threadRootMessageId: {
|
|
title: 'Thread Root Message ID',
|
|
description: 'The Message-ID of the first email in the thread, used to group replies into one conversation',
|
|
},
|
|
postmarkEmailAddress: {
|
|
title: 'Postmark Email Address',
|
|
description: 'The email address used in Postmark',
|
|
},
|
|
userEmailAddress: {
|
|
title: 'User Email Address',
|
|
description: 'The email address of the user',
|
|
},
|
|
},
|
|
},
|
|
message: {
|
|
tags: {
|
|
id: {
|
|
title: 'Message ID',
|
|
description: 'The ID of the email message',
|
|
},
|
|
emailMessageId: {
|
|
title: 'Email Message-ID',
|
|
description:
|
|
'RFC 5322 Message-ID of the email. Absent on attachment sub-messages so they are excluded from thread reconstruction.',
|
|
},
|
|
subject: {
|
|
title: 'Subject',
|
|
description: 'The subject of the email',
|
|
},
|
|
cc: {
|
|
title: 'CC',
|
|
description: 'The CC recipients of the email',
|
|
},
|
|
bcc: {
|
|
title: 'BCC',
|
|
description: 'The BCC recipients of the email',
|
|
},
|
|
spamScore: {
|
|
title: 'Spam Score',
|
|
description: 'The spam score of the email as calculated by Postmark',
|
|
},
|
|
},
|
|
},
|
|
messages: {
|
|
text: { schema: sdk.messages.defaults.text.schema.extend(emailProps) },
|
|
image: { schema: sdk.messages.defaults.image.schema.extend(emailProps) },
|
|
audio: { schema: sdk.messages.defaults.audio.schema.extend(emailProps) },
|
|
video: { schema: sdk.messages.defaults.video.schema.extend(emailProps) },
|
|
file: { schema: sdk.messages.defaults.file.schema.extend(emailProps) },
|
|
location: { schema: sdk.messages.defaults.location.schema.extend(emailProps) },
|
|
carousel: { schema: sdk.messages.defaults.carousel.schema.extend(emailProps) },
|
|
card: { schema: sdk.messages.defaults.card.schema.extend(emailProps) },
|
|
dropdown: { schema: sdk.messages.defaults.dropdown.schema.extend(emailProps) },
|
|
choice: { schema: sdk.messages.defaults.choice.schema.extend(emailProps) },
|
|
bloc: { schema: sdk.messages.defaults.bloc.schema.extend(emailProps) },
|
|
},
|
|
},
|
|
},
|
|
entities: {
|
|
conversation: {
|
|
title: 'Conversation',
|
|
description: 'A postmark replyThread',
|
|
schema: sdk.z.object({
|
|
conversationInformation: sdk.z
|
|
.object({
|
|
rootEmailId: sdk.z
|
|
.string()
|
|
.optional()
|
|
.describe('The ID of the root email in the thread')
|
|
.title('Root Email ID'),
|
|
lastEmailId: sdk.z
|
|
.string()
|
|
.optional()
|
|
.describe('The ID of the last email in the thread')
|
|
.title('Last Email ID'),
|
|
})
|
|
.describe('Information about the conversation thread, used to group emails into threads')
|
|
.title('Conversation Information'),
|
|
}),
|
|
},
|
|
user: {
|
|
title: 'User',
|
|
description: 'A user in the Postmark channel',
|
|
schema: sdk.z.object({}),
|
|
},
|
|
},
|
|
attributes: {
|
|
category: 'Communication & Channels',
|
|
repo: 'botpress',
|
|
},
|
|
})
|
|
.extend(proactiveConversation, ({ entities }) => ({
|
|
entities: { conversation: entities.conversation },
|
|
actions: {
|
|
getOrCreateConversation: {
|
|
name: 'getOrCreateReplyThreadConversation',
|
|
title: 'Get or Create Reply Thread Conversation',
|
|
description: 'Get or create a conversation for a reply thread',
|
|
},
|
|
},
|
|
}))
|
|
.extend(proactiveUser, ({ entities }) => ({
|
|
entities: { user: entities.user },
|
|
actions: {
|
|
getOrCreateUser: {
|
|
name: 'getOrCreateUser',
|
|
title: 'Get or Create User',
|
|
description: 'Get or create a user in the Postmark channel',
|
|
},
|
|
},
|
|
}))
|