Skip to main content
Glama

mcp-google-sheets

appointment-scheduled.ts3.64 kB
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework'; import { AuthenticationType, httpClient, HttpMethod, HttpRequest, QueryParams, } from '@activepieces/pieces-common'; import { acuitySchedulingAuth } from '../../index'; import { API_URL, getAppointmentDetails } from '../common'; import { appointmentTypeIdDropdown, calendarIdDropdown } from '../common/props'; const TRIGGER_KEY = 'trigger_new_appointment'; export const appointmentScheduledTrigger = createTrigger({ auth: acuitySchedulingAuth, name: 'new_appointment', displayName: 'New Appointment', description: 'Triggers when a new appointment is scheduled.', props: { calendarId: calendarIdDropdown({ displayName: 'Calendar', required: false, }), appointmentTypeId: appointmentTypeIdDropdown({ displayName: 'Appointment Type', required: false, }), }, type: TriggerStrategy.WEBHOOK, async onEnable(context) { const request: HttpRequest = { method: HttpMethod.POST, url: `${API_URL}/webhooks`, body: { target: context.webhookUrl, event: 'appointment.scheduled', }, authentication: { type: AuthenticationType.BEARER_TOKEN, token: context.auth.access_token, }, }; const response = await httpClient.sendRequest<{ id: string }>(request); await context.store.put(TRIGGER_KEY, response.body.id); }, async onDisable(context) { const webhookId = await context.store.get<string>(TRIGGER_KEY); if (webhookId) { const request: HttpRequest = { method: HttpMethod.DELETE, url: `${API_URL}/webhooks/${webhookId}`, authentication: { type: AuthenticationType.BEARER_TOKEN, token: context.auth.access_token, }, }; await httpClient.sendRequest(request); await context.store.delete(TRIGGER_KEY); } }, async test(context) { const { calendarId, appointmentTypeId } = context.propsValue; const qs: QueryParams = { max: '10', }; if (calendarId) qs['calendarID'] = calendarId.toString(); if (appointmentTypeId) qs['appointmentTypeID'] = appointmentTypeId.toString(); const response = await httpClient.sendRequest<Array<Record<string, any>>>({ method: HttpMethod.GET, url: `${API_URL}/appointments`, queryParams: qs, authentication: { type: AuthenticationType.BEARER_TOKEN, token: context.auth.access_token, }, }); return response.body; }, async run(context) { const { calendarId, appointmentTypeId } = context.propsValue; const payload = context.payload.body as { action: string; id: number; calendarID: number; appointmentTypeID: number; }; if ( payload.action === 'appointment.scheduled' && payload.id && (!calendarId || calendarId === payload.calendarID) && (!appointmentTypeId || appointmentTypeId === payload.appointmentTypeID) ) { try { const appointmentDetails = await getAppointmentDetails( payload.id.toString(), context.auth.access_token, ); return [appointmentDetails]; } catch (error) { console.error(`Failed to fetch appointment details for ID ${payload.id}:`, error); return []; } } else { console.log('Received webhook for non-scheduled event or missing ID:', payload.action); return []; } }, sampleData: { id: 12345, firstName: 'John', lastName: 'Doe', email: 'john.doe@example.com', phone: '555-1234', date: '2023-12-01', time: '10:00 AM', datetime: '2023-12-01T10:00:00-0500', endTime: '11:00 AM', datetimeCreated: '2023-11-28T14:30:00-0500', appointmentTypeID: 101, calendarID: 1, notes: 'First appointment.', price: '50.00', paid: 'yes', status: 'scheduled', }, });

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