Files
twenty/packages/twenty-apps/community/fireflies/CHANGELOG.md
T
Alex Galey b578ea5951 Fireflies app reached beta : utilities to ingest one or many meetings - No production webhook without headers forwarding (#16410)
# 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
2025-12-09 09:27:01 +01:00

10 KiB

Changelog

[0.3.1] - 2025-12-08

Import all

Added

  • Historical import CLI: yarn meeting:all to fetch and insert historical Fireflies meetings with filters (date range, organizers, participants, channel, mine) and dry-run support.
  • Fireflies transcripts listing with pagination and date filtering to support bulk imports.

Changed

  • Deduplication now checks firefliesMeetingId before creating meetings (webhook + bulk).
  • Shared historical importer pipeline reusing existing note/meeting formatting.

[0.3.0] - 2025-12-08

Subscription-based query / Full transcript and AI notes for Pro+ / More

Added

  • Full transcript capture: Meeting object now stores the complete meeting transcript with speaker names and timestamps (transcript field)
  • Rich AI meeting notes: Captures detailed AI-generated meeting notes from Fireflies (notes field with 7,000+ char summaries)
  • Expanded summary fields: Now fetches all available Fireflies summary data:
    • notes - Detailed AI-generated meeting notes with timestamps and section headers
    • bullet_gist - Emoji-enhanced bullet point summaries
    • outline / shorthand_bullet - Timestamped meeting outline
    • gist - One-sentence meeting summary
    • short_summary - Single paragraph summary
    • short_overview - Brief overview
  • New Meeting fields:
    • transcript - Full meeting transcript with speaker attribution
    • notes - AI-generated detailed notes
    • audioUrl - Link to audio recording (Pro+)
    • videoUrl - Link to video recording (Business+)
    • meetingLink - Original meeting link
    • neutralPercent - Neutral sentiment percentage
  • Meeting delete utility: New yarn meeting:delete <meetingId> script for cleanup and re-import
  • Debug meeting utility: New scripts/debug-meeting.ts to inspect raw Fireflies API responses

Changed

  • Plan-based GraphQL queries: Completely redesigned query system with three tiers:
    • Free: Basic fields only (title, date, duration, participants, transcript_url, meeting_link)
    • Pro: Adds full transcript (sentences), summary fields, speakers, audio_url
    • Business+: Adds analytics, video_url, speaker stats, meeting metrics
  • Action items parsing: Fixed parsing of action_items which Fireflies returns as newline-separated string, not array
  • Note body format: Enhanced with Meeting Notes, Outline, Key Points sections from rich Fireflies data
  • Import status: Added PARTIAL status for imports missing summary/analytics data

Fixed

  • Missing notes and bullet_gist fields in data transform (were fetched but not passed through)
  • Proper fallback: Uses shorthand_bullet when outline is empty (Fireflies stores outline content there)
  • Summary readiness detection now checks notes field in addition to overview and action_items

Documentation

  • Updated README with complete API access comparison table by subscription plan
  • Documented all available Fireflies summary fields and their plan requirements

[0.2.3] - 2025-12-06

Added

  • Meeting ingest utility: New yarn meeting:ingest <meetingId> script to manually fetch and import specific Fireflies meetings into Twenty
  • Plan-based field selection: Added FIREFLIES_PLAN configuration to control which GraphQL fields are requested based on subscription level (free, pro, business, enterprise)
  • Main entry point: New src/index.ts centralizing all exports for cleaner imports

Changed

  • Auth configuration: Disabled authentication requirement for webhook route (isAuthRequired: false) to support serverless deployments
  • Signature verification fallback: Webhook handler now supports signature in payload body as fallback when HTTP headers aren't forwarded to serverless functions (production doesn't work for Fireflies webhook)
  • Improved type safety: Replaced any types with proper TypeScript types throughout codebase

Enhanced

  • Webhook debugging: Added detailed debug output including param keys, header info, and signature comparison details
  • Test webhook script: Includes signature in both header and payload, with diagnostic output for header forwarding status
  • Documentation: Added README sections on current twenty headers forward limitations and utility scripts

[0.2.2] - 2025-11-04

Added

  • Enhanced logging system: Introduced configurable AppLogger class with log level support (debug, info, warn, error, silent)
    • Environment-based log level configuration via LOG_LEVEL environment variable
    • Test environment detection to prevent log noise during testing
    • Context-aware logging with proper prefixes for better debugging
  • Improved error handling: Enhanced webhook signature verification with detailed debug logging
  • Better debugging capabilities: Added comprehensive logging throughout webhook processing pipeline

