FaceTime(实验性)
将 FaceTime 连接到你的 OpenClaw 智能体,实现双向语音通话。该插件会自动接听来自已配置 handle 的来电,并在获得批准后让你的智能体呼叫你。实时语音提供商负责语音处理,而你的 OpenClaw 智能体负责需要工具或记忆的请求。
状态:实验性功能,默认禁用。 在同一个 Mac 上、同一个已登录用户会话中运行 Gateway 和原生辅助程序。请在 plugins.entries.facetime 下配置 FaceTime,而不是将其作为消息通道。
Warning
FaceTime 集成使用了 Apple 私有 API,并向 Apple 通话应用注入辅助程序。它要求降低 SIP 调试保护。请使用你实际控制的、专用的、保持最新的 Mac。OpenClaw 不会自动更改 SIP、开发者工具访问权限或 macOS 隐私权限。
要求¶
- 一台运行 macOS 14.4 或更高版本的 Apple Silicon Mac。
- OpenClaw 2026.9.4 或更高版本。
- FaceTime 已在 Gateway Mac 上登录你的 Apple 账户。
- 已在
/Applications/Xcode.app安装完整的 Xcode。 - FaceTime 插件及匹配的已签名原生配套程序。
- 一个具有有效凭据的实时语音提供商。
- 一个用于音频驱动器和 Mac 设置的管理员账户。
通话中的每个人都必须同意其音频由语音提供商处理。
请保持一对一通话。已配置的 handle 仅用于授权通话;该集成不会对每个说话人进行身份验证,也不会检查组呼的成员资格。请勿在具有智能体工具访问权限的通话中添加其他参与者。
安装插件和原生配套程序¶
在 Gateway Mac 上运行以下命令:
原生配套程序托管在 openclaw/openclaw-facetime。请使用其匹配的已签名版本。如果包或 formula 不可用,则在发布之前无法继续安装。
配置所有者身份¶
将你的 FaceTime 电子邮件地址或完整的国际电话号码添加到 ownerHandles。只有列出的 handle 才能使用该集成。每个列出的 handle 都具有所有者权限;没有访客层级。
将此内容合并到你的 OpenClaw 配置中。保留现有插件条目,如果你使用了 plugins.allow 列表,请将 facetime 添加到其中。
{
plugins: {
allow: ["facetime"],
entries: {
facetime: {
enabled: true,
config: {
ownerHandles: ["owner@example.com", "+12065550123"],
realtime: {
provider: "openai",
sessionKey: "main",
toolPolicy: "owner",
},
},
},
},
},
}
配置语音凭据¶
示例选择了 OpenAI 用于实时语音。语音凭据与你的文本智能体登录凭据是分开的。请配置所选实时语音提供商支持的凭据;仅拥有文本智能体的订阅可能无法提供语音访问权限。
提供商身份验证使用由 realtime.sessionKey 选定的智能体。对于 OpenAI,当未配置插件特定的 API 密钥时,该智能体的 API 密钥认证配置文件可以提供语音凭据。
对于由环境变量提供支持的 OpenAI API 密钥,请合并以下附加配置:
{
secrets: {
providers: {
voiceenv: { source: "env", allowlist: ["OPENAI_API_KEY"] },
},
},
plugins: {
entries: {
facetime: {
config: {
realtime: {
providers: {
openai: {
apiKey: { source: "env", provider: "voiceenv", id: "OPENAI_API_KEY" },
},
},
},
},
},
},
},
}
确保 OPENAI_API_KEY 对 Gateway 进程可用,而不仅仅是在你的终端中可用。你也可以复用已有的文件支持或其他受支持的 SecretRef,而无需将密钥存储在配置中。
选择智能体和工具访问权限¶
realtime.sessionKey 默认为 main,用于选择默认智能体。要选择其他智能体,请使用智能体限定的密钥,例如 agent:assistant:main,并将 assistant 替换为其配置的 ID。
每次通话使用独立的咨询会话。它可以继承所选源会话的上下文,而不会将通话轮次添加到该聊天中。智能体的工作区、工具凭据和审批策略仍然适用。
选择 realtime.toolPolicy:
| Value | Behavior |
|---|---|
owner(默认) |
使用所选智能体的常规工具和审批检查。 |
safe-read-only |
将智能体请求限制为一组固定的文件、搜索、网页抓取和记忆工具。其他插件工具不会自动包含。 |
none |
禁用智能体咨询。语音对话和通话控制仍然可用。 |
无效的策略值会被拒绝。即使选择受限的工具策略,也请只将你自己的身份添加到 ownerHandles。
选择语音¶
显式设置 realtime.provider 以保持提供商选择的一致性。realtime.model 和 realtime.voice 是可选的;省略时,所选提供商会提供其默认值。如果你不想跟随提供商默认语音的变化,请显式设置受支持的语音。
如果省略 realtime.provider,已注册的实时提供商会自动选择提供商。这里的 OpenAI 只是一个示例,并非插件的默认设置。
准备 Mac¶
保存配置后,重启 Gateway 并运行设置:
设置会报告所需的操作,并可启动原生辅助程序、打开通话应用并附加辅助程序。它不会拨打呼叫。
启用开发者工具访问¶
在交互式管理员会话中,运行:
允许调试器附加¶
原生辅助程序需要附加到 FaceTime 和 Phone。如果设置报告 SIP 调试限制阻止了附加:
- 关闭 Mac。
- 按住电源按钮,直到出现启动选项,然后选择选项。
- 在 macOS 恢复中打开实用工具 > 终端。
- 运行:
- 重新启动进入正常用户会话,并重新运行
facetime.setup。
这会禁用 SIP 的调试限制,同时保留其其他保护。不要禁用整个 SIP 或更改它来解决无关的身份验证或音频驱动程序错误。如果设置无法确定 SIP 状态,请在做出更改前运行 csrutil status 并检查结果。
请参阅 FaceTime 恢复与移除,以在移除集成时恢复标准安全设置。
授予权限并允许来电¶
在与运行 Gateway 相同的用户会话中完成 macOS 权限提示。如果预检报告应用音频捕获被阻止,请检查系统设置 > 隐私与安全性 > 屏幕与系统音频录制。
设置还会检查专注模式或通知设置是否会阻止来电。允许 FaceTime 来电通过你当前使用的专注模式,并且如果设置报告该设置阻止通知,请在共享或镜像显示器时启用通知。
安装音频驱动程序¶
运行仅限管理员的安装程序,并完成其管理员提示:
openclaw gateway call facetime.installDriver --json
openclaw gateway call facetime.driverStatus --json
安装程序使用 Xcode 在本地构建基于 BlackHole 的固定版本驱动程序。它会在构建前检查 Xcode 安装,并且不接受手动构建的驱动程序。如果安装失败,请按照报告的错误或驱动程序恢复步骤进行操作。
选择通话音频设备¶
在 FaceTime 中,以及在处理 FaceTime 音频通话的 Phone 中,选择:
- 麦克风:
OpenClaw-Mic。 - 输出: 物理扬声器或耳机。
不要选择 OpenClaw-Mic、OpenClaw-Feed、BlackHole、聚合设备或多输出设备作为通话输出。
检查并激活¶
在完成 Mac 和驱动程序步骤后重新运行设置,然后检查音频就绪状态:
openclaw gateway call facetime.setup --json
openclaw gateway call facetime.preflight --json
openclaw gateway call facetime.status --json
在拨打电话之前解决报告的设置或预检错误。这些命令不会拨打任何人。setup 和 preflight 是管理员操作,可以执行实时设置和音频检查。status 可以检查非活动运行时,而无需打开应用、暂存辅助程序或启动通话音频。
验证你的第一次通话¶
从 FaceTime 音频通话开始:
- 确认接收设备可用,且其用户同意接听该通话。
- 让你的 agent 呼叫一个你配置的 owner 句柄,然后批准去电。
- 在接收设备上接听,并检查你是否能听到问候语并进行双向通话。
- 让 agent 挂断,或由你自己结束通话。
agent 使用 facetime_call,并在拨号前请求一次性批准。你也可以从配置的 owner 句柄呼叫 Gateway Mac 的 FaceTime 账户。
拨打和结束通话¶
要作为 Gateway 操作员直接拨号:
openclaw gateway call facetime.dial \
--params '{"handle":"owner@example.com","mode":"audio"}' \
--json
目标必须位于 ownerHandles 中。直接拨号需要 operator.write 访问权限,并计为明确的操作员操作。
要结束通话并检查其状态:
在开始另一个通话之前,请等待状态显示没有活动或挂起的通话。挂断确认意味着请求已发送,并不代表通话已经结束。
挂起的呼出拨号会保留通话槽位,因此在它完成或其取消得到确认之前,来电不会自动接听。如果辅助程序断开连接或报告不确定的拨号结果,挂起状态将保持可见,直到 OpenClaw 协调该通话。
更新集成¶
更新插件和原生配套程序后,检查 facetime.driverStatus。如果驱动程序已过时,请在交互式管理员会话中更新它:
如果要升级原型配置,请运行 openclaw doctor --fix。Doctor 会将 whitelistHandles 迁移到 ownerHandles,并移除已停用的 helperHost、helperPort 和 realtime.brain 设置。
移除集成¶
结束所有进行中的通话,然后运行:
按照 FaceTime 恢复与移除 重启 Apple 通话应用,检查音频设备已移除,并恢复 SIP。
限制¶
- 一次只能有一个受管通话。
- 仅支持 FaceTime 通话。蜂窝网络、Wi-Fi 通话/PSTN、紧急呼叫和无法识别的通话类型都会被拒绝,即使号码与 owner 句柄匹配也是如此。
- 从 FaceTime 音频通话开始。视频和由 Phone 主持的 FaceTime 音频仍处于实验阶段,在不同 macOS 版本上可能表现不同。
- 使用 agent 工具的请求可能比普通语音回复花费更长时间。
- 没有 FaceTime 特定的实时模型回退;提供程序的行为和默认值来自所选的实时提供程序。
故障排除¶
| 症状 | 要检查的内容 |
|---|---|
| 症状 | 检查内容 |
|---|---|
| 插件无法启动 | 确认它已启用,ownerHandles 非空,并且 Gateway 在已登录的 Mac 用户会话中运行。 |
| 原生辅助程序缺失或被拒绝 | 安装匹配的已签名、已公证的原生伴侣程序。不要绕过其签名或协议检查。 |
| 设置报告调试器附加被阻止 | 在 准备 Mac 中检查 developer-tools 访问权限和 SIP 调试状态。 |
| 音频驱动程序安装失败 | 确认完整 Xcode 已安装在 /Applications/Xcode.app,然后按照 驱动程序恢复 操作。 |
| 没有问候语或单向音频 | 在 Apple 通话应用中检查麦克风和物理输出选择,然后重新运行设置和预检。 |
| 语音身份验证失败 | 在 Gateway 进程中检查所选 realtime 提供程序的凭据。文本代理登录并不适用于所有语音提供程序。 |
| 语音意外变化 | 显式设置 realtime.provider 和受支持的 realtime.voice。 |
| 语音可用但代理工具不可用 | 检查 realtime.sessionKey、realtime.toolPolicy 以及所选代理的工具凭据和审批。 |
| 工具支持的响应缓慢 | 使用 Gateway 日志 和 会话检查 来区分代理响应时间和工具执行时间。 |
| 通话无法结束 | 再次拨号前检查 facetime.status。如有需要,使用 Apple 通话应用结束通话。 |
在共享日志之前,删除账户标识符、凭据和私密对话内容。
相关¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw