Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions apps/docs/content/docs/en/integrations/fathom.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,14 @@ List recent meetings recorded by the user or shared to their team.
| `includeTranscript` | string | No | Include meeting transcript \(true/false\) |
| `includeActionItems` | string | No | Include action items \(true/false\) |
| `includeCrmMatches` | string | No | Include linked CRM matches \(true/false\) |
| `includeHighlights` | string | No | Include meeting highlights \(true/false\) |
| `createdAfter` | string | No | Filter meetings created after this ISO 8601 timestamp |
| `createdBefore` | string | No | Filter meetings created before this ISO 8601 timestamp |
| `recordedBy` | string | No | Filter by recorder email address |
| `teams` | string | No | Filter by team name |
| `meetingType` | string | No | Filter by meeting type name |
| `calendarInviteesDomains` | string | No | Filter by calendar invitee company domain \(exact match\) |
| `calendarInviteesDomainsType` | string | No | Filter by invitee domain type: all, only_internal, or one_or_more_external |
| `cursor` | string | No | Pagination cursor from a previous response |

#### Output
Expand All @@ -58,11 +62,90 @@ List recent meetings recorded by the user or shared to their team.
| --------- | ---- | ----------- |
| `meetings` | array | List of meetings |
| ↳ `title` | string | Meeting title |
| ↳ `meeting_title` | string | Calendar event title |
| ↳ `meeting_type` | string | Meeting type name |
| ↳ `recording_id` | number | Unique recording ID |
| ↳ `url` | string | URL to view the meeting |
| ↳ `meeting_url` | string | URL of the underlying video call \(Zoom, Meet, Teams, etc.\) |
| ↳ `share_url` | string | Shareable URL |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `scheduled_start_time` | string | Scheduled start time |
| ↳ `scheduled_end_time` | string | Scheduled end time |
| ↳ `recording_start_time` | string | Recording start time |
| ↳ `recording_end_time` | string | Recording end time |
| ↳ `transcript_language` | string | Transcript language |
| ↳ `calendar_invitees_domains_type` | string | Invitee domain type: only_internal or one_or_more_external |
| ↳ `shared_with` | string | Sharing scope: no_teams, single_team, multiple_teams, or all_teams |
| ↳ `recorded_by` | object | Recorder details |
| ↳ `name` | string | Name of the recorder |
| ↳ `email` | string | Email of the recorder |
| ↳ `email_domain` | string | Email domain of the recorder |
| ↳ `team` | string | Recorder team name |
| ↳ `calendar_invitees` | array | Calendar invitees for the meeting |
| ↳ `name` | string | Invitee name |
| ↳ `email` | string | Invitee email |
| ↳ `email_domain` | string | Invitee email domain |
| ↳ `is_external` | boolean | Whether the invitee is external |
| ↳ `matched_speaker_display_name` | string | Matched transcript speaker display name |
| ↳ `default_summary` | object | Meeting summary |
| ↳ `template_name` | string | Summary template name |
| ↳ `markdown_formatted` | string | Markdown-formatted summary |
| ↳ `transcript` | array | Transcript entries with speaker, text, and timestamp |
| ↳ `speaker` | object | Speaker information |
| ↳ `display_name` | string | Speaker display name |
| ↳ `matched_calendar_invitee_email` | string | Matched calendar invitee email |
| ↳ `text` | string | Transcript text |
| ↳ `timestamp` | string | Timestamp \(HH:MM:SS\) |
| ↳ `action_items` | array | Action items extracted from the meeting |
| ↳ `description` | string | Action item description |
| ↳ `user_generated` | boolean | Whether the action item was user-generated |
| ↳ `completed` | boolean | Whether the action item is completed |
| ↳ `recording_timestamp` | string | Timestamp in the recording \(HH:MM:SS\) |
| ↳ `recording_playback_url` | string | Playback URL for the action item moment |
| ↳ `assignee` | object | Assignee details |
| ↳ `name` | string | Assignee name |
| ↳ `email` | string | Assignee email |
| ↳ `team` | string | Assignee team |
| ↳ `highlights` | array | Meeting highlights with type, summary, text, and start/end time |
| ↳ `type` | string | Highlight type |
| ↳ `summary` | string | Highlight summary |
| ↳ `text` | string | Highlight text |
| ↳ `start_time` | number | Start time in seconds |
| ↳ `end_time` | number | End time in seconds |
| ↳ `crm_matches` | object | Matched CRM contacts, companies, and deals |
| ↳ `contacts` | array | Matched CRM contacts |
| ↳ `name` | string | Contact name |
| ↳ `email` | string | Contact email |
| ↳ `record_url` | string | CRM record URL |
| ↳ `companies` | array | Matched CRM companies |
| ↳ `name` | string | Company name |
| ↳ `record_url` | string | CRM record URL |
| ↳ `deals` | array | Matched CRM deals |
| ↳ `name` | string | Deal name |
| ↳ `amount` | number | Deal amount |
| ↳ `record_url` | string | CRM record URL |
| ↳ `error` | string | CRM match error, if any |
| `next_cursor` | string | Pagination cursor for next page |

### `fathom_list_meeting_types`

List meeting types configured in your Fathom organization.

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Fathom API Key |
| `cursor` | string | No | Pagination cursor from a previous response |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `meetingTypes` | array | List of meeting types |
| ↳ `name` | string | Meeting type name |
| ↳ `status` | string | Meeting type status: active or inactive |
| ↳ `created_at` | string | Date the meeting type was created |
| `next_cursor` | string | Pagination cursor for next page |

### `fathom_get_summary`
Expand Down
62 changes: 61 additions & 1 deletion apps/sim/blocks/blocks/fathom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export const FathomBlock: BlockConfig<FathomResponse> = {
type: 'dropdown',
options: [
{ label: 'List Meetings', id: 'fathom_list_meetings' },
{ label: 'List Meeting Types', id: 'fathom_list_meeting_types' },
{ label: 'Get Summary', id: 'fathom_get_summary' },
{ label: 'Get Transcript', id: 'fathom_get_transcript' },
{ label: 'List Team Members', id: 'fathom_list_team_members' },
Expand Down Expand Up @@ -83,6 +84,17 @@ export const FathomBlock: BlockConfig<FathomResponse> = {
value: () => 'false',
condition: { field: 'operation', value: 'fathom_list_meetings' },
},
{
id: 'includeHighlights',
title: 'Include Highlights',
type: 'dropdown',
options: [
{ label: 'No', id: 'false' },
{ label: 'Yes', id: 'true' },
],
value: () => 'false',
condition: { field: 'operation', value: 'fathom_list_meetings' },
},
{
id: 'createdAfter',
title: 'Created After',
Expand Down Expand Up @@ -128,14 +140,47 @@ export const FathomBlock: BlockConfig<FathomResponse> = {
},
mode: 'advanced',
},
{
id: 'meetingType',
title: 'Meeting Type',
type: 'short-input',
placeholder: 'Filter by meeting type name',
condition: { field: 'operation', value: 'fathom_list_meetings' },
mode: 'advanced',
},
{
id: 'calendarInviteesDomains',
title: 'Invitee Domain',
type: 'short-input',
placeholder: 'Filter by calendar invitee company domain',
condition: { field: 'operation', value: 'fathom_list_meetings' },
mode: 'advanced',
},
{
id: 'calendarInviteesDomainsType',
title: 'Invitee Domain Type',
type: 'dropdown',
options: [
{ label: 'All', id: 'all' },
{ label: 'Only Internal', id: 'only_internal' },
{ label: 'One or More External', id: 'one_or_more_external' },
],
condition: { field: 'operation', value: 'fathom_list_meetings' },
mode: 'advanced',
},
{
id: 'cursor',
title: 'Pagination Cursor',
type: 'short-input',
Comment thread
waleedlatif1 marked this conversation as resolved.
placeholder: 'Cursor from a previous response',
condition: {
field: 'operation',
value: ['fathom_list_meetings', 'fathom_list_team_members', 'fathom_list_teams'],
value: [
'fathom_list_meetings',
'fathom_list_meeting_types',
'fathom_list_team_members',
'fathom_list_teams',
],
},
mode: 'advanced',
},
Expand All @@ -162,6 +207,7 @@ export const FathomBlock: BlockConfig<FathomResponse> = {
tools: {
access: [
'fathom_list_meetings',
'fathom_list_meeting_types',
'fathom_get_summary',
'fathom_get_transcript',
'fathom_list_team_members',
Expand All @@ -187,17 +233,31 @@ export const FathomBlock: BlockConfig<FathomResponse> = {
type: 'string',
description: 'Include linked CRM matches in meetings response',
},
includeHighlights: {
type: 'string',
description: 'Include highlights in meetings response',
},
createdAfter: { type: 'string', description: 'Filter meetings created after this timestamp' },
createdBefore: {
type: 'string',
description: 'Filter meetings created before this timestamp',
},
recordedBy: { type: 'string', description: 'Filter by recorder email' },
teams: { type: 'string', description: 'Filter by team name' },
meetingType: { type: 'string', description: 'Filter by meeting type name' },
calendarInviteesDomains: {
type: 'string',
description: 'Filter by calendar invitee company domain',
},
calendarInviteesDomainsType: {
type: 'string',
description: 'Filter by invitee domain type',
},
cursor: { type: 'string', description: 'Pagination cursor for next page' },
},
outputs: {
meetings: { type: 'json', description: 'List of meetings' },
meetingTypes: { type: 'json', description: 'List of meeting types' },
template_name: { type: 'string', description: 'Summary template name' },
markdown_formatted: { type: 'string', description: 'Markdown-formatted summary' },
transcript: { type: 'json', description: 'Meeting transcript entries' },
Expand Down
6 changes: 5 additions & 1 deletion apps/sim/lib/integrations/integrations.json
Original file line number Diff line number Diff line change
Expand Up @@ -5086,6 +5086,10 @@
"name": "List Meetings",
"description": "List recent meetings recorded by the user or shared to their team."
},
{
"name": "List Meeting Types",
"description": "List meeting types configured in your Fathom organization."
},
{
"name": "Get Summary",
"description": "Get the call summary for a specific meeting recording."
Expand All @@ -5103,7 +5107,7 @@
"description": "List teams in your Fathom organization."
}
],
"operationCount": 5,
"operationCount": 6,
"triggers": [
{
"id": "fathom_new_meeting",
Expand Down
2 changes: 2 additions & 0 deletions apps/sim/tools/fathom/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { getSummaryTool } from '@/tools/fathom/get_summary'
import { getTranscriptTool } from '@/tools/fathom/get_transcript'
import { listMeetingTypesTool } from '@/tools/fathom/list_meeting_types'
import { listMeetingsTool } from '@/tools/fathom/list_meetings'
import { listTeamMembersTool } from '@/tools/fathom/list_team_members'
import { listTeamsTool } from '@/tools/fathom/list_teams'

export const fathomGetSummaryTool = getSummaryTool
export const fathomGetTranscriptTool = getTranscriptTool
export const fathomListMeetingsTool = listMeetingsTool
export const fathomListMeetingTypesTool = listMeetingTypesTool
export const fathomListTeamMembersTool = listTeamMembersTool
export const fathomListTeamsTool = listTeamsTool

Expand Down
96 changes: 96 additions & 0 deletions apps/sim/tools/fathom/list_meeting_types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import type {
FathomListMeetingTypesParams,
FathomListMeetingTypesResponse,
} from '@/tools/fathom/types'
import type { ToolConfig } from '@/tools/types'

export const listMeetingTypesTool: ToolConfig<
FathomListMeetingTypesParams,
FathomListMeetingTypesResponse
> = {
id: 'fathom_list_meeting_types',
name: 'Fathom List Meeting Types',
description: 'List meeting types configured in your Fathom organization.',
version: '1.0.0',

params: {
apiKey: {
type: 'string',
required: true,
visibility: 'user-only',
description: 'Fathom API Key',
},
cursor: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Pagination cursor from a previous response',
},
},

request: {
url: (params) => {
const url = new URL('https://api.fathom.ai/external/v1/meeting_types')
if (params.cursor) url.searchParams.append('cursor', params.cursor)
return url.toString()
},
method: 'GET',
headers: (params) => ({
'X-Api-Key': params.apiKey,
'Content-Type': 'application/json',
}),
},

transformResponse: async (response: Response) => {
if (!response.ok) {
const errorData = await response.json().catch(() => ({}))
return {
success: false,
error:
(errorData as Record<string, string>).message ||
`Fathom API error: ${response.status} ${response.statusText}`,
output: {
meetingTypes: [],
next_cursor: null,
},
}
}

const data = await response.json()
const meetingTypes = (data.items ?? []).map(
(meetingType: { name?: string; status?: string; created_at?: string }) => ({
name: meetingType.name ?? '',
status: meetingType.status ?? '',
created_at: meetingType.created_at ?? '',
})
)

return {
success: true,
output: {
meetingTypes,
next_cursor: data.next_cursor ?? null,
},
}
},

outputs: {
meetingTypes: {
type: 'array',
description: 'List of meeting types',
items: {
type: 'object',
properties: {
name: { type: 'string', description: 'Meeting type name' },
status: { type: 'string', description: 'Meeting type status: active or inactive' },
created_at: { type: 'string', description: 'Date the meeting type was created' },
},
},
},
next_cursor: {
type: 'string',
description: 'Pagination cursor for next page',
optional: true,
},
},
}
Loading
Loading