推送通知
推送通知会在 OAR 没有打开在你面前时,告诉你智能体需要你或已经完成:有提问在等待、一轮已结束、计划已就绪。它们默认关闭,你需要在每台设备上分别开启。
你自己的中继通过你浏览器厂商的推送服务把它们发送到你的设备,使用标准的 web push 库和中继自己的 VAPID 密钥。不涉及任何 OAR 服务器。中继在首次启动时创建这些密钥并保存在它的数据库中,因此重启后它们依然存在。通知的文字只包含你在通知显示什么中允许的内容:默认是一行不含任何对话文字的通用文本。
你需要什么 #
- 安全的页面。 通过 HTTPS 或在
localhost上打开 OAR。在其他任何地址上,浏览器都不提供推送,Notifications(通知)设置中会显示“Push requires a secure context. Open the app over HTTPS (or localhost) to enable notifications on this device.”。同样的规则见安装为应用。 - 支持 web push 的浏览器。 它需要 service worker、Push API 和 Notification API。否则设置中会显示“This browser does not support Web Push notifications.”(或“...service workers, which push notifications require.”)。
- 所有系统都一样。 OAR 只检查这些浏览器功能,不检查其他任何东西;它没有单独的 iOS 规则。如果你的 iPhone 或 iPad 浏览器不提供这些功能,Notifications 设置中会说明。
启用 #
在每台需要接收通知的设备上都执行此操作。该设置按设备保存,因此在笔记本电脑的浏览器中开启它,对你的手机没有任何作用。
- 打开 Settings → Notifications(设置 → 通知)。
- 开启 Enable push notifications on this device(在此设备上启用推送通知)。
- 浏览器询问时允许通知。该提示只会在你点击开关之后出现,绝不会在页面加载时出现。
- 状态行显示“Push notifications are enabled on this device. They are only sent while no device has the app open.”,其他控件随之解锁。(确切的规则是没有任何设备在前台显示 OAR;见不发送通知的情况。)
- 选择要通知的事件以及通知显示的内容(见下文)。
没有测试通知的按钮。要检查它是否工作,把 OAR 留在后台(或关闭它的标签页),然后让一个简短的轮次完成。
再次关闭开关后,该设备会留在列表中,标记为 disabled(已禁用),并停止向它发送。再次开启会立即生效。
设备列表 #
在该选项卡底部,Devices(设备)列出在此中继上订阅的每台设备,最近更改的排在最前。每一行显示:
- 设备名称,根据浏览器和系统选定(例如
Android Chrome),或为 Unnamed device(未命名设备),你自己的设备带有 (this device)(此设备),已关闭的设备带有 disabled; - Last delivery(上次推送):通知上一次送达它的时间,或 never(从不),如果上一次尝试失败,还会显示最后一个错误。
Rename(重命名)会要求输入新名称(最多 80 个字符)。Revoke(撤销)会要求确认,然后从中继中移除该设备;对于你正在使用的设备,还会从浏览器中移除它的订阅。你从这里撤销的其他设备会立即停止接收,但无法从这里通知它的浏览器:浏览器会保留自己的订阅,直到你在那里移除它。在那台设备上打开 Settings → Notifications,开关会显示为关闭。再次开启它即可接收通知,或者在该浏览器的网站设置中移除此网站的通知权限,以彻底删除订阅。
事件 #
每个事件在 Notify about(通知内容)下都有自己的开关。这些开关属于设备,因此你的手机和笔记本电脑可以不同。
| 开关 | 默认值 | 通知标题 | 何时触发 |
|---|---|---|---|
| Questions from the agent(智能体的提问) | 开启 | Copilot needs your input(Copilot 需要你的输入) | 智能体向你提出问题,并有一张提问卡片在等待回答。 |
| Turn completed(本轮已完成) | 开启 | Turn completed | 一轮结束(并入已在运行的一轮的消息不会单独发送通知)。见一轮运行期间。 |
| Turn failed(本轮失败) | 开启 | Turn failed | 一轮失败。你停止的一轮也算作失败。 |
| Boards (plan reviews)(看板,计划审阅) | 开启 | Plan ready for review(计划已就绪,待审阅) | 智能体发布一个计划看板供审阅。 |
| CLI went offline(CLI 已离线) | 关闭 | CLI offline(CLI 离线) | 中继与 CLI 主机的连接断开。 |
| Host suspend fired or was dropped(主机休眠已触发或已放弃) | 开启 | Host suspend(主机休眠) | 排队的主机休眠触发,或因中继关闭或重启而被放弃。 |
| Queued relay restart waited its maximum time(排队的中继重启已等待最长时间) 0.9.13 新增 | 开启 | Relay restart waiting(中继重启等待中) | 排队的中继重启已等待了最长时间,并询问是立即重启、继续等待还是取消。 |
提问通知的标题
对每个提供商,提问通知的标题都是“Copilot needs your input”,包括不是 Copilot 的智能体。
不发送通知的情况 #
- 有设备在前台显示 OAR 时。 只要你的任何一台设备在屏幕上显示 OAR,就不会向任何设备发送通知。可见的页面每 30 秒告知中继一次,中继会在设备最后一次报告后的 90 秒内将其视为活动。页面被隐藏时会立即报告。如果中继无法判断,就不发送。
- 另一个智能体启动的轮次。 当另一个中继上的智能体(或由智能体启动的会话)向某个会话发送提示词时,该轮不会发送 Turn completed,也不会发送 Turn failed:等待的是那个智能体,它会自己向你报告。见智能体之间的消息。提问仍会送达你。
- 回应中继事件的轮次。 由中继事件启动的一轮出于同样的原因两者都不发送;回应事件的监视者会在有重要情况时自行推送。提问不受影响。
- 你在该设备上关闭的事件,或已关闭的设备。
无法立即送达的通知,推送服务最多会保留 12 小时。
通知显示什么 #
三项设置(同样按设备)决定有多少对话内容离开中继。
| 设置 | 默认值 | 选项 |
|---|---|---|
| Include conversation title(包含对话标题) | 关闭 | 开启时,标题显示为“Turn completed — 对话标题”,完整标题在 120 个字符处截断。 |
| Message preview(消息预览) | None (generic text)(无,通用文本) | None (generic text)、Truncated(截断)、Full text(全文)。 |
| Preview length (characters)(预览长度,字符) | 80 | 20 到 500。只在选择 Truncated 时使用,截断时会加上“…”。 |
当 Message preview 为 None (generic text) 时,正文是固定的一行:
| 事件 | 无预览时的正文 |
|---|---|
| Question(提问) | The agent asked a question. |
| Turn completed | The agent finished its turn. |
| Turn failed | The agent turn failed. |
| Plan ready(计划已就绪) | The agent posted a board for review. |
| CLI offline | The relay lost its connection to the CLI host. |
| Host suspend | The queued host suspend changed state. |
| Relay restart waiting | The queued relay restart has waited its maximum time. |
有预览时,正文是问题的文字、回复(或失败轮次的错误文字),或者计划看板的标题。Full text 在 2000 个字符处截断。
通知还会带上应用打开正确对话所需的几个标识符(对话、问题、看板或消息)。无论预览设置如何,问题的简短选项也会随通知一起发送,因为它们会变成按钮(见从通知中回答)。
有三个事件忽略预览设置。CLI went offline 始终显示它的固定一行。Host suspend fired or was dropped 始终显示它自己的消息(“All agents finished; the host is suspending now.”或“Queued host suspend dropped: relay ...”)。Queued relay restart waited its maximum time 同样始终显示它自己的消息,例如“The queued relay restart has waited 30 min for 2 sessions. Restart now, keep waiting or cancel it.”。
如需更多隐私,请保持标题和预览关闭:这样通知中就不会有任何来自你对话的内容。
轻点通知 #
轻点通知会在对应的对话上打开 OAR(没有对话的通知,例如 CLI offline,会打开 OAR 本身)。如果 OAR 已在某个窗口中打开,该窗口会切到前面并显示该对话;否则会打开一个新窗口。每个事件都有自己的通知:它们会叠放,不会相互替换。
从通知中回答 #
提问通知可以带有对应问题选项的按钮:
- 最多三个选项,且按钮数不超过你的设备所能显示的数量;
- 超过 120 个字符的选项没有按钮,按钮的标签会缩短为 40 个字符(发送的回答是完整的选项);
- 只要问题仍在等待且浏览器已登录到中继,轻点按钮就会把该回答发送到中继,而不会打开 OAR。
如果回答没有送达(问题已在别处回答、已过期,或你处于离线状态),轻点会改为打开对话,让你看到原因。见提问卡片。
多台设备、过期的订阅、新地址 #
- 多台设备。 你开启的每台设备都会收到它所开启事件的每条通知。前台规则对所有设备合起来适用。
- 过期的订阅。 当推送服务报告某个订阅已不存在时,中继会自行把该设备从列表中移除。因其他原因持续失败的设备,会在连续 8 次发送失败后被移除。在那台设备上再次开启该设置,即可重新订阅。
- 中继地址变更之后。 订阅属于你开启它时所在的页面。在每台设备上用新地址打开 OAR,并查看 Settings → Notifications:在那里没有订阅的设备会显示开关关闭。旧条目会留在列表中,直到你 Revoke 它,或推送服务报告它已失效。中继在重启之间保留它的推送密钥,因此在同一地址上重启不需要重新设置。
疑难解答 #
| 问题 | 原因与解决方法 |
|---|---|
| 开关呈灰色,状态显示推送需要安全上下文 | 页面不在 HTTPS 或 localhost 上。通过 HTTPS 打开中继,例如通过反向代理或隧道。 |
| 状态显示浏览器不支持 web push 或 service worker | 使用支持它们的浏览器。在那之前开关保持关闭。 |
| 没有出现权限提示 | 该提示只会在你点击开关之后出现。如果状态显示“Notifications are blocked for this site”,请在浏览器的网站设置中允许此网站的通知,然后重新打开 Settings 对话框。 |
| 通知不再送达 | 检查设备列表中的 Last delivery 和最后一个错误。确认设备没有标记为 disabled、事件开关已开启,且浏览器仍允许通知。如果设备已从列表中消失,请再次开启该设置。 |
| 设置已开启却什么都收不到 | 可能有另一台设备正在前台打开 OAR;这会阻止向所有设备发送。关闭或隐藏它,稍等片刻。 |
| OAR 在另一台设备上打开时仍收到通知 | 只有当设备的页面可见、且在最近 90 秒内报告过时,中继才会将其视为活动。已打开但被隐藏的标签页、已锁屏的手机或已断开的连接都不算。 |
| 通知中没有对话文字 | Message preview 为 None (generic text),这是默认值。选择 Truncated 或 Full text。 |
| 一轮已结束,却没有收到 Turn completed | 该轮由另一个智能体启动,或者回应的是中继事件,或者那台设备上的 Turn completed 已关闭。 |
| 缺少回答按钮 | 问题没有选项、选项超过 120 个字符,或你的设备显示的按钮较少。轻点通知,在 OAR 中回答。 |
控件列表另见 Settings(设置),暂停的一轮如何发送通知见用量上限暂停。