89c8d89330
Reverts twentyhq/twenty#15589 Add back without the breaking change
278 lines
10 KiB
Markdown
278 lines
10 KiB
Markdown
# Fireflies
|
|
|
|
Automatically captures meeting notes with AI-generated summaries and insights from Fireflies.ai into your Twenty CRM.
|
|
|
|
## Integration Overview
|
|
|
|
**Fireflies webhook → Fireflies API → Twenty CRM with summary-focused insights**
|
|
|
|
- **Summary-first approach** - Prioritizes action items, keywords, and sentiment over raw transcripts
|
|
- **HMAC signature verification** - Secure webhook authentication
|
|
- **Two-phase architecture** - Webhook notification → API data fetch → CRM record creation
|
|
- **Contact identification** - Matches participants to existing contacts or creates new ones
|
|
- **One-on-one meetings** (2 people) → Individual notes linked to each contact
|
|
- **Multi-party meetings** (3+ people) → Meeting records with all attendees
|
|
- **Business intelligence extraction** - Action items, sentiment scores, topics, meeting types
|
|
- **Smart retry logic** - Handles async summary generation with exponential backoff
|
|
- **Links transcripts and recordings** - Easy access to full Fireflies content
|
|
- **Duplicate prevention** - Checks for existing meetings by title
|
|
|
|
## API Access by Subscription Plan
|
|
|
|
Fireflies API access varies significantly by subscription tier:
|
|
|
|
| Feature | Free | Pro | Business | Enterprise |
|
|
|---------|------|-----|----------|------------|
|
|
| **API Rate Limit** | 50 requests/day | 50 requests/day | 60 requests/minute | 60 requests/minute |
|
|
| **Storage** | 800 mins/seat | 8,000 mins/seat | Unlimited | Unlimited |
|
|
| **AI Summaries** | Limited (20 credits) | Unlimited | Unlimited | Unlimited |
|
|
| **Video Upload** | 100MB max | 1.5GB max | 1.5GB max | 1.5GB max |
|
|
| **Advanced Features** | Basic transcription | AI apps, analytics | Team analytics, CI | Full API, SSO, compliance |
|
|
|
|
**Key Design Pattern:** Subscription-based API access uses **tiered rate limiting** rather than feature gating. Lower tiers get severely restricted throughput (50/day vs 60/minute = 1,700x difference), making production integrations effectively require Business+ plans.
|
|
|
|
**Pro Plan Limitation:** Despite "unlimited" AI summaries, the 50 requests/day limit severely constrains production usage for meeting-heavy organizations.
|
|
|
|
## What Gets Captured
|
|
|
|
### Summary & Insights
|
|
- **Action Items** - Concrete next steps and commitments
|
|
- **Keywords** - Key topics and themes discussed
|
|
- **Overview** - Executive summary of the meeting
|
|
- **Topics Discussed** - Main discussion points
|
|
- **Meeting Type** - Context (sales call, standup, demo, etc.)
|
|
|
|
### Analytics
|
|
- **Sentiment Analysis** - Positive/negative/neutral percentages for deal health
|
|
- **Engagement Metrics** - Participation levels (future)
|
|
|
|
### Resources
|
|
- **Transcript Link** - Quick access to full Fireflies transcript
|
|
- **Recording Link** - Video/audio recording when available
|
|
|
|
## Quick Start
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Step 1: Authenticate with Twenty
|
|
npx twenty-cli auth login
|
|
|
|
# Step 2: Sync the app to create Meeting object
|
|
npx twenty-cli app sync packages/twenty-apps/fireflies
|
|
|
|
# Step 3: Install dependencies
|
|
yarn install
|
|
|
|
# Step 4: Add custom fields
|
|
yarn setup:fields
|
|
```
|
|
|
|
(TODO: change when fields setup internal support)
|
|
|
|
### Configuration
|
|
|
|
⚠️ **Important**: The integration uses **conservative retry settings** to respect Fireflies' 50 requests/day API limit with free/pro plans. You may increase for more reactivity with higher plans.
|
|
|
|
**Required Environment Variables:**
|
|
```bash
|
|
FIREFLIES_API_KEY=your_api_key # From Fireflies settings
|
|
TWENTY_API_KEY=your_api_key # From Twenty CRM settings
|
|
SERVER_URL=https://your-domain.twenty.com
|
|
```
|
|
|
|
**Optional (Recommended):**
|
|
```bash
|
|
FIREFLIES_WEBHOOK_SECRET=your_secret # For webhook security
|
|
```
|
|
|
|
📖 **For detailed configuration, troubleshooting, and rate limit management**, see [WEBHOOK_CONFIGURATION.md](./WEBHOOK_CONFIGURATION.md)
|
|
|
|
### What Gets Created
|
|
|
|
#### Basic Installation (Step 2)
|
|
The `app sync` command creates:
|
|
- ✅ Meeting object with basic `name` field
|
|
- ✅ Webhook endpoint at `/s/webhook/fireflies`
|
|
|
|
#### After Custom Fields Setup (Step 4)
|
|
The `setup:fields` script adds 13 custom fields to store rich Fireflies data:
|
|
|
|
| Field Name | Type | Label | Description |
|
|
|------------|------|-------|-------------|
|
|
| `notes` | RICH_TEXT | Meeting Notes | AI-generated summary with overview, topics, action items, and insights |
|
|
| `meetingDate` | DATE_TIME | Meeting Date | Date and time when the meeting occurred |
|
|
| `duration` | NUMBER | Duration (minutes) | Meeting duration in minutes |
|
|
| `meetingType` | TEXT | Meeting Type | Type of meeting (e.g., Sales Call, Sprint Planning, 1:1) |
|
|
| `keywords` | TEXT | Keywords | Key topics and themes discussed (comma-separated) |
|
|
| `sentimentScore` | NUMBER | Sentiment Score | Overall meeting sentiment (0-1 scale, 1 = most positive) |
|
|
| `positivePercent` | NUMBER | Positive % | Percentage of positive sentiment in conversation |
|
|
| `negativePercent` | NUMBER | Negative % | Percentage of negative sentiment in conversation |
|
|
| `actionItemsCount` | NUMBER | Action Items | Number of action items identified |
|
|
| `transcriptUrl` | LINKS | Transcript URL | Link to full transcript in Fireflies |
|
|
| `recordingUrl` | LINKS | Recording URL | Link to video/audio recording in Fireflies |
|
|
| `firefliesMeetingId` | TEXT | Fireflies Meeting ID | Unique identifier from Fireflies |
|
|
| `organizerEmail` | TEXT | Organizer Email | Email address of the meeting organizer |
|
|
|
|
Then re-sync:
|
|
```bash
|
|
npx twenty-cli app sync
|
|
```
|
|
|
|
**Note:** Without custom fields, meetings will be created with just the title. The rich summary data will only be stored in Notes for 1-on-1 meetings.
|
|
|
|
## Configuration
|
|
|
|
### Required Environment Variables
|
|
|
|
Check [.env.example](./.env.example)
|
|
|
|
### Summary Processing Strategies
|
|
|
|
| Strategy | Description | Use Case |
|
|
|----------|-------------|----------|
|
|
| `immediate_only` | Single fetch attempt, no retries | Fast processing, accept missing summaries if not ready |
|
|
| `immediate_with_retry` | Attempts immediate fetch, retries with backoff | **Recommended** - Balances speed and reliability |
|
|
| `delayed_polling` | Schedules background polling | For heavily loaded systems |
|
|
| `basic_only` | Creates records without waiting for summaries | For basic transcript archival only |
|
|
|
|
## Webhook Setup
|
|
|
|
### Step 1: Get Your Webhook URL
|
|
|
|
Your webhook endpoint will be:
|
|
```
|
|
https://your-twenty-instance.com/s/webhook/fireflies
|
|
```
|
|
|
|
### Step 2: Configure Fireflies Webhook
|
|
|
|
1. Log into Fireflies.ai
|
|
2. https://app.fireflies.ai/settings#DeveloperSettings
|
|
4. Enter your webhook URL
|
|
5. Set **Secret**: Generate from there and set value of `FIREFLIES_WEBHOOK_SECRET`
|
|
6. Save configuration
|
|
|
|
### Step 3: Verify Webhook
|
|
|
|
The integration uses **HMAC SHA-256 signature verification**:
|
|
- Fireflies sends `x-hub-signature` header
|
|
- Twenty verifies signature using your webhook secret
|
|
- Invalid signatures are rejected immediately
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Run tests
|
|
npm test
|
|
|
|
# Run tests in watch mode
|
|
npm run test -- --watch
|
|
|
|
# Development mode with live sync
|
|
npx twenty-cli app dev
|
|
|
|
# Type checking
|
|
npx tsc --noEmit
|
|
```
|
|
|
|
## Testing
|
|
|
|
The integration includes comprehensive test coverage:
|
|
|
|
```bash
|
|
# Run all tests
|
|
npm test
|
|
|
|
# Run specific test suite
|
|
npm test -- fireflies-webhook.spec.ts
|
|
|
|
# Run with coverage
|
|
npm test -- --coverage
|
|
```
|
|
|
|
### Test Coverage
|
|
|
|
- HMAC signature verification
|
|
- Fireflies GraphQL API integration
|
|
- Summary processing with retry logic
|
|
- Summary-focused CRM record creation
|
|
- One-on-one vs multi-party meeting detection
|
|
- Contact matching and creation
|
|
- Duplicate prevention
|
|
- Error handling and resilience
|
|
|
|
## CRM Record Structure
|
|
|
|
### One-on-One Meeting Note Example
|
|
|
|
```markdown
|
|
# Meeting: Product Demo with Client (Sales Call)
|
|
|
|
**Date:** Monday, November 2, 2024, 02:00 PM
|
|
**Duration:** 30 minutes
|
|
**Participants:** Sarah Sales, John Client
|
|
|
|
## Overview
|
|
Successful product demonstration with positive client feedback.
|
|
Client expressed strong interest in the enterprise plan.
|
|
|
|
## Key Topics
|
|
- product features
|
|
- pricing discussion
|
|
- integration capabilities
|
|
- support options
|
|
|
|
## Action Items
|
|
- Follow up with pricing proposal by Friday
|
|
- Schedule technical deep-dive next week
|
|
- Share case studies from similar clients
|
|
|
|
## Insights
|
|
**Keywords:** product demo, pricing, technical requirements, integration
|
|
**Sentiment:** 75% positive, 10% negative, 15% neutral
|
|
**Meeting Type:** Sales Call
|
|
|
|
## Resources
|
|
[View Full Transcript](https://app.fireflies.ai/transcript/xxx)
|
|
[Watch Recording](https://app.fireflies.ai/recording/xxx)
|
|
```
|
|
|
|
### Multi-Party Meeting Record
|
|
|
|
- Meeting object with title, date, and all attendees
|
|
- Summary stored as meeting notes (structure same as above)
|
|
- Action items potentially converted to separate tasks (future)
|
|
- Keywords as tags/categories (future)
|
|
|
|
## Future Implementation Opportunities
|
|
|
|
### Past Meetings Retrieval
|
|
- **New trigger to retrieve past meetings from a contact** - Enable users to fetch historical meeting data from Fireflies for specific contacts, allowing retrospective capture and analysis of past interactions.
|
|
|
|
Next iteration would enhance the **intelligence layer** to:
|
|
|
|
### AI-Powered Insights
|
|
- **Extract pain points, objections & buying signals** automatically from transcripts
|
|
- **Calculate deal health scores** based on conversation sentiment trends
|
|
- **Auto-create contextualized tasks** with AI-suggested next steps and priorities
|
|
- **Proactively flag at-risk deals** when negative signals appear
|
|
- **Track conversation patterns** that correlate with deal success
|
|
|
|
### Enhanced Analytics
|
|
- **Action item completion tracking** across deals
|
|
- **Sentiment trend analysis** over time for account health
|
|
- **Speaking time analysis** for meeting engagement insights
|
|
- **Topic clustering** for product/feature interest patterns
|
|
|
|
### Workflow Automation
|
|
- **Auto-assign follow-up tasks** based on action items
|
|
- **Smart notifications** for urgent follow-ups
|
|
- **Deal stage progression** based on meeting outcomes
|
|
- **Competitive intelligence** extraction from conversations
|
|
|
|
**Integration**: Fireflies webhook → AI processing layer → Enhanced Twenty records
|
|
|
|
*This would require the current MVP to be stabilized and discussions about intelligence layer architecture and data privacy considerations.*
|
|
|