Skip to main content
Glama

mcp-google-sheets

create-campaign.ts8.3 kB
import { createAction, Property } from '@activepieces/pieces-framework'; import { HttpMethod } from '@activepieces/pieces-common'; import { makeRequest } from '../common/client'; import { instantlyAiAuth } from '../../index'; export const createCampaignAction = createAction({ auth: instantlyAiAuth, name: 'create_campaign', displayName: 'Create Campaign', description: 'Create a new cold email campaign in Instantly', props: { name: Property.ShortText({ displayName: 'Campaign Name', description: 'Name of the campaign', required: true, }), schedule_time_from: Property.ShortText({ displayName: 'Schedule Time From', description: 'Start time in 24-hour format (e.g., "09:00")', required: true, defaultValue: '09:00', }), schedule_time_to: Property.ShortText({ displayName: 'Schedule Time To', description: 'End time in 24-hour format (e.g., "17:00")', required: true, defaultValue: '17:00', }), schedule_timezone: Property.ShortText({ displayName: 'Schedule Timezone', description: 'Timezone for the schedule i.e. "America/Dawson".', required: true, }), weekday_sending: Property.Checkbox({ displayName: 'Send on Weekdays', description: 'Whether to send emails Monday-Friday', required: false, defaultValue: true, }), weekend_sending: Property.Checkbox({ displayName: 'Send on Weekends', description: 'Whether to send emails Saturday-Sunday', required: false, defaultValue: false, }), start_date: Property.DateTime({ displayName: 'Start Date', description: 'Date to start the campaign', required: false, }), end_date: Property.DateTime({ displayName: 'End Date', description: 'Date to end the campaign', required: false, }), pl_value: Property.Number({ displayName: 'Positive Lead Value', description: 'Value of every positive lead', required: false, }), is_evergreen: Property.Checkbox({ displayName: 'Is Evergreen', description: 'Whether the campaign is evergreen', required: false, }), email_gap: Property.Number({ displayName: 'Email Gap', description: 'Gap between emails in minutes', required: false, }), random_wait_max: Property.Number({ displayName: 'Maximum Random Wait Time', description: 'Maximum random wait time in minutes', required: false, }), text_only: Property.Checkbox({ displayName: 'Text Only', description: 'Whether the campaign is text-only', required: false, }), daily_limit: Property.Number({ displayName: 'Daily Limit', description: 'Daily limit for sending emails', required: false, }), stop_on_reply: Property.Checkbox({ displayName: 'Stop on Reply', description: 'Whether to stop campaign on reply', required: false, }), link_tracking: Property.Checkbox({ displayName: 'Link Tracking', description: 'Whether to track links in emails', required: false, }), open_tracking: Property.Checkbox({ displayName: 'Open Tracking', description: 'Whether to track opens in emails', required: false, }), stop_on_auto_reply: Property.Checkbox({ displayName: 'Stop on Auto Reply', description: 'Whether to stop campaign on auto-reply', required: false, }), daily_max_leads: Property.Number({ displayName: 'Daily Maximum Leads', description: 'Maximum daily new leads to contact', required: false, }), prioritize_new_leads: Property.Checkbox({ displayName: 'Prioritize New Leads', description: 'Whether to prioritize new leads', required: false, }), match_lead_esp: Property.Checkbox({ displayName: 'Match Lead ESP', description: 'Whether to match leads by ESP', required: false, }), stop_for_company: Property.Checkbox({ displayName: 'Stop for Company', description: 'Stop campaign for the company (domain) when a lead replies', required: false, }), insert_unsubscribe_header: Property.Checkbox({ displayName: 'Insert Unsubscribe Header', description: 'Insert unsubscribe header in emails', required: false, }), allow_risky_contacts: Property.Checkbox({ displayName: 'Allow Risky Contacts', description: 'Allow risky contacts', required: false, }), disable_bounce_protect: Property.Checkbox({ displayName: 'Disable Bounce Protection', description: 'Disable bounce protection', required: false, }), }, async run(context) { const { name, schedule_time_from, schedule_time_to, schedule_timezone, weekday_sending, weekend_sending, start_date, end_date, pl_value, is_evergreen, email_gap, random_wait_max, text_only, daily_limit, stop_on_reply, link_tracking, open_tracking, stop_on_auto_reply, daily_max_leads, prioritize_new_leads, match_lead_esp, stop_for_company, insert_unsubscribe_header, allow_risky_contacts, disable_bounce_protect, } = context.propsValue; const { auth: apiKey } = context; // Build the campaign schedule according to API requirements const campaignSchedule: Record<string, any> = { schedules: [ { name: "Default Schedule", timing: { from: schedule_time_from, to: schedule_time_to, }, days: { 0: weekday_sending, // Monday 1: weekday_sending, // Tuesday 2: weekday_sending, // Wednesday 3: weekday_sending, // Thursday 4: weekday_sending, // Friday 5: weekend_sending, // Saturday 6: weekend_sending, // Sunday }, timezone: schedule_timezone, } ], }; // Add optional start and end dates if provided if (start_date) { campaignSchedule['start_date'] = start_date; } if (end_date) { campaignSchedule['end_date'] = end_date; } // Build the payload with required fields const payload: Record<string, unknown> = { name, campaign_schedule: campaignSchedule, }; // Add optional fields if provided if (pl_value !== undefined) { payload['pl_value'] = pl_value; } if (is_evergreen !== undefined) { payload['is_evergreen'] = is_evergreen; } if (email_gap !== undefined) { payload['email_gap'] = email_gap; } if (random_wait_max !== undefined) { payload['random_wait_max'] = random_wait_max; } if (text_only !== undefined) { payload['text_only'] = text_only; } if (daily_limit !== undefined) { payload['daily_limit'] = daily_limit; } if (stop_on_reply !== undefined) { payload['stop_on_reply'] = stop_on_reply; } if (link_tracking !== undefined) { payload['link_tracking'] = link_tracking; } if (open_tracking !== undefined) { payload['open_tracking'] = open_tracking; } if (stop_on_auto_reply !== undefined) { payload['stop_on_auto_reply'] = stop_on_auto_reply; } if (daily_max_leads !== undefined) { payload['daily_max_leads'] = daily_max_leads; } if (prioritize_new_leads !== undefined) { payload['prioritize_new_leads'] = prioritize_new_leads; } if (match_lead_esp !== undefined) { payload['match_lead_esp'] = match_lead_esp; } if (stop_for_company !== undefined) { payload['stop_for_company'] = stop_for_company; } if (insert_unsubscribe_header !== undefined) { payload['insert_unsubscribe_header'] = insert_unsubscribe_header; } if (allow_risky_contacts !== undefined) { payload['allow_risky_contacts'] = allow_risky_contacts; } if (disable_bounce_protect !== undefined) { payload['disable_bounce_protect'] = disable_bounce_protect; } return await makeRequest({ endpoint: 'campaigns', method: HttpMethod.POST, apiKey: apiKey as string, body: payload, }); }, });

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