Speak-Y 团队工作区的 投递 标签页在录音被分享到频道时做两件事:给你列出的地址发邮件,并向你指定的 URL 发送一个带签名的 POST 请求。两者携带的是同一小组事实:谁分享的、录音有多长、什么时候,以及是哪一条记录。两者都不包含摘要或转写。
这并不是功能缺失。频道内容采用端到端加密,所以发送邮件和 Webhook 的服务器从未见过正文。本指南介绍如何设置这两项、收件箱和你的端点究竟会收到什么、如何验证 X-Speaky-Signature 请求头,以及哪些频道在覆盖范围内。文中所有内容已于 2026 年 10 月 9 日对照应用和服务器核实。
它把新录音告知频道动态之外的人和系统。同事把一场会议分享到频道;服务器保存加密后的记录,然后通知两个目的地(如果已配置):
X-Speaky-Signature 请求头中用 HMAC SHA-256 签名。这些设置属于某一个工作区,而不是你的账户:每个工作区都有自己的收件人和自己的 Webhook。只有工作区所有者或管理员可以更改。普通成员看到的是只读的标签页,并附有提示“Only an owner or admin can change integrations.”(只有所有者或管理员可以更改集成)。

你需要 macOS 应用,并且在工作区中是所有者或管理员。
两个区块可以各自单独使用。以后要修改 Webhook,请重新输入 URL 和密钥——密钥不会预先填好,因为服务器不会把它返回。

是一则通知,不是会议摘要。邮件标题是“Speak-Y 有新的会议”(分享的是听写时则为“Speak-Y 有新的语音记录”),正文有三行信息和一个按钮:
| 邮件中的内容 | 示例 |
|---|---|
| 作者 | 分享这条录音的同事的姓名 |
| 时长 | 42 分钟 |
| 时间 | 2026/10/09 14:05 UTC |
| 按钮 | 在 Speak-Y 中打开 — 在 macOS 应用中打开这条录音 |
按钮下方,邮件说得很直白:“录音采用端到端加密,因此本通知仅包含元数据。”频道名称和工作区名称也不在邮件里——它们同样是加密的,服务器并不知道。
在向团队承诺这封邮件之前,有两个细节值得了解:

每条新录音对应一个 POST 请求,带有 Content-Type: application/json、请求头 X-Speaky-Event: team_record.created,请求体如下:
{
"event": "team_record.created",
"workspace_id": "5b0e7c1e-2f4d-4a57-9d0a-6f1b2c3d4e5f",
"channel_id": "c1a2b3c4-d5e6-47f8-9a0b-1c2d3e4f5a6b",
"record_id": "8F2C1D7A-3B4E-4C5D-9E6F-0A1B2C3D4E5F",
"created_by": "0d9c8b7a-6e5f-4d3c-2b1a-0f9e8d7c6b5a",
"meta": { "duration_s": 2520, "kind": "meeting" },
"server_created_at": "2026-10-09T14:05:12+00:00",
"protocol_version": 2,
"sent_at": "2026-10-09T14:05:12.480113+00:00"
}
meta.kind 的取值是 meeting 或 dictation,meta.duration_s 是以秒为单位的时长。其余的都是标识符或时间戳。没有标题,没有发言人列表,没有摘要,也没有频道名称:你的端点得知的是某处发生了某件事,而不是说了什么。
对常见用途来说这已经够了——团队聊天里的一行消息、跟踪工具里的一条记录、按频道统计会议数量的计数器。请自己维护一张把 channel_id 对应到可读名称的表。要注意,聊天工具的传入 Webhook 无法直接接收这个请求:例如 Slack 的 Incoming Webhook 期望的是带 text 字段的 JSON 请求体,所以你需要一个小型中转服务,由它验证签名并重新组织消息格式。
X-Speaky-Signature 请求头的格式是 sha256=<hex>。它的值是对 原始请求体 计算的 HMAC SHA-256,密钥就是你在投递标签页中输入的那个。用 Python 写的接收端:
import hashlib
import hmac
def is_from_speaky(secret: str, raw_body: bytes, header: str) -> bool:
digest = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(f"sha256={digest}", header)
请对收到的原始字节计算签名,一个字节都不要改动。如果框架先解析了 JSON,而你又把它重新序列化,键的顺序和空白会发生变化,签名就对不上了。
发送方的几个特性决定了接收端该怎么写:
record_id 忽略已经处理过的请求,用 sent_at 丢弃过期的请求。
整个工作区,只有一个例外。覆盖范围卡片上写着“该工作区任意频道有新记录时都会触发投递”,而且没有按频道筛选的功能。在客户频道很活跃的工作区里,被通知的不会只有每周例会。
这个例外就是私密频道:分享到私密频道的录音不会在任何地方被通知——没有邮件,也没有 Webhook。卡片会列出你能看到的频道,包括带锁图标的私密频道,但服务器会跳过它们。原因在于,设置投递的是所有者或管理员,而他未必是那个私密频道的成员;就连“那里录了点什么”这个事实,也不该由他收到。如何把频道划分为公开和私密,见团队频道中谁能看到什么。
个人录音完全不在这一切的范围内。在你亲自把录音分享到频道之前,没有任何东西会离开你的资料库。
因为那样服务器就必须读到它。在 Speak-Y 中,录音在上传之前就在 Mac 上用频道密钥加密,而频道密钥只存在于成员的设备上——端到端加密的团队共享如何运作讲解了其中的机制。一台能把摘要放进邮件的服务器,也就是一台能读取每个频道的服务器。
按相反思路构建的工具确实会发送内容;如果收件箱里的摘要对你来说比端到端加密更重要,这就是选择它们的正当理由。以下情况核实于 2026 年 10 月 9 日:
meeting.transcribed 事件携带会议 ID,并用 HMAC SHA-256 签名——但内容随后要从 Fireflies 的 API 获取,因为服务商以可读形式保存这些内容。如果你需要一份应用之外的可读副本,请有意识地去制作,而不是依靠通知:无需专人记录的每周会议纪要介绍了导出到 Confluence 或 Google Drive 的做法,而 Speak-Y MCP 服务器 可以让成员 Mac 上的 AI 助手读取该成员本来就能打开的录音。
团队工作区可在 Speak-Y macOS 应用中使用:创建工作区从 Pro 套餐开始,队友在任意套餐上都可免费加入。Speak-Y Teams 页面展示了共享频道如何运作。
不会。Email delivery 发送的是有新会议被分享到频道的通知:作者、时长、时间,外加一个“在 Speak-Y 中打开”按钮。频道采用端到端加密,因此服务器没有可以放进邮件的摘要或转写。正文要在应用里阅读。
一个 JSON POST 请求,事件为 team_record.created,只包含标识符:workspace_id、channel_id、record_id、created_by,meta 中的记录类型和时长,以及两个时间戳。其中没有转写,没有摘要,也没有频道或工作区的名称。
用你的 Webhook 密钥对原始请求体计算 HMAC SHA-256,转成十六进制,并在前面加上 sha256=。用恒定时间比较把结果与 X-Speaky-Signature 请求头对比,而且要在解析 JSON 之前完成。
分享到工作区任意公开频道的每一条新录音。没有按频道筛选的功能。私密频道永远不会被通知,无论是邮件还是 Webhook;个人录音也永远不会离开你的资料库。
工作区所有者或管理员,在 macOS 应用的工作区页面的投递标签页中设置。普通成员看到的是同一个标签页的只读版本。