@firefliesai/fireflies-node-sdk

中文文档
1.2.1发布于 2026/10/12MITTypeScriptESM + CJS构建来源已验证近 30 天下载 2025

萤火虫的节点.js SDK.ai API

中文使用文档
文档目录26 节
  1. 安装
  2. 快速启动
  3. 环境变量
  4. 特征
  5. API 参考
  6. 用户方法
  7. 转写方法
  8. 会议管理
  9. 现场会议
  10. 问Fred
  11. 频道、联系人和用户组
  12. 分析、审计日志和规则
  13. 方法
  14. 音频上传
  15. 高级特性
  16. 为多个用户获取会话
  17. 费率限制
  18. 自动重试
  19. 检查当前状态
  20. 处理错误
  21. 实例
  22. 发展
  23. 捐款
  24. 贷项
  25. 许可证
  26. 支助

萤火虫.ai 节点.js SDK

一个与萤火虫互动的节点.js SDK.ai GraphQL API. 这个SDK提供了一个简单的接口来访问萤火虫. ai的会议记录和分析功能.

安装

npm install @firefliesai/fireflies-node-sdk
# or
yarn add @firefliesai/fireflies-node-sdk

快速启动

const { FirefliesSDK } = require("@firefliesai/fireflies-node-sdk");
// Or using ES modules:
// import { FirefliesSDK } from '@firefliesai/fireflies-node-sdk';

const fireflies = new FirefliesSDK({
  apiKey: process.env.FIREFLIES_API_KEY,
});

async function main() {
  try {
    // Get current user info - see docs.fireflies.ai for all available fields
    const userInfo = await fireflies.getCurrentUser(["email", "name"]);
    console.log("User:", userInfo);

    // Get recent transcripts - see docs.fireflies.ai for all available fields
    const transcripts = await fireflies.getTranscripts(
      { limit: 10, mine: true },
      ["id", "title"]
    );
    console.log("Recent transcripts:", transcripts);
  } catch (error) {
    console.error("Error:", error.message);
  }
}

main();

环境变量

创建一个 .env 在工程根中的文件 :

FIREFLIES_API_KEY=your_api_key_here

特征

SDK覆盖了其中的每个操作 公共图形QL API数字 :

  • 用户和团队: 当前用户,用户通过ID,所有用户,设置用户角色,用户组及其成员
  • 语录: 列表(所有有记录的过滤器)并获取、删除、更新标题、隐私和频道、共享和取消访问
  • 上传: 从公共 URL 上传, 或直接上传本地文件, 并带有预先签名的 URL
  • 现场会议: 将萤火虫添加到会议中, 列出正在举行的会议, 暂停和恢复录制, 现场动作项目和声音
  • 问Fred:询问关于一次会议或跨次会议的问题、后续行动、清单、读取和删除线索
  • 贝斯(声贝): 创建、列表、获取
  • 频道和联系人: 列表频道,获取频道,列表联系人
  • 分析、审计记录和规则:团队和每个用户分析、审计事件、规则处决
  • 大赦国际应用程序: 应用输出
  • 限制费率意识: 自动、有界重试 429 编号 : too_many_requests 荣誉 Retry-After; 批次帮助从 X-RateLimit-* 页眉; 解析状态于 sdk.rateLimit
  • 多用户助手: 在多个API 密钥上获取和复制会议

返回对象的方法选择 fields 数组(要选择的 GraphQL 字段, 如 字符串,包含嵌入式选择). 当您没有通过时, 方法会选择一个合理的默认集 .

API 参考

关于现有字段和计划资料的完整清单,请参见: 官方的Filflies.ai文档。 。 。 .

用户方法

// Get current user - see docs.fireflies.ai for all available fields
await fireflies.getCurrentUser(["email", "name"]);

// Get user by ID - see docs.fireflies.ai for all available fields
await fireflies.getUser("user_id", ["email", "name"]);

// Set user role
await fireflies.setUserRole("user_id", "admin");

转写方法

