Skip to main content
Glama

mcp-google-sheets

new-campaign-trigger.ts4.85 kB
import { createTrigger, TriggerStrategy, Property } from '@activepieces/pieces-framework'; import { getAccessTokenOrThrow } from '@activepieces/pieces-common'; import { mailchimpCommon } from '../common'; import { MailChimpCampaignWebhookRequest } from '../common/types'; import { mailchimpAuth } from '../..'; const WEBHOOK_DATA_STORE_KEY = 'mail_chimp_campaign_webhook_data'; type WebhookData = { id: string; listId: string; }; const getCampaignEventSummary = (request: MailChimpCampaignWebhookRequest): any => { const data = request.data; return { campaign_id: data.campaign_id, campaign_title: data.campaign_title, campaign_subject: data.campaign_subject, campaign_send_time: data.campaign_send_time, campaign_status: data.campaign_status, list_id: data.list_id, subscriber_id: data.id, event_timestamp: request.fired_at, campaign_type: inferCampaignType(data), delivery_status: assessDeliveryStatus(data), }; }; const inferCampaignType = (data: any): string => { if (data.campaign_title?.toLowerCase().includes('welcome')) return 'Welcome Series'; if (data.campaign_title?.toLowerCase().includes('newsletter')) return 'Newsletter'; if (data.campaign_title?.toLowerCase().includes('promo')) return 'Promotional'; if (data.campaign_title?.toLowerCase().includes('abandoned')) return 'Abandoned Cart'; return 'Standard Campaign'; }; const assessDeliveryStatus = (data: any): string => { const status = data.campaign_status || ''; if (status === 'sent') return 'Delivered'; if (status === 'sending') return 'In Progress'; if (status === 'scheduled') return 'Scheduled'; if (status === 'paused') return 'Paused'; if (status === 'canceled') return 'Canceled'; return 'Unknown'; }; // Note: Campaign webhook data doesn't include performance metrics // These would need to be fetched separately via the campaigns API if needed export const mailChimpNewCampaignTrigger = createTrigger({ auth: mailchimpAuth, name: 'new_campaign', displayName: 'New Campaign', description: 'Fires when a new campaign is created or sent', type: TriggerStrategy.WEBHOOK, props: { list_id: mailchimpCommon.mailChimpListIdDropdown, }, sampleData: { type: 'campaign', fired_at: '2024-01-15T10:30:00Z', data: { id: '8a25ff1d98', list_id: 'a6b5da1054', campaign_id: 'campaign_123', campaign_title: 'Welcome Campaign', campaign_subject: 'Welcome to our newsletter', campaign_send_time: '2024-01-15T10:30:00Z', campaign_status: 'sent', }, }, async onEnable(context): Promise<void> { try { const accessToken = getAccessTokenOrThrow(context.auth); const server = await mailchimpCommon.getMailChimpServerPrefix(accessToken); const enabledWebhookId = await mailchimpCommon.enableWebhookRequest({ server, listId: context.propsValue.list_id as string, token: accessToken, webhookUrl: context.webhookUrl!, events: { campaign: true, }, }); await context.store?.put<WebhookData>(WEBHOOK_DATA_STORE_KEY, { id: enabledWebhookId, listId: context.propsValue.list_id as string, }); } catch (error: any) { throw new Error(`Failed to enable campaign webhook: ${error.message || JSON.stringify(error)}`); } }, async onDisable(context): Promise<void> { try { const webhookData = await context.store?.get<WebhookData>(WEBHOOK_DATA_STORE_KEY); if (webhookData === undefined || webhookData === null) { return; } const token = getAccessTokenOrThrow(context.auth); const server = await mailchimpCommon.getMailChimpServerPrefix(token); await mailchimpCommon.disableWebhookRequest({ server, token, listId: webhookData.listId, webhookId: webhookData.id, }); } catch (error: any) { console.error(`Failed to disable campaign webhook: ${error.message || JSON.stringify(error)}`); } }, async run(context): Promise<unknown[]> { try { const request = context.payload.body as MailChimpCampaignWebhookRequest; if (!request || request.type !== 'campaign') { return []; } const enhancedRequest = { ...request, trigger_type: 'campaign_event', event_category: 'Campaign Activity', processed_at: new Date().toISOString(), campaign_summary: getCampaignEventSummary(request), campaign_insights: { campaign_type: inferCampaignType(request.data), delivery_status: assessDeliveryStatus(request.data), }, }; return [enhancedRequest]; } catch (error: any) { console.error(`Error processing campaign webhook: ${error.message || JSON.stringify(error)}`); return []; } }, });

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