Skip to main content
Glama

mcp-google-sheets

create-contact.ts3.92 kB
import { Property, createAction } from '@activepieces/pieces-framework'; import { HttpMethod } from '@activepieces/pieces-common'; import { closeAuth } from '../../'; import { CloseCRMContact } from '../common/types'; import { customFields, leadId } from '../common/props'; import { closeApiCall } from '../common/client'; export const createContact = createAction({ auth: closeAuth, name: 'create_contact', displayName: 'Create Contact', description: 'Creates a new contact.', props: { lead_id: leadId(), name: Property.ShortText({ displayName: 'Name', required: true, }), title: Property.ShortText({ displayName: 'Title', required: false, }), officePhone: Property.ShortText({ displayName: 'Office Phone', required: false, }), mobilePhone: Property.ShortText({ displayName: 'Mobile Phone', required: false, }), homePhone: Property.ShortText({ displayName: 'Home Phone', required: false, }), directPhone: Property.ShortText({ displayName: 'Direct Phone', required: false, }), faxPhone: Property.ShortText({ displayName: 'Fax Phone', required: false, }), otherPhone: Property.ShortText({ displayName: 'Other Phone', required: false, }), officeEmail: Property.ShortText({ displayName: 'Office Email', required: false, }), homeEmail: Property.ShortText({ displayName: 'Home Email', required: false, }), directEmail: Property.ShortText({ displayName: 'Direct Email', required: false, }), otherEmail: Property.ShortText({ displayName: 'Other Email', required: false, }), url: Property.ShortText({ displayName: 'URL', required: false, }), customFields: customFields('contact'), }, async run(context) { const { lead_id, name, title, officeEmail, officePhone, otherEmail, otherPhone, mobilePhone, homeEmail, url, homePhone, directEmail, directPhone, faxPhone, } = context.propsValue; const customFields = context.propsValue.customFields ?? {}; const transformedCustomFields = Object.fromEntries( Object.entries(customFields) .filter(([, v]) => v !== '' && v != null && !(Array.isArray(v) && v.length === 0)) .map(([key, value]) => [`custom.${key}`, value]), ); const payload: Partial<CloseCRMContact> = { lead_id: lead_id, title: title, name: name, ...transformedCustomFields, phones: [], emails: [], urls: [], }; // Add emails if present if (officeEmail) payload.emails?.push({ email: officeEmail.trim(), type: 'office' }); if (otherEmail) payload.emails?.push({ email: otherEmail.trim(), type: 'other' }); if (homeEmail) payload.emails?.push({ email: homeEmail.trim(), type: 'home' }); if (directEmail) payload.emails?.push({ email: directEmail.trim(), type: 'direct' }); // Add phones if present if (officePhone) payload.phones?.push({ phone: officePhone.trim(), type: 'office' }); if (otherPhone) payload.phones?.push({ phone: otherPhone.trim(), type: 'other' }); if (mobilePhone) payload.phones?.push({ phone: mobilePhone.trim(), type: 'mobile' }); if (homePhone) payload.phones?.push({ phone: homePhone.trim(), type: 'home' }); if (directPhone) payload.phones?.push({ phone: directPhone.trim(), type: 'direct' }); if (faxPhone) payload.phones?.push({ phone: faxPhone.trim(), type: 'fax' }); if (url) payload.urls?.push({ url, type: 'url' }); try { const response = await closeApiCall({ accessToken: context.auth, method: HttpMethod.POST, resourceUri: '/contact/', body: payload, }); return response; } catch (error: any) { if (error.response?.status === 400) { throw new Error(`Bad request: ${JSON.stringify(error.response.body)}`); } if (error.response?.status === 404) { throw new Error(`Lead not found with ID: ${lead_id}`); } throw new Error(`Error creating contact: ${error.message}`); } }, });

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