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グリーティングの中に書かれたコードブロックからしか呼び出せず、かつそのグリーティングに切り替え可能なバージョンが 2 つ以上必要です。他のメッセージ(AI の返信など)内のコードブロックにはこの関数が存在せず、機能チェックでは window.setChatMessagesundefined になります。

swipe_id はグリーティングのバージョン番号で、0 から始まります。成功すると指定バージョンのグリーティングに切り替わり、チャットが最上部までスクロールして、ユーザーは新しいグリーティングを最初から読めます。

意図的に非対応の呼び出し

以下の呼び出しはすべて拒否されます:

  • updates 配列に複数の要素を渡す(一度に複数メッセージを更新しようとする)
  • message_id0 以外のメッセージを更新する
  • メッセージ本文やその他のフィールドを更新する
  • 余分なオプションを渡す
  • 存在しない・範囲外の swipe_id を使う

setChatMessages は汎用のチャット履歴書き込み API ではなく、チャット履歴の読み取りにも対応していません。

ヒント

  • 利用条件を満たさない場合(グリーティングのバージョンが 1 つだけ、など)、コードブロック内にこの関数は存在しません——呼び出す前に機能チェックを:typeof window.setChatMessages === 'function'
  • 切り替えに確認ダイアログはありません。タップしたら何が起きるか、ボタンのラベルで分かるようにしてください
  • 複数バージョンのグリーティングの作り方は グリーティングとは? を参照