网淘吧来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Fathom

2026-03-25 新闻来源:网淘吧 围观:51
电脑广告
手机广告
购买adidas上京东官方旗舰店。

Fathom

通过托管的OAuth身份验证访问Fathom API。获取会议录音、转录文本、摘要、行动项,并管理用于接收通知的Webhook。

快速开始

# 列出最近的会议
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

基础URL

https://gateway.maton.ai/fathom/{native-api-path}

替换{native-api-path}为实际的Fathom API端点路径。网关将请求代理至api.fathom.ai并自动注入您的OAuth令牌。

上网淘巴领天猫淘宝优惠券,一年省好几千。

身份验证

所有请求都需要在Authorization头部中包含Maton API密钥:

Authorization: Bearer $MATON_API_KEY

环境变量:将您的API密钥设置为MATON_API_KEY

export MATON_API_KEY="YOUR_API_KEY"

获取您的API密钥

  1. 登录或创建账户maton.ai
  2. 前往maton.ai/settings
  3. 复制您的API密钥

连接管理

在以下地址管理您的Fathom OAuth连接:https://ctrl.maton.ai

列出连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=fathom&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

创建连接

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'fathom'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

获取连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "connection": {
    "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
    "status": "ACTIVE",
    "creation_time": "2025-12-08T07:20:53.488460Z",
    "last_updated_time": "2026-01-31T20:03:32.593153Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "fathom",
    "metadata": {}
  }
}

打开返回的url在浏览器中完成OAuth授权。

删除连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

指定连接

如果您有多个Fathom连接,可通过Maton-Connection请求头指定要使用的连接:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

如果省略此请求头,网关将使用默认的(最早创建的)活跃连接。

API参考

会议

列出会议

GET /fathom/external/v1/meetings

查询参数:

  • cursor- 用于分页的光标
  • created_after- 筛选在此时间戳之后创建的会议(例如:2025-01-01T00:00:00Z)
  • 创建时间早于- 筛选在此时间戳之前创建的会议
  • 日历参与者域名[]- 按公司域名筛选(每个值传递一次)
  • 日历参与者域名类型- 按参与者类型筛选:全部,仅内部,一个或多个外部
  • 录制者[]- 按录制会议的用户邮箱地址筛选
  • 团队[]- 按团队名称筛选

注意:OAuth用户无法使用包含转录文本,include_summary,include_action_items, 或include_crm_matches参数。请改用/recordings/{recording_id}/summary/recordings/{recording_id}/transcript端点。

使用过滤器的示例:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings?created_after=2025-01-01T00:00:00Z&teams[]=Sales')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "limit": 10,
  "next_cursor": "eyJwYWdlX251bSI6Mn0=",
  "items": [
    {
      "title": "季度业务回顾",
      "meeting_title": "2025年第一季度QBR",
      "recording_id": 123456789,
      "url": "https://fathom.video/xyz123",
      "share_url": "https://fathom.video/share/xyz123",
      "created_at": "2025-03-01T17:01:30Z",
      "scheduled_start_time": "2025-03-01T16:00:00Z",
      "scheduled_end_time": "2025-03-01T17:00:00Z",
      "recording_start_time": "2025-03-01T16:01:12Z",
      "recording_end_time": "2025-03-01T17:00:55Z",
      "calendar_invitees_domains_type": "one_or_more_external",
      "transcript_language": "en",
      "transcript": null,
      "default_summary": null,
      "action_items": null,
      "crm_matches": null,
      "recorded_by": {
        "name": "爱丽丝·约翰逊",
        "email": "alice.johnson@acme.com",
        "email_domain": "acme.com",
        "team": "市场营销部"
      },
      "calendar_invitees": [
        {
          "name": "爱丽丝·约翰逊",
          "email": "alice.johnson@acme.com",
          "email_domain": "acme.com",
          "is_external": false,
          "matched_speaker_display_name": null
        }
      ]
    }
  ]
}

录制内容

获取摘要

GET /fathom/external/v1/recordings/{recording_id}/summary

查询参数:

  • destination_url- 用于异步回调的可选URL。如果提供,摘要将通过POST请求发送至此URL。

同步示例:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/recordings/123456789/summary')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "summary": {
    "template_name": "general",
    "markdown_formatted": "## 摘要\n\n我们回顾了第一季度OKR,识别了预算风险,并同意下个月重新审视预测。"
  }
}

异步示例:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/recordings/123456789/summary?destination_url=https://example.com/webhook')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

获取转录文本

GET /fathom/external/v1/recordings/{recording_id}/transcript

查询参数:

  • destination_url- 用于异步回调的可选URL。如果提供,转录文本将通过POST请求发送至此URL。

同步示例:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/recordings/123456789/transcript')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "transcript": [
    {
      "speaker": {
        "display_name": "Alice Johnson",
        "matched_calendar_invitee_email": "alice.johnson@acme.com"
      },
      "text": "让我们重新审视一下预算分配。",
      "timestamp": "00:05:32"
    }
  ]
}

团队

列出团队

GET /fathom/external/v1/teams

查询参数:

  • 游标- 用于分页的游标

示例:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/teams')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "limit": 25,
  "next_cursor": null,
  "items": [
    {
      "name": "Sales",
      "created_at": "2023-11-10T12:00:00Z"
    }
  ]
}

团队成员

列出团队成员

GET /fathom/external/v1/team_members

查询参数:

  • 游标- 用于分页的游标
  • 团队- 用于筛选的团队名称

示例:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/team_members?team=Sales')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "limit": 25,
  "next_cursor": null,
  "items": [
    {
      "name": "Bob Lee",
      "email": "bob.lee@acme.com",
      "created_at": "2024-06-01T08:30:00Z"
    }
  ]
}

Webhooks

创建Webhook

POST /fathom/external/v1/webhooks
Content-Type: application/json

{
  "destination_url": "https://example.com/webhook",
  "triggered_for": ["my_recordings", "my_shared_with_team_recordings"],
  "include_transcript": true,
  "include_summary": true,
  "include_action_items": true,
  "include_crm_matches": false
}

triggered_for 选项:

  • my_recordings- 您的私人录制(不包括与团队计划中的团队共享的录制)
  • shared_external_recordings- 其他用户与您共享的录制
  • my_shared_with_team_recordings- (团队计划)您与团队共享的录制
  • shared_team_recordings- (团队计划)您团队计划中其他用户的录制

至少需要包含以下一项:include_transcriptinclude_summaryinclude_action_itemsinclude_crm_matches必须为 true。

示例:

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'destination_url': 'https://example.com/webhook', 'triggered_for': ['my_recordings'], 'include_summary': True}).encode()
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/webhooks', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "id": "ikEoQ4bVoq4JYUmc",
  "url": "https://example.com/webhook",
  "secret": "whsec_x6EV6NIAAz3ldclszNJTwrow",
  "created_at": "2025-06-30T10:40:46Z",
  "include_transcript": false,
  "include_crm_matches": false,
  "include_summary": true,
  "include_action_items": false,
  "triggered_for": ["my_recordings"]
}

删除 Webhook

DELETE /fathom/external/v1/webhooks/{id}

示例:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/webhooks/ikEoQ4bVoq4JYUmc', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

成功时返回204 No Content

分页

使用cursor进行分页。当存在更多结果时,响应会包含next_cursor

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings?cursor=eyJwYWdlX251bSI6Mn0=')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

代码示例

JavaScript

const response = await fetch(
  'https://gateway.maton.ai/fathom/external/v1/meetings?created_after=2025-01-01T00:00:00Z',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const data = await response.json();

Python

import os
import requests

response = requests.get(
    'https://gateway.maton.ai/fathom/external/v1/meetings',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
    params={'created_after': '2025-01-01T00:00:00Z'}
)
data = response.json()

注意事项

  • 录音ID为整数
  • 时间戳采用ISO 8601格式
  • 转录文本和摘要为英文
  • Webhook密钥用于验证Webhook签名
  • CRM匹配仅返回您或您团队关联的CRM中的数据
  • 重要提示:使用curl命令时,若URL包含方括号(curl -gfields[]sort[]records[]),请使用以禁用通配符解析
  • 重要提示:当将 curl 输出通过管道传递给jq或其他命令时,在某些 shell 环境中,像$MATON_API_KEY这样的环境变量可能无法正确展开。使用管道时,您可能会遇到“无效的 API 密钥”错误。

错误处理

状态码含义
400请求错误或缺少 Fathom 连接
401Maton API 密钥无效或缺失
404未找到资源
429请求频率受限
4xx/5xx来自 Fathom API 的透传错误

故障排除:API 密钥问题

  1. 检查MATON_API_KEY环境变量是否已设置:
echo $MATON_API_KEY
  1. 通过列出连接来验证 API 密钥是否有效:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

故障排除:无效的应用名称

  1. 确保您的 URL 路径以fathom开头。例如:
  • 正确:https://gateway.maton.ai/fathom/external/v1/meetings
  • 错误:https://gateway.maton.ai/external/v1/meetings

资源

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
上网淘巴领天猫淘宝优惠券,一年省好几千。

文章底部电脑广告
手机广告位-内容正文底部
上一篇:healthcheck 下一篇:Goplaces

相关文章

上网淘巴领天猫淘宝优惠券,一年省好几千。

广告  ×

您是本站第231015名访客 今日有16篇新文章/评论