// Get transcripts - see docs.fireflies.ai for all available fields
await fireflies.getTranscripts({ limit: 50, mine: true }, [
  "id",
  "title",
  "privacy",
]);

// Get single transcript - see docs.fireflies.ai for all available fields
await fireflies.getTranscript("transcript_id", ["id", "title"]);

// Delete transcript
await fireflies.deleteTranscript("transcript_id");

// Get meetings for multiple users with deduplication
const meetings = await FirefliesSDK.getMeetingsForMultipleUsers(
  ["api-key-1", "api-key-2"],
  ["id", "title", "duration", "summary { keywords action_items }"],
  "json" // or 'console' for console output
);

// Find questions from external participants
const { externalParticipants, questions } =
  await fireflies.findExternalParticipantQuestions("@yourcompany.com");
console.log("External Participants:", externalParticipants);
console.log("Questions:", questions);

// Get video URLs from meetings
const meetings = await fireflies.getMeetingVideos();
meetings.forEach((meeting) => {
  if (meeting.video_url) {
    console.log(`Meeting: ${meeting.title}\nVideo URL: ${meeting.video_url}\n`);
  }
});

// Get transcript summary
const summary = await fireflies.getTranscriptSummary("transcript_id");
console.log("Overview:", summary.overview);
console.log("Action Items:", summary.action_items);
console.log("Keywords:", summary.keywords);

会议管理

await fireflies.updateMeetingTitle({ id: "transcript_id", title: "Q3 planning" });
await fireflies.updateMeetingPrivacy({ id: "transcript_id", privacy: "teammates" });
await fireflies.updateMeetingChannel({ transcript_ids: ["t1", "t2"], channel_id: "channel_id" });

// Share with up to 50 people, optionally expiring after 7, 14 or 30 days
await fireflies.shareMeeting({ meeting_id: "transcript_id", emails: ["[email protected]"], expiry_days: 14 });
await fireflies.revokeSharedMeetingAccess({ meeting_id: "transcript_id", email: "[email protected]" });

// Search transcripts by keyword in titles and sentences
await fireflies.getTranscripts({ keyword: "pricing", scope: "all", fromDate: "2026-01-01T00:00:00.000Z" }, ["id", "title"]);

现场会议

const meetings = await fireflies.getActiveMeetings({ states: ["active"] });

await fireflies.updateMeetingState({ meeting_id: meetings[0].id, action: "pause_recording" });
await fireflies.createLiveActionItem({ meeting_id: meetings[0].id, prompt: "Send the deck to the client" });
await fireflies.createLiveSoundbite({ meeting_id: meetings[0].id, prompt: "The pricing discussion" });
const items = await fireflies.getLiveActionItems(meetings[0].id);

问Fred

const { message } = await fireflies.createAskFredThread({
  query: "What did we decide about the launch date?",
  transcript_id: "transcript_id", // or `filters` to search across meetings
});
console.log(message.answer);

const followUp = await fireflies.continueAskFredThread({ thread_id: message.thread_id, query: "Who owns it?" });

const threads = await fireflies.getAskFredThreads();
const thread = await fireflies.getAskFredThread(message.thread_id);
await fireflies.deleteAskFredThread(message.thread_id);

频道、联系人和用户组

const channels = await fireflies.getChannels();
const channel = await fireflies.getChannel("channel_id");
const contacts = await fireflies.getContacts();

const groups = await fireflies.getUserGroups({ mine: true });
await fireflies.addUserToUserGroup({ group_id: "group_id", user_email: "[email protected]" });
await fireflies.removeUserFromUserGroup({ group_id: "group_id", user_email: "[email protected]" });

分析、审计日志和规则

// Pass fields to choose what to return; see docs.fireflies.ai/graphql-api/query/analytics
const analytics = await fireflies.getAnalytics({ start_time: "2026-09-01T00:00:00Z" });

// Paginate with next_cursor
let cursor;
do {
  const page = await fireflies.getAuditEvents({ filters: { category: "MEETING_OPERATIONS" }, cursor });
  page.events.forEach((event) => console.log(event.time, event.action));
  cursor = page.has_more ? page.next_cursor : undefined;
} while (cursor);

