Skip to main content
Glama

mcp-google-sheets

new-call.ts5.33 kB
import { createTrigger, TriggerStrategy, PiecePropValueSchema } from '@activepieces/pieces-framework'; import { twilioAuth } from '../..'; import { AuthenticationType, DedupeStrategy, httpClient, HttpMethod, Polling, pollingHelper } from '@activepieces/pieces-common'; interface Call { sid: string; status: string; direction: string; from: string; to: string; start_time: string; end_time: string; duration: string; price: string; price_unit: string; date_created:string } interface CallsResponse { calls: Call[]; next_page_uri:string } const polling: Polling< PiecePropValueSchema<typeof twilioAuth>, Record<string, unknown> > = { strategy: DedupeStrategy.TIMEBASED, async items({ auth, lastFetchEpochMS }) { const isTest = lastFetchEpochMS === 0; const account_sid = auth.username; const auth_token = auth.password; let currentUri: | string | null = `/2010-04-01/Accounts/${account_sid}/Calls.json?PageSize=${ isTest ? 1 : 1000 }`; const results = []; let stop = false; do { const response: any = await httpClient.sendRequest({ method: HttpMethod.GET, url: `https://api.twilio.com${currentUri}`, authentication: { type: AuthenticationType.BASIC, username: account_sid, password: auth_token, }, }); const payload = response.body as CallsResponse; const calls = payload.calls ?? []; for (const call of calls) { const ts = new Date(call.date_created).getTime(); if(call.status !== 'completed') continue; if (isTest || ts > lastFetchEpochMS) { results.push(call); } else { stop = true; break; } } if (isTest) break; currentUri = payload?.next_page_uri ?? null; } while (currentUri && !stop); return results.map((call) => { return { epochMilliSeconds: new Date(call.date_created).getTime(), data: call, }; }); }, }; export const twilioNewCall = createTrigger({ auth: twilioAuth, name: 'new_call', displayName: 'New Call', description: 'Triggers when a call completes (incoming or outgoing).', props: {}, sampleData:{ "account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "answered_by": "machine_start", "api_version": "2010-04-01", "caller_name": "callerid1", "date_created": "Fri, 18 Oct 2019 17:00:00 +0000", "date_updated": "Fri, 18 Oct 2019 17:01:00 +0000", "direction": "outbound-api", "duration": "4", "end_time": "Fri, 18 Oct 2019 17:03:00 +0000", "forwarded_from": "calledvia1", "from": "+13051416799", "from_formatted": "(305) 141-6799", "group_sid": "GPdeadbeefdeadbeefdeadbeefdeadbeef", "parent_call_sid": "CAdeadbeefdeadbeefdeadbeefdeadbeef", "phone_number_sid": "PNdeadbeefdeadbeefdeadbeefdeadbeef", "price": "-0.200", "price_unit": "USD", "sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "start_time": "Fri, 18 Oct 2019 17:02:00 +0000", "status": "completed", "subresource_uris": { "notifications": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Notifications.json", "recordings": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json", "payments": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Payments.json", "events": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Events.json", "siprec": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Siprec.json", "streams": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Streams.json", "transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/UserDefinedMessageSubscriptions.json", "user_defined_messages": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/UserDefinedMessages.json" }, "to": "+13051913581", "to_formatted": "(305) 191-3581", "trunk_sid": "TKdeadbeefdeadbeefdeadbeefdeadbeef", "uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json", "queue_time": "1000" }, type: TriggerStrategy.POLLING, async onEnable(context) { await pollingHelper.onEnable(polling, { auth: context.auth, store: context.store, propsValue: context.propsValue, }); }, async onDisable(context) { await pollingHelper.onDisable(polling, { auth: context.auth, store: context.store, propsValue: context.propsValue, }); }, async test(context) { return await pollingHelper.test(polling, context); }, async run(context) { return await pollingHelper.poll(polling, context); }, });

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