Skip to main content
Glama

mcp-google-sheets

create-campaign.ts5.47 kB
import { createAction, Property } from '@activepieces/pieces-framework'; import { getAccessTokenOrThrow } from '@activepieces/pieces-common'; import { mailchimpCommon } from '../common'; import { mailchimpAuth } from '../..'; import mailchimp from '@mailchimp/mailchimp_marketing'; import { MailchimpClient, CampaignCreateData, CampaignContentData } from '../common/types'; export const createCampaign = createAction({ auth: mailchimpAuth, name: 'create_campaign', displayName: 'Create Campaign', description: 'Create a new Mailchimp campaign', props: { campaign_type: Property.StaticDropdown({ displayName: 'Campaign Type', description: 'The type of campaign to create', required: true, options: { options: [ { label: 'Regular', value: 'regular' }, { label: 'Plain Text', value: 'plaintext' }, { label: 'A/B Test', value: 'ab' }, { label: 'RSS', value: 'rss' }, { label: 'Variate', value: 'variate' }, ], }, }), list_id: mailchimpCommon.mailChimpListIdDropdown, subject_line: Property.ShortText({ displayName: 'Subject Line', description: 'The subject line for the campaign', required: true, }), title: Property.ShortText({ displayName: 'Campaign Title', description: 'The title of the campaign', required: true, }), from_name: Property.ShortText({ displayName: 'From Name', description: 'The name that will appear in the "From" field', required: true, }), from_email: Property.ShortText({ displayName: 'From Email', description: 'The email address that will appear in the "From" field', required: true, }), reply_to: Property.ShortText({ displayName: 'Reply To Email', description: 'The email address that will receive replies', required: true, }), to_name: Property.ShortText({ displayName: 'To Name', description: 'The name that will appear in the "To" field (e.g., *|FNAME|*)', required: false, }), content_type: Property.StaticDropdown({ displayName: 'Content Type', description: 'How the campaign content is put together', required: true, options: { options: [ { label: 'Template', value: 'template' }, { label: 'HTML', value: 'html' }, { label: 'URL', value: 'url' }, { label: 'Multichannel', value: 'multichannel' }, ], }, }), content_url: Property.ShortText({ displayName: 'Content URL', description: 'The URL where the campaign content is hosted (required if content_type is "url")', required: false, }), template_id: Property.ShortText({ displayName: 'Template ID', description: 'The ID of the template to use (required if content_type is "template")', required: false, }), html_content: Property.LongText({ displayName: 'HTML Content', description: 'The HTML content for the campaign (required if content_type is "html")', required: false, }), }, async run(context) { const accessToken = getAccessTokenOrThrow(context.auth); const server = await mailchimpCommon.getMailChimpServerPrefix(accessToken); try { const client = mailchimp as unknown as MailchimpClient; client.setConfig({ accessToken: accessToken, server: server, }); const campaignData: CampaignCreateData = { type: context.propsValue.campaign_type, recipients: { list_id: context.propsValue.list_id as string, }, settings: { subject_line: context.propsValue.subject_line, title: context.propsValue.title, from_name: context.propsValue.from_name, from_email: context.propsValue.from_email, reply_to: context.propsValue.reply_to, to_name: context.propsValue.to_name || '', }, }; const campaign = await client.campaigns.create(campaignData); // Set campaign content based on content type const contentData: CampaignContentData = {}; if (context.propsValue.content_type === 'html' && context.propsValue.html_content) { contentData.html = context.propsValue.html_content; } else if (context.propsValue.content_type === 'url' && context.propsValue.content_url) { contentData.url = context.propsValue.content_url; } else if (context.propsValue.content_type === 'template' && context.propsValue.template_id) { contentData.template = { id: context.propsValue.template_id, }; } // Set content if any content data is provided if (Object.keys(contentData).length > 0) { await client.campaigns.setContent(campaign.id, contentData); } return { success: true, campaign_id: campaign.id, campaign_web_id: campaign.web_id, campaign_title: campaign.settings?.title, campaign_subject: campaign.settings?.subject_line, campaign_status: campaign.status, campaign_type: campaign.type, created_at: campaign.create_time, archive_url: campaign.archive_url, _links: campaign._links || [], }; } catch (error: any) { console.error('Error creating campaign:', error); throw new Error(`Failed to create campaign: ${error.message || JSON.stringify(error)}`); } }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server