助手
扣子 AI 帮助与支持
你好,我是 扣子 文档问答助手 🎉 你在阅读当前文档的过程中,无论对文档概念的解释,还是文档内容方面的疑问,都可以随时向我提问,我会全力为你解答
推荐问题
如何快速了解这个空间的核心内容?
有哪些近期更新的重点文档?
我应该从哪些文档开始阅读?
文档反馈
低代码项目
快速开始
智能体
工作流
应用
资源
发布
模型
多人协作
开发工具
Coze CLI
SDK 参考
音视频
推广与变现

如何实现会话隔离

更新于: 2026-06-25 19:29:14

使用扣子编程 OpenAPI 或 SDK 和扣子智能体或应用对话时,扣子编程会将使用同一个访问密钥的对话看做同一个用户。如果业务侧不同的用户使用同一个扣子编程访问密钥鉴权,用户看到的对话记录中可能会夹杂其他用户的对话历史。
但是在实际业务场景中,往往需要将不同业务侧用户的会话互相隔离开来,每个用户只能看到自己和智能体的对话历史。扣子编程 OAuth JWT 鉴权方式中,支持通过 session_name 参数实现会话隔离,避免智能体不同账号的消息内容互相可见。

会话隔离方案

目前仅 OAuth JWT 鉴权方式支持会话隔离。如果不同的用户使用同一个访问密钥,且需要在一个扣子账号下维护多个用户的对话,建议使用 JWT 方式鉴权,并设置会话隔离。

会话隔离级别

绑定到扣子账号下

绑定到扣子账号下的子级下

区别

一个扣子账号内无法隔离会话。

支持在一个扣子的账号下维护多个子用户的会话。

适用场景

访问产品的用户本身拥有扣子账号。

  • 基于扣子编程 API 搭建的产品拥有自己的用户,这些用户没有扣子账号。
  • 需要隔离这些用户之间的会话。

鉴权方式

可使用扣子编程目前支持的所有鉴权方式。详细信息可参考鉴权方式概述

仅 OAuth 的 JWT 鉴权方式可实现会话隔离。但必须在 payload 中添加 session_name 字段。

隔离级别

渠道(默认) + 扣子账号 + Bot

渠道(默认) + 扣子账号 + Bot + session_name

设置方式

如需实现会话隔离,需要在调用扣子编程 OpenAPI 或 SDK 时,使用 OAuth JWT 鉴权方式,并在签署 JWT 时,在 payload 字段中添加 session_name 字段。session_name 中应指定用户在业务侧的 UID,String 类型。UID 由业务侧自行定义,扣子编程仅透传这个字段并用于签署 JWT、区分不同 session_name 的会话。
签署 JWT 并设置 session_name 的具体步骤可参考3 签署 JWT

设置示例

开发者搭建了一个智能体,并通过 Chat SDK 的方式嵌入到自建网站中,供网站的访问者使用。如果未设置会话隔离,那么网站中不同的访问者 A 和 B 在智能体对话框中可以查看到其他用户和智能体的对话记录。
开发者可以采用 JWT 方式实现会话隔离,并在 Chat SDK 中使用 JWT 访问密钥鉴权即可。

  1. 获取业务侧的用户 UID。
    从网站的账号系统中,获取网站用户 A 和 B 的 UID。此处我们假设 UID 分别为 USER_AUSER_B

  2. 获取 JWT Token。
    参考OAuth JWT 授权(开发者)文档实现 OAuth JWT 授权,并分别为用户 A 和 B 申请 JWT Token。在步骤3 签署 JWT 中,Payload 中添加 session_name 字段,并将其设置为网站用户 A 或 B 的 UID。
    用户 A 和 B 分别对应的 JWT Token:

    // 用户 A 的 JWT Token
    czs_RQOhsc7vmUzK4bNgb7hn4wqOgRBYAO6xvpFHNbnl6RiQJX3cSXSguIahiuhwfw****
    
    // 用户 B 的 JWT Token
    czs_DJWOEF7vmUzK4bNgb7hn4wqOgRBYAO6xvpFHNbnl6RiQJX3cSXSguIhFDzgy****
    
  3. 设置 Chat SDK 鉴权参数。
    参考安装并使用 Chat SDK接入 Chat SDK 时,在步骤四:配置聊天框中,auth 的 token 参数设置为网站用户对应的 Token,确保用户 A 和 用户 B 在和智能体对话时,分别使用的是自己的 JWT Token。

常见问题

为什么使用会话隔离时,设置了不同的 BotID,但返回的会话 ID 却相同?

可能原因
这通常是由于在代码中手动传入了相同的 conversationID 参数导致的。
解决方案
为确保会话 ID 的唯一性与隔离性,建议由系统自动生成会话 ID,避免手动在代码中设置 conversationID 参数。

使用 JWT 鉴权设置会话隔离时,不同会话间设置的用户变量是否会相互隔离?

会。设置 session_name 变量后,扣子编程会按照会话隔离的方式进行区分。不同会话间设置的用户变量将被自动隔离,互不影响。即使不同用户使用了相同的账号密钥,用户 A 与用户 B 的变量也会被独立存储,确保每个会话的用户变量完全隔离。