const executions = await fireflies.getRuleExecutionsByMeeting({ limit: 10, filters: { is_test: false } });

方法

// Get bites - see docs.fireflies.ai for all available fields
await fireflies.getBites({ mine: true, limit: 10 }, ["id", "name", "status"]);

// Create bite
await fireflies.createBite({
  transcript_id: "transcript_id",
  start_time: 120,
  end_time: 180,
});

音频上传

从公开的 HTTPS URL 中 :

await fireflies.uploadAudio({
  url: "https://example.com/audio.mp3",
  title: "Meeting Recording",
  custom_language: "en",
});

来自本地文件, 并预签上传 URL :

const fs = require("fs");

const file = fs.readFileSync("recording.mp3");
const { upload_url, meeting_id } = await fireflies.createUploadUrl({
  content_type: "audio/mpeg",
  file_size: file.length,
  title: "Meeting Recording",
});

const put = await fetch(upload_url, { method: "PUT", headers: { "Content-Type": "audio/mpeg" }, body: file });
if (!put.ok) throw new Error(`Upload failed: ${put.status}`);
await fireflies.confirmUpload(meeting_id);

高级特性

为多个用户获取会话

SDK提供了一个强大的功能,可以获取和复制多个用户的会议:

const meetings = await FirefliesSDK.getMeetingsForMultipleUsers(
  ["api-key-1", "api-key-2", "api-key-3"],
  [
    "id",
    "title",
    "duration",
    "date",
    "host_email",
    "organizer_email",
    "summary { keywords action_items overview }",
  ],
  "json" // Output results to JSON files
);

// Results are also returned in the response
for (const [apiKey, result] of Object.entries(meetings)) {
  console.log(`API Key ${apiKey.split("-")[0]}:`);
  console.log(`- Meetings found: ${result.meetings.length}`);
  console.log(`- Errors encountered: ${result.errors.length}`);
}

这种方法 :

  • 为多个用户使用 API 密钥获取会议
  • 重复会议,以确保每次会议只分配给一个用户
  • 从 API 分批处理请求 X-RateLimit-Remaining 编号 : X-RateLimit-Reset 信头( 回落到 5 个请求, 然后当信头缺席时暂停 5 s)
  • 支持控制台输出和 JSON 文件输出
  • 处理优雅的错误并提供详细的错误报告

当使用"json"输出时,结果被保存到:

  • RESULTS_{api-key}.json: 包含每个 API 密钥的会议
  • ERRORS_{api-key}.json: 包含每个 API 密钥遇到的任何错误

费率限制

萤火虫API按计划执行限制(每个计划每分钟限制一次,每天限制配额) Free and Pro; Business and Entertainment 将其每分钟的预算汇集到整个团队). 数字 和规则维持在 API 文档的限定页 - SDK车 从来没有硬代码。 反之

页眉含义
X-RateLimit-Limit窗口大小
X-RateLimit-Remaining请求留在窗口
X-RateLimit-Reset秒到窗口重排
Retry-After在一个 429 只: 在重试前等待秒

后缀变种 (X-RateLimit-*-api, (中文(简体) ), X-RateLimit-*-api_burst,)描述每个窗口 单独分析.

自动重试

与 HTTP 拒绝的请求 429,或带有 GraphQL 错误 extensions.code 实值 too_many_requests,在服务器要求的等待后重审: Retry-After 页眉,或 失败 extensions.metadata.retryAfter (时间戳入) 毫秒) (中文(简体) ). SDK这个 永远不要提前复试 —— 在窗口重新打开前重试 , 并且永远不要等待 比起来 maxRetryWaitMs因此,每天耗尽的配额 立即浮出水面 而不是阻挡你的 进程时间.

const fireflies = new FirefliesSDK({
  apiKey: process.env.FIREFLIES_API_KEY,
  rateLimit: {
    maxRetries: 3, // default; 0 disables retries
    maxRetryWaitMs: 65_000, // default; longer waits are surfaced as an error instead
    onRateLimited: ({ attempt, waitMs }) =>
      console.warn(`Rate limited, retry ${attempt} in ${waitMs} ms`),
  },
});

