b578ea5951
# Fireflies Automatically (with cli util : webhook not working and no cron added) captures meeting notes with AI-generated summaries and insights from Fireflies.ai into your Twenty CRM. ## Current Status - Doesn't work with Fireflies webhook yet due to missing headers forwarding in twenty serverless func - Meeting ingestion utility script are available for individual meeting insertion and historical meetings with filters with yarn meeting:all - You have to push the secrets as application.config.ts values (despite env variables in .env in docker compose or container I couldn't push the secrets with the cli) ## Current Platform Limitation (Headers) - Twenty serverless route triggers currently do **not forward HTTP headers** to functions. Fireflies signatures sent in headers are stripped, so header-based verification does not work in production. - Workaround: the provided test script also includes the signature inside the payload; the handler falls back to that payload signature. Use this only for testing until header forwarding is supported. ## Utilities for meeting insertion (workarounds) - Ingest a specific Fireflies meeting into Twenty: `yarn meeting:ingest <meetingId>` or `MEETING_ID=... yarn meeting:ingest` - Fetch all/historical Fireflies meetings into Twenty: `yarn meeting:all [--from 2024-01-01] [--to 2024-02-01] [--organizer a@x.com] [--participant b@x.com] [--channel <channelId>] [--mine] [--dry-run]` - Filters (combine as needed): - `--from` / `--to`: ISO or date string range filter - `--organizer` / `--participant`: comma-separated emails - `--channel`: Fireflies channel id - `--mine`: only meetings for the current Fireflies user - Controls: - `--dry-run`: list and transform without writing to Twenty - `--page-size`: pagination size (default 50) - `--max-records`: stop after N transcripts (default 500) I am closing previous #16378 as this one includes it all
82 lines
3.0 KiB
TypeScript
82 lines
3.0 KiB
TypeScript
import { type ApplicationConfig } from 'twenty-sdk';
|
|
|
|
const config: ApplicationConfig = {
|
|
universalIdentifier: 'a4df0c0f-c65e-44e5-8436-24814182d4ac',
|
|
displayName: 'Fireflies',
|
|
description: 'Sync Fireflies meeting summaries, sentiment, and action items into Twenty.',
|
|
icon: 'IconMicrophone',
|
|
applicationVariables: {
|
|
FIREFLIES_WEBHOOK_SECRET: {
|
|
universalIdentifier: 'f51f7646-be9f-4ba9-9b75-160dd288cd0c',
|
|
description: 'Secret key for verifying Fireflies webhook signatures',
|
|
//isSecret: true,
|
|
value: '',
|
|
},
|
|
FIREFLIES_API_KEY: {
|
|
universalIdentifier: 'faa41f07-b28e-4500-b1c0-ce4b3d27924c',
|
|
description: 'Fireflies GraphQL API key used to fetch meeting summaries',
|
|
//isSecret: true,
|
|
value: '',
|
|
},
|
|
FIREFLIES_PLAN: {
|
|
universalIdentifier: '57dbb73c-aac5-4247-9fcc-a070bb669f16',
|
|
description: 'Fireflies plan: free, pro, business, enterprise',
|
|
value: 'free',
|
|
},
|
|
TWENTY_API_KEY: {
|
|
universalIdentifier: '02756551-5bf7-4fb2-8e08-1f622008d305',
|
|
description: 'Twenty API key used when running scripts locally',
|
|
//isSecret: true,
|
|
value: '',
|
|
},
|
|
SERVER_URL: {
|
|
universalIdentifier: '9b3a5e8e-5973-4e6b-a059-2966075652aa',
|
|
description: 'Base URL for the Twenty workspace (default: http://localhost:3000)',
|
|
value: 'http://localhost:3000',
|
|
},
|
|
AUTO_CREATE_CONTACTS: {
|
|
universalIdentifier: 'c4fa946e-e06b-4d54-afb6-288b0ac75bdf',
|
|
description: 'Whether to auto-create contacts for unknown participants',
|
|
value: 'true',
|
|
},
|
|
LOG_LEVEL: {
|
|
universalIdentifier: '2b019cf1-d198-48dd-943e-110571aa541e',
|
|
description: 'Log level: silent, error, warn, info, debug (default: error)',
|
|
value: 'error',
|
|
},
|
|
CAPTURE_LOGS: {
|
|
universalIdentifier: 'adbcc267-309d-49b2-af71-76f1299d863e',
|
|
description: 'Capture logs in webhook response for debugging (true/false)',
|
|
value: 'true',
|
|
},
|
|
FIREFLIES_SUMMARY_STRATEGY: {
|
|
universalIdentifier: '562b43d9-cd47-4ec1-ae16-5cc7ebc9729b',
|
|
description: 'Summary fetch strategy: immediate_only, immediate_with_retry, delayed_polling, or basic_only',
|
|
value: 'immediate_with_retry',
|
|
},
|
|
FIREFLIES_RETRY_ATTEMPTS: {
|
|
universalIdentifier: '670ca203-01ce-4ae8-8294-eb38b29434f2',
|
|
description: 'Number of retry attempts when fetching summaries',
|
|
value: '3',
|
|
},
|
|
FIREFLIES_RETRY_DELAY: {
|
|
universalIdentifier: '2e8ccb82-9390-47ba-b628-ca2726931bce',
|
|
description: 'Delay in milliseconds between retry attempts',
|
|
value: '5000',
|
|
},
|
|
FIREFLIES_POLL_INTERVAL: {
|
|
universalIdentifier: '904538f7-7bec-4ee6-9bac-5d43c619b667',
|
|
description: 'Polling interval (ms) when using delayed polling strategy',
|
|
value: '30000',
|
|
},
|
|
FIREFLIES_MAX_POLLS: {
|
|
universalIdentifier: '84d54c97-5572-4c01-9039-764ab3aa87b8',
|
|
description: 'Maximum number of polling attempts when waiting for summaries',
|
|
value: '10',
|
|
},
|
|
},
|
|
};
|
|
|
|
export default config;
|
|
|