Skip to main content
Glama
create-transcription.ts5.48 kB
import { createAction, Property } from '@activepieces/pieces-framework'; import { HttpMethod } from '@activepieces/pieces-common'; import { gladiaAuth } from '../common/auth'; import { makeRequest } from '../common/client'; import { languageDropdownOptions } from '../common/props'; export const createTranscription = createAction({ auth: gladiaAuth, name: 'createTranscription', displayName: 'Create Transcription', description: 'Initiate a pre-recorded transcription job from an audio or video URL', props: { audio_url: Property.LongText({ displayName: 'Audio URL', description: 'URL to a Gladia file or to an external audio or video file', required: true, }), languages: Property.StaticDropdown({ displayName: 'Language', description: 'Select the language spoken in the audio for better transcription accuracy', required: false, options: { options: languageDropdownOptions, }, }), code_switching: Property.Checkbox({ displayName: 'Enable Code Switching', description: 'Enable code switching to handle multiple languages in the audio', required: false, defaultValue: false, }), subtitles: Property.Checkbox({ displayName: 'Enable Subtitles', description: 'Enable subtitles generation for this transcription', required: false, defaultValue: false, }), subtitles_format: Property.Dropdown({ displayName: 'Subtitles Format', description: 'Select the subtitle format(s) for transcription output', required: false, refreshers: ['subtitles'], options: async ({ subtitles }) => { if (!subtitles) { return { disabled: true, options: [], placeholder: 'Enable subtitles to select type', }; } return { disabled: false, options: [ { label: 'SRT', value: 'srt' }, { label: 'VTT', value: 'vtt' }, ], }; }, }), diarization: Property.Checkbox({ displayName: 'Enable Diarization', description: 'Enable speaker recognition (diarization) for this audio', required: false, defaultValue: false, }), translation: Property.Checkbox({ displayName: 'Enable Translation', description: 'Enable translation for this audio', required: false, defaultValue: false, }), summarization: Property.Checkbox({ displayName: 'Enable Summarization', description: 'Enable summarization for this audio', required: false, defaultValue: false, }), summarization_type: Property.Dropdown({ displayName: 'Summarization Type', description: 'Choose the type of summarization to apply. ', required: false, refreshers: ['summarization'], options: async ({ summarization }) => { if (!summarization) { return { disabled: true, options: [], placeholder: 'Enable summarization to select type', }; } return { disabled: false, options: [ { label: 'General', value: 'general' }, { label: 'Bullet Points', value: 'bullet_points' }, { label: 'Concise', value: 'concise' }, ], }; }, }), sentiment_analysis: Property.Checkbox({ displayName: 'Enable Sentiment Analysis', description: 'Enable sentiment analysis for this audio', required: false, defaultValue: false, }), sentences: Property.Checkbox({ displayName: 'Enable Sentences', description: 'Enable sentence detection for this audio', required: false, defaultValue: false, }), custom_metadata: Property.Object({ displayName: 'Custom Metadata', description: 'Add custom metadata to the transcription job', required: false, }), }, async run(context) { const apiKey = context.auth as string; const { audio_url, languages, code_switching, subtitles, subtitles_format, diarization, translation, summarization, summarization_type, sentiment_analysis, sentences, custom_metadata, } = context.propsValue; const body: Record<string, unknown> = { audio_url, sentences, }; if (languages) { body['language_config'] = { language: languages, code_switching }; } if (subtitles) { body['subtitles'] = subtitles; if (subtitles_format && subtitles_format.length > 0) { body['subtitles_config'] = { formats: subtitles_format }; } } if (diarization) { body['diarization'] = diarization; } if (translation) { body['translation'] = translation; } if (summarization) { body['summarization'] = summarization; if (summarization_type) { body['summarization_config'] = { type: summarization_type }; } } if (sentiment_analysis) { body['sentiment_analysis'] = sentiment_analysis; } if (custom_metadata) { body['custom_metadata'] = custom_metadata; } const response = await makeRequest( apiKey, HttpMethod.POST, '/pre-recorded', body ); const transcription = await makeRequest( apiKey, HttpMethod.GET, `/pre-recorded/${response.id}` ); return transcription; }, });

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