跳转到主要内容
Comfy Router 中继与 xAI Grok Voice 的实时语音到语音会话,Grok Voice 由 fal 提供。你使用 Comfy API 密钥向 Router 打开一个 WebSocket。Router 会检查你的账户和积分,在上游打开会话,然后双向中继事件。会话按秒从你的 Comfy 积分中扣费。

端点

该请求是一次 WebSocket 升级(GET,并带有 Connection: Upgrade 和 Upgrade: websocket)。其他任何请求都会以 426 拒绝。

认证

在升级请求的请求头中发送你的 Comfy API 密钥,可以使用 X-API-Key: comfyui-... 或 Authorization: Bearer comfyui-...。Router 不会从查询字符串或 WebSocket 子协议中读取密钥。
浏览器无法为 WebSocket 设置请求头,并且 Comfy API 密钥绝不能传到浏览器。请从你的服务器打开会话,并自行将音频中继到浏览器。

连接

升级成功后,即可发送和接收 xAI 为 Grok Voice 所记录的实时事件。下面这个示例会配置会话、发送一轮文本对话,并打印接收到的每个事件类型。
完成后请立即关闭套接字。计费会持续到会话关闭为止,而不是到最后一个响应结束。

事件

Router 不定义自己的事件协议。服务器事件会完全按照 fal 发送它们的方式送达你手上,而 Router 接受的客户端事件也会原样转发。有关事件列表、会话字段、音色和音频格式,请参阅: 像示例中那样,把每个客户端事件作为一条 msgpack 二进制消息发送。这是 fal 的 realtime 客户端所使用的分帧方式,模型的事件也会以同样的方式返回,即从 session.created 开始的 msgpack 二进制消息。fal 还会发送自己的、类型为 x-fal-message 的 JSON 文本消息(计时信息),你可以跳过它们。Router 的检查也接受把客户端事件作为一条 JSON 文本消息发送,但除非你已经用你的客户端测试过 JSON,否则请使用 msgpack。 Router 在转发每个客户端事件之前都会对其进行检查:
  • 事件类型: session.update、input_audio_buffer.append、input_audio_buffer.commit、input_audio_buffer.clear、conversation.item.create、conversation.item.delete、conversation.item.truncate、response.create、response.cancel,以及 fal 的 x-fal-session.configure。
  • 模型: session.update 中的 model 必须是 grok-voice-latest、grok-voice-3.0 或 grok-voice-2.0。
  • 工具: 允许使用由你的客户端执行的函数工具。服务器端工具(网络搜索、X 搜索、文件搜索和 MCP)会被拒绝。
  • 媒体: 图像和视频输入会被拒绝。会话仅支持语音和文本。
  • 大小: 单条客户端消息最大为 1 MiB。
被拒绝的事件不会被转发,Router 会以关闭码 1008 关闭会话。

定价

一次会话的费用为**每秒 $0.0011869**(约每分钟 $0.0712,或每秒 0.2504 积分、约每分钟 15.0 积分,按 211 积分 = 1 美元计算)。会话开启期间以 15 秒为一个增量计费,最后不足一个增量的部分按秒计费并向上取整。计费从升级开始,一直到 socket 关闭为止,无论期间是否有音频传输。

限制

当会话达到时间限制或积分已用完时,连接可能会在没有关闭帧的情况下关闭(通常表现为关闭代码 1006)。请仅在充值之后重新连接;如果需要更多时间,请启动新会话。

错误

升级之前

如果 Router 拒绝连接,它不会切换协议,而是返回 HTTP 状态码和 JSON 响应体:
根据 code 进行判断;detail 供人阅读。

升级之后

任何其他关闭代码都来自 fal 或 xAI。请参阅 事件 下链接的文档。

下一步

  • 计费:Router 如何收费以及如何核对用量。
  • 错误与重试:其他 Router 调用返回的错误分类。
  • 限制:请求速率及其他限制。