## Summary - Renames the `FieldMetadataType` enum key from `RICH_TEXT_V2` to `RICH_TEXT` across the entire codebase, while keeping the underlying string value as `'RICH_TEXT_V2'` to maintain PostgreSQL database compatibility - Renames all related types, guards, hooks, components, and files from `*RichTextV2*` / `*rich-text-v2*` to `*RichText*` / `*rich-text*` (e.g. `FormRichTextV2FieldInput` → `FormRichTextFieldInput`, `isFieldRichTextV2` → `isFieldRichText`) - Updates generated files (GraphQL schema, SDK types) to use the new key while preserving the `RICH_TEXT_V2` string value for DB/API layer - Updates i18n locale files, test snapshots, and integration tests to reflect the rename ## Context The legacy `RICH_TEXT` (V1) field type was deprecated and migrated to `TEXT` in a previous PR (#18623). With V1 gone, the `RICH_TEXT_V2` naming is no longer necessary — `RICH_TEXT` is now the canonical name. The DB enum value stays `'RICH_TEXT_V2'` to avoid confusion with the just-deprecated V1 type and to prevent a database migration. ## Test plan - [x] `twenty-server` typecheck passes - [x] `twenty-front` typecheck passes (only pre-existing Apollo client errors remain) - [x] `twenty-server` lint passes - [x] `twenty-front` lint passes - [x] `twenty-shared` build passes - [ ] CI passes Made with [Cursor](https://cursor.com)
AI Meeting Transcript
Automatically process meeting transcripts to extract insights, action items, and follow-ups using AI.
Features
- Automatic Transcript Processing: Receives meeting transcripts via webhook from Granola or similar transcription tools
- AI-Powered Analysis: Uses OpenAI to extract:
- Meeting summary
- Key discussion points
- Action items with assignees and due dates
- Commitments made by participants
- Rich Note Creation: Creates formatted notes in Twenty with summary and key points
- Task Generation: Automatically creates tasks for action items and commitments, linked to the meeting note
Requirements
twenty-cli- Install globally:npm install -g twenty-cliapiKey- Go tohttps://twenty.com/settings/api-webhooksto generate oneOpenAI API Key- Get your API key from OpenAI
Installation
- Copy the environment file:
cp .env.example .env
-
Edit
.envand replace the placeholders:<SET_YOUR_TWENTY_API>with your Twenty API key<SET_YOUR_OPENAI_API_KEY>with your OpenAI API key
-
Install dependencies:
yarn install
- Sync the app to your Twenty workspace:
twenty auth login
twenty app sync
Configuration
After syncing, configure the environment variables in your Twenty workspace:
- Go to Settings → Apps → AI Meeting Transcript
- Set the following environment variables:
TWENTY_API_KEY- Your Twenty API keyTWENTY_API_URL- Your Twenty instance URL (e.g.,https://api.twenty.comorhttp://localhost:3000for local development)OPENAI_API_KEY- Your OpenAI API key
Important: TWENTY_API_URL is required and must be set to your Twenty instance URL. For local development, use http://localhost:3000. For production, use your actual Twenty instance URL.
Usage
Webhook Endpoint
The app exposes a public serverless route trigger.
POST /s/webhook/transcript
Examples:
- Local:
POST http://localhost:3000/s/webhook/transcript - Hosted:
POST https://your-twenty-instance.com/s/webhook/transcript
Webhook Payload Format
Send a POST request with the following JSON structure:
{
"transcript": "Full meeting transcript text here...",
"meetingTitle": "Q4 Planning Meeting",
"meetingDate": "2024-01-15",
"participants": ["John Doe", "Jane Smith"],
"metadata": {
"duration": "45 minutes",
"location": "Conference Room A"
}
}
Required Fields:
transcript(string): The full meeting transcript text
Optional Fields:
meetingTitle(string): Title of the meetingmeetingDate(string): Date of the meeting (ISO format or readable date)participants(string[]): List of meeting participantsmetadata(object): Additional metadata about the meeting
Example Webhook Call
curl -X POST https://your-twenty-instance.com/s/webhook/transcript \
-H "Content-Type: application/json" \
-d '{
"transcript": "John: Let'\''s start the meeting. Today we need to discuss Q4 goals. Jane: I agree. We should focus on customer retention. John: Great point. Can you prepare a report by Friday? Jane: Yes, I will have it ready.",
"meetingTitle": "Q4 Planning Meeting",
"meetingDate": "2024-01-15"
}'
What Happens
- Transcript Analysis: The transcript is sent to OpenAI for analysis
- Note Creation: A formatted note is created in Twenty with:
- Meeting summary
- Key discussion points
- Reference to the transcript source
- Task Creation: Tasks are automatically created for:
- Each action item identified
- Each commitment made by participants
- Tasks include a reference to the meeting note ID in their description
Development
Run dev mode to see application updates on your workspace instantly:
twenty app dev
Integration with Granola
To integrate with Granola or similar transcription tools:
- Set up a webhook in your transcription service
- Configure it to POST to:
https://your-twenty-instance.com/s/webhook/transcript - Map the transcription service's payload format to the expected format above
Granola Webhook Setup
If using Granola, configure the webhook to send:
transcriptfield with the transcript text- Optionally include meeting metadata fields
API Response
The webhook returns a JSON response:
{
"success": true,
"noteId": "uuid-of-created-note",
"taskIds": ["uuid-of-task-1", "uuid-of-task-2"],
"summary": {
"noteCreated": true,
"tasksCreated": 2,
"actionItemsProcessed": 1,
"commitmentsProcessed": 1
}
}