Skip to main content
Glama

mcp-google-sheets

new-transcription.ts3.56 kB
import { createTrigger, PiecePropValueSchema, TriggerStrategy, } from '@activepieces/pieces-framework'; import { AuthenticationType, DedupeStrategy, httpClient, HttpMethod, Polling, pollingHelper, } from '@activepieces/pieces-common'; import { twilioAuth } from '../..'; interface Transcription { sid: string; status: string; date_created: string; recording_sid: string; duration: string; price: string; price_unit: string; transcription_text: string; } interface TranscriptionsResponse { transcriptions: Transcription[]; 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}/Transcriptions.json?PageSize=${ isTest ? 10 : 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 TranscriptionsResponse; const transcriptions = payload.transcriptions ?? []; for (const recording of transcriptions) { const ts = new Date(recording.date_created).getTime(); if (recording.status !== 'completed') continue; if (isTest || ts > lastFetchEpochMS) { results.push(recording); } else { stop = true; break; } } if (isTest) break; currentUri = payload?.next_page_uri ?? null; } while (currentUri && !stop); return results.map((recording) => { return { epochMilliSeconds: new Date(recording.date_created).getTime(), data: recording, }; }); }, }; export const twilioNewTranscription = createTrigger({ auth: twilioAuth, name: 'new_transcription', displayName: 'New Transcription', description: 'Triggers when a new call recording transcription is completed.', props: {}, sampleData: { "account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "api_version": "2008-08-01", "date_created": "Thu, 25 Aug 2011 20:59:45 +0000", "date_updated": "Thu, 25 Aug 2011 20:59:45 +0000", "duration": "10", "price": "0.00000", "price_unit": "USD", "recording_sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "sid": "TRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "status": "completed", "transcription_text": null, "type": "fast", "uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions/TRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json" }, 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