Enhanced

  • Webhook signature verification: Improved signature validation with detailed logging for troubleshooting
  • Error messages: More descriptive error logging for failed operations and security violations
  • Development experience: Better debugging information for webhook processing and API interactions

[0.2.1] - 2025-11-03

Added

  • Import status tracking: Added four new meeting fields to track import status and failure handling:
    • importStatus (SELECT) - Tracks SUCCESS, FAILED, PENDING, RETRYING states
    • importError (TEXT) - Stores error messages when imports fail
    • lastImportAttempt (DATE_TIME) - Timestamp of the last import attempt
    • importAttempts (NUMBER) - Counter for number of import attempts
  • Automatic failure tracking: Enhanced webhook handler to automatically create failed meeting records when processing fails
  • Failed meeting formatter: Added toFailedMeetingCreateInput() method to create standardized failed meeting records

Enhanced

  • Meeting type definition: Extended MeetingCreateInput type with import tracking fields
  • Success status tracking: Successful meeting imports now automatically set importStatus: 'SUCCESS' and track timestamps
  • Error handling: Webhook processing failures are now captured and stored as meeting records for visibility and potential retry

[0.2.0] - 2025-11-03

Changed

  • Major refactoring: Split monolithic receive-fireflies-notes.ts into modular architecture:
    • fireflies-api-client.ts - Fireflies GraphQL API integration with retry logic
    • twenty-crm-service.ts - Twenty CRM operations (contacts, notes, meetings)
    • formatters.ts - Meeting and note body formatting
    • webhook-handler.ts - Main webhook orchestration
    • webhook-validator.ts - HMAC signature verification
    • utils.ts - Shared utility functions
    • types.ts - Centralized type definitions
  • Schema update: Changed Meeting notes field from RICH_TEXT to RELATION type linking to Note object
  • Enhanced participant extraction from multiple Fireflies API data sources (participants, meeting_attendees, speakers, meeting_attendance)
  • Improved organizer email matching with name-based heuristics
  • Updated note creation to use bodyV2.markdown format instead of legacy body field
  • Modernized Meeting object schema with proper link field types for transcriptUrl and recordingUrl
  • Enhanced test suite with improved mocking for new modular structure
  • Configuration optimization: Reduced default retry attempts from 30 to 5 with increased delay (120s) to better respect Fireflies API rate limits (50 requests/day for free/pro plans)
  • Updated field setup script to support relation field creation with Note object
  • Restructured exports: types now exported from types.ts, runtime functions from index.ts
  • Updated import paths in action handlers to use centralized index exports
  • Added TypeScript path mappings for twenty-sdk in workspace configuration

Added

  • createNoteTarget method for linking notes to multiple participants
  • Support for extracting participants from extended Fireflies API response formats
  • Better organizer identification logic matching email usernames to speaker names
  • axios dependency for improved HTTP client capabilities
  • API subscription plan documentation highlighting rate limit differences (50/day vs 60/minute)
  • Enhanced README with rate limiting guidance and configuration documentation
  • Relation field creation support in field provisioning script

Fixed

  • Note linking now properly associates a single note with multiple participants in 1:1 meetings
  • Participant extraction handles missing email addresses gracefully
  • Improved handling of various Fireflies participant data structures
  • Test mocks updated to use string format for participants ("Name <email>") matching Fireflies API response format
  • Test assertions updated to validate bodyV2.markdown instead of deprecated body field

[0.1.0] - 2025-11-02

Added

  • HMAC SHA-256 signature verification for incoming Fireflies webhooks
  • Fireflies GraphQL client with retry logic, timeout handling, and summary readiness detection
  • Summary-focused meeting processing that extracts action items, sentiment, keywords, and transcript/recording links
  • Scripted custom field provisioning via yarn setup:fields
  • Local webhook testing workflow via yarn test:webhook
  • Comprehensive Jest suite (15 tests) covering authentication, API integration, summary strategies, and error handling

Changed

  • Replaced legacy JSON manifests with TypeScript configuration:
    • application.config.ts now declares app metadata and configuration variables
    • src/objects/meeting.ts defines the Meeting object via @ObjectMetadata
    • src/actions/receive-fireflies-notes.ts exports the Fireflies webhook action plus its runtime config
  • Updated documentation (README, Deployment Guide, Testing) to reflect the new project layout and workflows
  • Switched utility scripts to tsx and aligned package management with the hello-world example

Fixed

  • Resolved real-world Fireflies payload mismatch by adopting the minimal webhook schema
  • Replaced body-based secrets with header-driven HMAC verification
  • Ensured graceful degradation when summaries are pending or Fireflies is temporarily unavailable