推播通知
推播通知會在 OAR 沒有開在你眼前時,告訴你 agent 需要你或已經完成:有提問在等待、回合已結束、計畫已就緒。它們預設關閉,而且要在每一台裝置上分別開啟。
通知由你自己的中繼透過你瀏覽器廠商的推播服務送到你的裝置,使用標準的 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.」。同樣的規則見安裝成 App。 - 支援 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(agent 的提問) | 開啟 | Copilot needs your input(Copilot 需要你的輸入) | agent 向你提出問題,並有提問卡片等待回答。 |
| Turn completed(回合已完成) | 開啟 | Turn completed | 回合結束(併入已在執行中之回合的訊息,不會另外傳送通知)。見回合執行期間。 |
| Turn failed(回合失敗) | 開啟 | Turn failed | 回合失敗。你停止的回合也算失敗。 |
| Boards (plan reviews)(看板,計畫審閱) | 開啟 | Plan ready for review(計畫已就緒,待審閱) | agent 張貼計畫看板供審閱。 |
| 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 的 agent。
不會傳送通知的情況 #
- 有裝置把 OAR 放在前景時。只要你的任何一台裝置在螢幕上顯示 OAR,就不會對任何裝置傳送通知。可見的頁面每 30 秒向中繼回報一次,中繼會在裝置最後一次回報後的 90 秒內把它視為作用中。頁面被隱藏時會立即回報。如果中繼無法判斷,就不會傳送。
- 由其他 agent 啟動的回合。當另一個中繼上的 agent(或由 agent 啟動的 session)向某個 session 傳送提示時,該回合不會傳送 Turn completed,也不會傳送 Turn failed:在等待的是那個 agent,它會自己向你回報。見 agent 註記。提問仍會送達你。
- 回應中繼事件的回合。由中繼事件啟動的回合基於同樣的理由,兩者都不會傳送;回應事件的監看者會在有重要的事時自行推播。提問不受影響。
- 該裝置上你關閉的事件,或已關閉的裝置。
無法立即送達的通知,推播服務最多會保留 12 小時。
通知顯示的內容 #
有三項設定(同樣依裝置分別儲存)決定對話中有多少內容會離開中繼。
| 設定 | 預設 | 選項 |
|---|---|---|
| Include conversation title(包含對話標題) | 關閉 | 開啟時,標題為「Turn completed — conversation title」,完整標題在 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 個字元處截斷。
通知還帶有 App 開啟正確對話所需的幾個識別碼(對話、問題、看板或訊息)。不論預覽設定為何,問題的簡短選項也會隨通知一起傳送,因為它們會變成按鈕(見從通知回答)。
有三個事件不理會預覽設定。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 開啟中繼,例如經由反向 proxy 或 tunnel。 |
| 狀態顯示瀏覽器不支援 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 | 該回合是由其他 agent 啟動的,或是在回應中繼事件,或者該裝置上的 Turn completed 是關閉的。 |
| 沒有回答按鈕 | 問題沒有選項、選項超過 120 個字元,或你的裝置能顯示的按鈕較少。點一下通知,在 OAR 中回答。 |
另見 Settings(設定) 中的控制項清單,以及用量上限暫停,了解暫停的回合如何通知。