加载现有对话记录

本教程将介绍如何通过线程 ID 在嵌入式聊天中恢复之前的对话。 这样,用户就可以从上次中断的地方继续对话,而不必每次都重新开始聊天。

默认情况下,嵌入式聊天功能每次被打开或刷新时,都会创建一个新的对话线程。 此 loadThreadById() 方法可帮助您恢复聊天记录并保持对话的连贯性。

线程加载的工作原理

线程加载过程包括以下步骤:

  1. 聊天正在初始化。
  2. loadThreadById() 方法通过线程 ID 调用。
  3. 嵌入式聊天功能会加载相应的聊天记录。
  4. 用户可以在同一线程中继续进行交互。

如果未提供对话ID,当用户发送第一条消息时,聊天将以新对话的形式加载。

步骤 1:获取线程 ID

可以通过聊天事件系统获取主题 ID。 您可以从 或 pre:send 事件 send 中捕获它们,并将其存储起来以备后用。

以下代码片段会在发送消息时捕获线程 ID,并将其存储在本地存储中:

// Capture thread ID from send event
instance.on('send', (event) => {
    const threadId = event.message.thread_id;
    console.log('Current thread:', threadId);
    
    // Store thread ID for later use (e.g., in localStorage)
    localStorage.setItem('chatThreadId', threadId);
});

步骤 2:加载现有线程

使用该 loadThreadById() 方法加载之前保存的对话。 以下代码片段用于检索存储的线程 ID 并加载相关的对话:



  // Retrieve stored thread ID
  const savedThreadId = localStorage.getItem('chatThreadId');

  if (savedThreadId) {
    chatInstance.loadThreadById(savedThreadId);
  }
 

完整剧本

请使用以下脚本,将本教程中的代码应用到您的聊天小部件中:


      window.wxOConfiguration = {
        orchestrationID: "your-orgID_orchestrationID",
        hostURL: "https://dl.watson-orchestrate.ibm.com",
        rootElementID: "root",
        showLauncher: false,
        deploymentPlatform: "ibmcloud", // Required for IBM Cloud
        crn: "your-org-crn", // Required for IBM Cloud. Learn how to get the CRN in https://cloud.ibm.com/docs/key-protect?topic=key-protect-retrieve-instance-ID&interface=ui
        chatOptions: {
          agentId: "your-agent-id",
          agentEnvironmentId: "your-agent-env-id"
      onLoad: onChatLoad
        }
      };
      setTimeout(function () {
          const script = document.createElement('script');
          script.src = `${window.wxOConfiguration.hostURL}/wxochat/wxoLoader.js?embed=true`;
          script.addEventListener('load', function () {
              wxoLoader.init();
          });
          document.head.appendChild(script);
      }, 0);
    
      function onChatLoad(instance) {
    
        const chatInstance = instance;
    
        // Retrieve stored thread ID
        const savedThreadId = localStorage.getItem('chatThreadId');
    
        if (savedThreadId) {
          chatInstance.loadThreadById(savedThreadId);
        }
    
        // Capture and store thread ID when messages are sent
        chatInstance.on("send", (event) => {
          const threadId = event.message.thread_id;
          console.log("Current thread:", threadId);
        });
      };