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'
  • 切换没有确认弹窗,按钮文案要让用户明白点击后会发生什么
  • 多版本开场白的编写方式参见 什么是开场白?