Files
twenty/packages/twenty-apps/community/meeting-transcript
Charles BochetandGitHub d9eb317bb5 feat: rename RICH_TEXT_V2 → RICH_TEXT in codebase (keep DB value) (#18628)
## 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)
2026-03-13 19:07:55 +01:00
..
2025-11-21 14:10:51 +01:00
2025-11-21 14:10:51 +01:00
2025-11-21 14:10:51 +01:00
2025-11-21 14:10:51 +01:00
2025-11-21 14:10:51 +01:00
2025-11-21 14:10:51 +01:00

🧠 AI-Powered Meeting Transcript to CRM Data Integration


Overview

This feature automatically transforms meeting transcripts into structured CRM data using AI. When unstructured meeting notes are received via a webhook, the system processes them and creates organized notes, tasks, and assignments directly in Twenty CRM.


Key Features

  • 🤖 AI-Powered Analysis: Extracts summaries, action items, assignees, and due dates from natural language transcripts.

  • 🗂 Smart Task Consolidation: Merges related sub-tasks into unified deliverables (e.g., "draft" + "review" + "present" → one consolidated task).

  • 🧑‍🤝‍🧑 Intelligent Assignment: Uses GraphQL member lookup to match extracted assignee names to workspace member IDs with flexible string matching.

  • 🔗 Automatic Linking: Links generated notes and tasks to relevant contacts using noteTargets and taskTargets.

  • 📅 Date Parsing: Converts relative date expressions (e.g., “next Monday”, “end of week”) into ISO-formatted dates for accurate scheduling.


Requirements

  • Twenty CLI - Install globally: npm install -g twenty-cli
  • Twenty CRM instance with API access
  • API key from Settings > API & Webhooks
  • OpenAI API key or compatible service (Groq, etc.)

Installation

  1. Authenticate with Twenty CLI:

    twenty auth login
    
  2. Configure environment variables:

    Copy .env.example to .env and fill in your credentials:

    cp .env.example .env
    

    Required environment variables:

    • AI_PROVIDER_API_KEY: Your OpenAI or Groq API key
    • TWENTY_API_KEY: Generated from your Twenty CRM instance
    • TWENTY_API_URL: Your Twenty CRM instance URL (e.g., https://your-instance.twenty.com)
    • WEBHOOK_SECRET_TOKEN: Secret token for webhook authentication
    • AI_PROVIDER_API_BASE_URL: Base URL for OpenAI-compatible API (defaults to https://api.openai.com/v1)
  3. Install dependencies:

    yarn install
    
  4. Deploy to your Twenty workspace:

    twenty app sync
    

Configuration

Using Groq Instead of OpenAI

To use Groq's API (which is compatible with OpenAI's SDK), set:

AI_PROVIDER_API_BASE_URL=https://api.groq.com/openai/v1
AI_PROVIDER_API_KEY=your-groq-api-key

Using OpenAI

To use OpenAI's official API:

AI_PROVIDER_API_BASE_URL=https://api.openai.com/v1
AI_PROVIDER_API_KEY=your-openai-api-key

🔗 Webhook Setup (inside Twenty)

Navigate to: Twenty → Workspace Settings → APIs & Webhook → + New Webhook

Field Value
Method POST
URL your deployed endpoint URL
Secret Generate one & store same in .env

Usage

Send a POST request to your webhook endpoint with the following payload:

{
  "transcript": "During the Project Phoenix Kick-off on November 1st, 2025...",
  "meetingTitle": "Project Phoenix Kick-off",
  "meetingDate": "2025-11-01",
  "participants": [
    "Brian Chesky",
    "Dario Amodei",
    "Iqra Khan"
  ],
  "token": "your-webhook-secret-token",
  "relatedPersonId": "person-uuid-from-crm"
}

Response

{
  "success": true,
  "noteId": "note-uuid",
  "taskIds": ["task-uuid-1", "task-uuid-2"],
  "summary": {
    "noteCreated": true,
    "tasksCreated": 2,
    "actionItemsProcessed": 2,
    "commitmentsProcessed": 0
  },
  "executionLogs": [
    "✅ Validation passed",
    "🤖 Starting transcript analysis...",
    "✅ Analysis complete"
  ]
}

Technical Stack

Component Description
AI Provider Groq (via OpenAI SDK) using the GPT-OSS-20B model
APIs Twenty CRM REST API + GraphQL (for member resolution)
Runtime Webhook-triggered serverless function written in TypeScript

Development

Build

yarn build

Type Check

yarn type-check

Environment Variables

Variable Required Secret Description
AI_PROVIDER_API_KEY Yes Yes API key for OpenAI-compatible service
TWENTY_API_KEY Yes Yes Twenty CRM API authentication token
TWENTY_API_URL Yes No Base URL for Twenty CRM instance
WEBHOOK_SECRET_TOKEN Yes Yes Secret for webhook request validation
AI_PROVIDER_API_BASE_URL No No Base URL for AI service (defaults to OpenAI)

Demo Preview

The demo below shows the full workflow where a raw meeting transcript is processed and automatically converted into structured Notes + Tasks inside Twenty CRM.

Process-Transcript Screenshot

process

Demo Video

Watch Demo Video