当复试被用完时 拒绝呼叫 FirefliesRateLimitError数字 :

const { FirefliesRateLimitError } = require("@firefliesai/fireflies-node-sdk");

try {
  await fireflies.getTranscripts({ limit: 50 }, ["id"]);
} catch (error) {
  if (error instanceof FirefliesRateLimitError) {
    console.error(`Rate limited. Retry after ${error.retryAfter}s (at ${error.retryAt})`);
    console.error("Window that rejected the request:", error.rateLimit);
  }
}

检查当前状态

sdk.rateLimit 持有从API的答复中累积的费率限制状态(或 null 第一次选举之前 (第1个) 每个窗口都合并了每个响应,所以一个窗口的最新响应没有报告 (说 call_join ) 保留在旧旧的重置中,直到它 过期。 用它来抑制自己的循环:

await fireflies.getCurrentUser(["email"]);
const state = fireflies.rateLimit; // null until a response carried the headers
if (state) {
  console.log(`${state.remaining}/${state.limit} requests left, window resets in ${state.reset}s`);
  console.log("Per-minute burst window:", state.windows.api_burst);
}

getMeetingsForMultipleUsers 财务报告和审定财务报表 MeetingsHelper.batchProcess 每个大小使用相同的状态 批次和等待出一个空窗口。 过 { rateLimitSource: sdk } 调用时 batchProcess 直接,和 concurrency 编号 : fallbackDelayMs 编号 : maxWaitMs 来调音. 将一个端点按下自己的极限, 例如 addToLiveMeeting传出 windows: ['default', 'api', 'api_burst', 'call_join'] 所以它的配额也封顶了批量.

处理错误

SDK使用标准节点.js错误处理:

const { FirefliesRateLimitError } = require("@firefliesai/fireflies-node-sdk");

try {
  const transcripts = await fireflies.getTranscripts();
} catch (error) {
  if (error instanceof FirefliesRateLimitError) {
    console.error(`Rate limited, retry after ${error.retryAfter}s`);
  } else if (error.message.includes("API Error")) {
    console.error("Fireflies API Error:", error.message);
  } else {
    console.error("Network or other error:", error);
  }
}

实例

检查 实例 更多使用示例的目录.

发展

# Install dependencies
npm install

# Run tests
npm test

# Build package
npm run build

捐款

  1. 叉子存储器
  2. 创建您的特性分支( E)git checkout -b feature/amazing-feature(中文(简体) )
  3. 提交更改( E)git commit -m 'Add amazing feature'(中文(简体) )
  4. 推向分行(git push origin feature/amazing-feature(中文(简体) )
  5. 打开拉请求

贷项

许可证

麻省理工学院

支助

版本与发布记录

@firefliesai/fireflies-node-sdk 共发布 5 个版本,首次发布于 2025/04/25;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.2.1latest2026/10/121 个月前
1.1.32025/05/021.5 年前
1.1.22025/04/301.5 年前
1.1.12025/04/251.6 年前
1.1.02025/04/251.6 年前

关于 @firefliesai/fireflies-node-sdk 的常见问题

@firefliesai/fireflies-node-sdk 是什么?

萤火虫的节点.js SDK.ai API

如何安装 @firefliesai/fireflies-node-sdk?

在项目目录运行 npm install @firefliesai/fireflies-node-sdk,或使用 pnpm add / yarn add / bun add。

@firefliesai/fireflies-node-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@firefliesai/fireflies-node-sdk 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@firefliesai/fireflies-node-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=14.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@firefliesai/fireflies-node-sdk 可以商用吗?

@firefliesai/fireflies-node-sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@firefliesai/fireflies-node-sdk 的下载量有多少?

根据 npm 官方下载统计,@firefliesai/fireflies-node-sdk 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,025 次,日均约 68 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@firefliesai/fireflies-node-sdk 还在维护吗?

最新版本 1.2.1 发布于 2026/10/12(1 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 1 个;首次发布于 2025/04/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。