Skip to content

setChatMessages:切換開場白

setChatMessages 用於在開場白的 程式碼區塊切換開場白版本。典型用法:開場白裡放一組「選擇開局」按鈕,使用者點擊後直接切到對應版本的開場白。

函式簽名

ts
declare function setChatMessages(
  updates: [{ message_id: 0; swipe_id: number }],
  option?: Record<string, never>,
): Promise<void>

範例

markdown
```html
<!doctype html>
<html>
  <body>
    <button id="opening-0">開場一</button>
    <button id="opening-1">開場二</button>

    <script>
      document.querySelector('#opening-0').onclick = () =>
        setChatMessages([{ message_id: 0, swipe_id: 0 }]);

      document.querySelector('#opening-1').onclick = async () => {
        try {
          await setChatMessages([{ message_id: 0, swipe_id: 1 }]);
        } catch (error) {
          console.error(error.message);
        }
      };
    </script>
  </body>
</html>
```

可用條件

setChatMessages 只有寫在開場白裡的程式碼區塊才能呼叫,並且該開場白至少要有兩個可切換的版本。寫在其他訊息(如 AI 回覆)裡的程式碼區塊中不存在這個函式,能力檢測時 window.setChatMessages 會是 undefined

swipe_id 是開場白版本的序號,從 0 開始。呼叫成功後會切換到指定版本的開場白,並把聊天捲動到頂部,讓使用者從頭開始閱讀。

有意不支援的寫法

以下呼叫都會被拒絕:

  • updates 陣列傳入多個元素(試圖一次更新多條訊息)
  • 更新 message_id 不為 0 的訊息
  • 更新訊息文字或其他欄位
  • 傳入額外選項
  • 使用不存在或越界的 swipe_id

setChatMessages 不是通用的聊天記錄寫入 API,也不支援讀取聊天記錄。

小提示

  • 不滿足可用條件時(例如只有一個開場白版本),程式碼區塊裡不存在這個函式——呼叫前先做能力檢測:typeof window.setChatMessages === 'function'
  • 切換沒有確認彈窗,按鈕文案要讓使用者明白點擊後會發生什麼
  • 多版本開場白的編寫方式參見 什麼是開場白?