Speak-Y 投递功能:用邮件和 Webhook 通知团队新会议

Speak-Y 团队工作区的 投递 标签页在录音被分享到频道时做两件事:给你列出的地址发邮件,并向你指定的 URL 发送一个带签名的 POST 请求。两者携带的是同一小组事实:谁分享的、录音有多长、什么时候,以及是哪一条记录。两者都不包含摘要或转写。

这并不是功能缺失。频道内容采用端到端加密,所以发送邮件和 Webhook 的服务器从未见过正文。本指南介绍如何设置这两项、收件箱和你的端点究竟会收到什么、如何验证 X-Speaky-Signature 请求头,以及哪些频道在覆盖范围内。文中所有内容已于 2026 年 10 月 9 日对照应用和服务器核实。

投递标签页是做什么的?

它把新录音告知频道动态之外的人和系统。同事把一场会议分享到频道;服务器保存加密后的记录,然后通知两个目的地(如果已配置):

这些设置属于某一个工作区,而不是你的账户:每个工作区都有自己的收件人和自己的 Webhook。只有工作区所有者或管理员可以更改。普通成员看到的是只读的标签页,并附有提示“Only an owner or admin can change integrations.”(只有所有者或管理员可以更改集成)。

录音从同事的 Mac 到 Speak-Y 服务器,再到收件箱和 Webhook 端点
Mac 在分享之前就把录音加密了。服务器可以告知录音存在,但手里没有任何可读的内容可供转发。

如何设置?

你需要 macOS 应用,并且在工作区中是所有者或管理员。

  1. 打开工作区页面。 点击侧边栏中工作区名称旁边的 ⋯,选择 Edit workspace。
  2. 进入投递标签页。 它是第三个标签页,排在 Overview 和 Members 之后。
  3. 阅读“投递内容”卡片。 它列出了工作区的频道,让你在保存任何内容之前就看清范围。
  4. 填写 Webhook。 把你的地址粘贴到 Endpoint URL,并在 Webhook secret (HMAC) 中输入至少 8 个字符的密钥。在密钥足够长之前,Save webhook 按钮一直不可用。保存后,状态显示 Saved,标题旁出现 已配置 标记,密钥输入框被清空:应用不会再次显示密钥。
  5. 填写 Email delivery。 在 Recipients 中输入地址,用逗号分隔,然后点 Save email delivery。

两个区块可以各自单独使用。以后要修改 Webhook,请重新输入 URL 和密钥——密钥不会预先填好,因为服务器不会把它返回。

Speak-Y 工作区的投递标签页,包含覆盖范围卡片、Webhook 区块和 Email delivery 区块
1 — 会触发投递的频道。2 — Webhook 地址及其签名密钥。3 — 邮件收件人。

邮件里究竟有什么?

是一则通知,不是会议摘要。邮件标题是“Speak-Y 有新的会议”(分享的是听写时则为“Speak-Y 有新的语音记录”),正文有三行信息和一个按钮:

邮件中的内容 示例
作者 分享这条录音的同事的姓名
时长 42 分钟
时间 2026/10/09 14:05 UTC
按钮 在 Speak-Y 中打开 — 在 macOS 应用中打开这条录音

按钮下方,邮件说得很直白:“录音采用端到端加密,因此本通知仅包含元数据。”频道名称和工作区名称也不在邮件里——它们同样是加密的,服务器并不知道。

在向团队承诺这封邮件之前,有两个细节值得了解:

Speak-Y 投递邮件包含的内容:作者、时长、时间,以及一个打开应用的按钮
三项事实加一个按钮。摘要、转写,甚至频道名称,都留在加密的频道里。

Webhook 发送什么?

每条新录音对应一个 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,而你又把它重新序列化,键的顺序和空白会发生变化,签名就对不上了。

发送方的几个特性决定了接收端该怎么写:

接收 Speak-Y Webhook 的服务要做的五项检查
对原始字节验证签名,用恒定时间比较,快速响应,按 record_id 去重,不要把 Webhook 当作队列。

哪些频道在覆盖范围内?

整个工作区,只有一个例外。覆盖范围卡片上写着“该工作区任意频道有新记录时都会触发投递”,而且没有按频道筛选的功能。在客户频道很活跃的工作区里,被通知的不会只有每周例会。

这个例外就是私密频道:分享到私密频道的录音不会在任何地方被通知——没有邮件,也没有 Webhook。卡片会列出你能看到的频道,包括带锁图标的私密频道,但服务器会跳过它们。原因在于,设置投递的是所有者或管理员,而他未必是那个私密频道的成员;就连“那里录了点什么”这个事实,也不该由他收到。如何把频道划分为公开和私密,见团队频道中谁能看到什么。

个人录音完全不在这一切的范围内。在你亲自把录音分享到频道之前,没有任何东西会离开你的资料库。

为什么不直接发送摘要?

因为那样服务器就必须读到它。在 Speak-Y 中,录音在上传之前就在 Mac 上用频道密钥加密,而频道密钥只存在于成员的设备上——端到端加密的团队共享如何运作讲解了其中的机制。一台能把摘要放进邮件的服务器,也就是一台能读取每个频道的服务器。

按相反思路构建的工具确实会发送内容;如果收件箱里的摘要对你来说比端到端加密更重要,这就是选择它们的正当理由。以下情况核实于 2026 年 10 月 9 日:

如果你需要一份应用之外的可读副本,请有意识地去制作,而不是依靠通知:无需专人记录的每周会议纪要介绍了导出到 Confluence 或 Google Drive 的做法,而 Speak-Y MCP 服务器 可以让成员 Mac 上的 AI 助手读取该成员本来就能打开的录音。

团队工作区可在 Speak-Y macOS 应用中使用:创建工作区从 Pro 套餐开始,队友在任意套餐上都可免费加入。Speak-Y Teams 页面展示了共享频道如何运作。

FAQ

会议结束后,Speak-Y 会把会议摘要或转写通过邮件发出来吗?

不会。Email delivery 发送的是有新会议被分享到频道的通知:作者、时长、时间,外加一个“在 Speak-Y 中打开”按钮。频道采用端到端加密,因此服务器没有可以放进邮件的摘要或转写。正文要在应用里阅读。

Speak-Y 的 Webhook 发送什么?

一个 JSON POST 请求,事件为 team_record.created,只包含标识符:workspace_id、channel_id、record_id、created_by,meta 中的记录类型和时长,以及两个时间戳。其中没有转写,没有摘要,也没有频道或工作区的名称。

如何验证 X-Speaky-Signature 请求头?

用你的 Webhook 密钥对原始请求体计算 HMAC SHA-256,转成十六进制,并在前面加上 sha256=。用恒定时间比较把结果与 X-Speaky-Signature 请求头对比,而且要在解析 JSON 之前完成。

哪些频道会触发投递?

分享到工作区任意公开频道的每一条新录音。没有按频道筛选的功能。私密频道永远不会被通知,无论是邮件还是 Webhook;个人录音也永远不会离开你的资料库。

谁可以设置 Email delivery 和 Webhook?

工作区所有者或管理员,在 macOS 应用的工作区页面的投递标签页中设置。普通成员看到的是同一个标签页的只读版本。