加载现有对话记录
本教程将介绍如何通过线程 ID 在嵌入式聊天中恢复之前的对话。 这样,用户就可以从上次中断的地方继续对话,而不必每次都重新开始聊天。
默认情况下,嵌入式聊天功能每次被打开或刷新时,都会创建一个新的对话线程。 此 loadThreadById() 方法可帮助您恢复聊天记录并保持对话的连贯性。
线程加载的工作原理
线程加载过程包括以下步骤:
- 聊天正在初始化。
- 该
loadThreadById()方法通过线程 ID 调用。 - 嵌入式聊天功能会加载相应的聊天记录。
- 用户可以在同一线程中继续进行交互。
如果未提供对话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);
});
};