VisuGuide Chat SDK

第三方接入说明与在线 Demo。将聊天挂件嵌入您的网站,静态资源从 VisuGuide 官方 OSS 加载, 会话与 AI 能力由 VisuGuide 云端 API 提供。

在线 Demo

本页已按下方「方式一」加载 SDK,右下角为聊天入口(Demo 默认 siteKey=main):

等待加载…
siteKey接入站点编号,由 VisuGuide 平台分配(见下方「siteKey 说明」)。 本页 Demo 默认 siteKey=main;可通过 URL 覆盖,例如 ?siteKey=your-code(平台分配的编号)。 手机调试控制台:访问 ?debug=1(加载 Eruda 浮层,可查看 console / network)。 视口宽度 ≤480px 时 Demo 会自动启用移动端模式(全屏比例、禁用拖拽、忽略桌面端位置缓存)。 手机端建议直接使用 H5 专用测试页(无文档侧栏,避免滚动冲突)。

OSS 静态资源

SDK 已部署在 VisuGuide 官方 OSS(传输加速),第三方无需自行构建,直接使用以下 URL:

官方基址

https://visuscience.oss-accelerate.aliyuncs.com/visuchatsdk/latest/

文件清单(须保持相对路径)

visuchatsdk/latest/
├── visu-chat.iife.min.js    ← Script 标签接入(推荐)
├── visu-chat.css            ← 必须引入
├── index.mjs                ← Vue / React 等 ESM 接入
└── fonts/
    └── material-symbols-outlined.woff2
文件用途
visu-chat.iife.min.js 浏览器直接执行,注册全局对象 window.VisuChat
visu-chat.css 组件样式(Shadow DOM 隔离,不污染宿主页面)
index.mjs ES Module,供 Webpack / Vite 等打包工具 import
fonts/*.woff2 图标字体,须与 CSS 保持目录相对关系

路径自动推断(IIFE 模式)

使用 <script src=".../visu-chat.iife.min.js"> 时,SDK 会根据脚本 URL 自动加载同目录下的 visu-chat.cssfonts/material-symbols-outlined.woff2, 一般无需设置 assetsBaseUrl

集成方式

方式一:Script 标签(IIFE)— 推荐

适用于 PHP、Java 模板、WordPress、静态 HTML 等无前端构建的项目。

<!-- 1. 样式 -->
<link rel="stylesheet"
  href="https://visuscience.oss-accelerate.aliyuncs.com/visuchatsdk/latest/visu-chat.css">

<!-- 2. 脚本 -->
<script
  src="https://visuscience.oss-accelerate.aliyuncs.com/visuchatsdk/latest/visu-chat.iife.min.js"></script>

<!-- 3. 初始化 -->
<script>
  var chat = VisuChat.init({
    apiBase: 'https://visuguide.visuscience.com',
    wsBase: 'https://ws.visuguide.visuscience.com',
    siteKey: 'your-site-key',   // 由 VisuGuide 分配
    locale: 'zh-CN',
    title: '在线客服',
  });
</script>

方式二:ES Module

适用于 Vue、React、Next.js、Vite、Webpack 等现代前端项目。

import { init, destroy } from 'https://visuscience.oss-accelerate.aliyuncs.com/visuchatsdk/latest/index.mjs'

const chat = init({
  apiBase: 'https://visuguide.visuscience.com',
  wsBase: 'https://ws.visuguide.visuscience.com',
  siteKey: 'your-site-key',
  locale: 'zh-CN',
  assetsBaseUrl: 'https://visuscience.oss-accelerate.aliyuncs.com/visuchatsdk/latest/',
})

// 组件卸载时
chat.destroy()
index.mjs 被打包进业务 bundle,SDK 无法自动推断 CSS/字体路径,必须设置 assetsBaseUrl 为 OSS 基址(以 / 结尾)。

方式三:下载到自有 CDN / 服务器

可将 visuchatsdk/latest/ 整个目录下载后部署到您自己的 CDN,替换 URL 即可,目录结构不变。

<link rel="stylesheet" href="https://your-cdn.com/visu-chat/visu-chat.css">
<script src="https://your-cdn.com/visu-chat/visu-chat.iife.min.js"></script>
<script>
  VisuChat.init({
    apiBase: 'https://visuguide.visuscience.com',
    wsBase: 'https://ws.visuguide.visuscience.com',
    siteKey: 'your-site-key',
    assetsBaseUrl: 'https://your-cdn.com/visu-chat/',  // 仅当 JS/CSS 不同目录时需要
  });
</script>

siteKey 说明

siteKey 是 VisuGuide 平台为您分配的接入站点编号, 用于标识当前页面上的 SDK 挂载点。同一接入商若有多个站点(官网、产品页、网店等), 应使用不同的 siteKey,以便区分来源。

siteKey 与页面域名不是同一概念:域名用于 Origin 白名单校验(接入前须在平台登记); siteKey 是业务编号,由 VisuGuide 分配后在 VisuChat.init() 中填写。

常见取值示例

siteKey说明典型场景
main主站官方网站接入
product产品站独立产品落地页
your-code平台分配编号接入商专属代号,接入前向 VisuGuide 确认

未传 siteKey 时 SDK 默认 main。生产环境请使用平台为您指定的值,勿自行编造。

全局对象与实例方法

window.VisuChat(IIFE 加载后)

方法说明
VisuChat.init(options) 初始化并挂载挂件,返回实例。重复调用会自动销毁上一个实例(单例)。
VisuChat.destroy() 销毁最近一次 init 创建的实例。

实例方法(init 返回值)

方法返回值说明
open()void展开聊天面板
close()void收起面板(不断开连接)
isOpen()boolean面板是否展开
setLanguage(locale)void设置界面与 AI 回复语言(BCP 47,如 zh-CNen)。外层站点切换语言时可调用以同步挂件;WebSocket 已连接时同步到后端
destroy()void销毁挂件、断开连接、移除 DOM
var chat = VisuChat.init({ apiBase: 'https://visuguide.visuscience.com', siteKey: 'your-site-key' });

document.getElementById('help-btn').onclick = function () { chat.open(); };

// 外层站点语言切换时同步挂件(示例)
function onSiteLanguageChange(locale) {
  chat.setLanguage(locale);
}

window.addEventListener('beforeunload', function () { chat.destroy(); });

语言设置(setLanguage)

init({ locale }) 设置初始默认语言外,实例方法 setLanguage(locale) 可在运行时切换挂件 UI 与 AI 回复语言,适用于外层网站已有语言切换器的场景。

方法签名

chat.setLanguage(locale: string): void

参数

参数类型说明
localestring BCP 47 或 ISO 639-1 语言码,如 zh-CNenesfr

支持的语言

挂件 UI 与 AI 对话均支持以下 10 种语言(取主语言段,如 zh-CNzh):

en · zh · es · fr · de · pt · it · ja · ru · ar

不支持的语言码会被忽略(开发环境控制台会 warn)。

行为说明

  • 同步更新挂件 UI 文案(欢迎页、按钮、连接状态、表单标签等)及语言菜单选中态。
  • 同步 AI 回复语言:WebSocket 已连接时发送 { type: "set_language" };尚未连接时会在连上后自动补推。
  • 访客仍可在挂件内「语言」菜单手动切换;两种方式均会写入 Session。
  • 通过 API 切换时不会在聊天区插入「语言已切换」系统提示(与面板内手动切换不同)。

init({ locale }) 与 setLanguage 的区别

方式时机典型用途
init({ locale: 'zh-CN' }) 挂载时 页面默认语言;未传则回退到浏览器语言或 en
chat.setLanguage('en') 挂载后的任意时刻 外层站点切换语言时同步挂件

接入示例

var chat = VisuChat.init({
  apiBase: 'https://visuguide.visuscience.com',
  wsBase: 'https://ws.visuguide.visuscience.com',
  siteKey: 'your-site-key',
  locale: 'zh-CN',  // 初始默认
});

// 外层站点语言切换(示例:下拉框、i18n 库回调)
document.getElementById('site-lang').addEventListener('change', function (e) {
  chat.setLanguage(e.target.value);  // 如 'en-US'、'de'、'ja'
});

// Vue / React:在 locale 变化时调用
// watch(locale, (val) => chat.setLanguage(val))

VisuChat.init(options) 参数详解

传入配置对象。第三方接入 VisuGuide 生产环境时,apiBasesiteKeywsBase 均为必填。

基础参数

参数类型默认必填说明
apiBasestring HTTP API 根地址。统一使用 https://visuguide.visuscience.com
siteKeystringmain 接入站点编号,由 VisuGuide 分配。不同挂载页使用不同 key 可隔离会话。详见「siteKey 说明」。
wsBasestring同 apiBase见下方说明 WebSocket 地址。SDK 自动转为 wss://。配置规则见「wsBase 配置说明」。
localestringen 界面语言 BCP 47,如 zh-CNen-US。仅设初始默认;运行时切换请用 chat.setLanguage()(见「语言设置」)

wsBase 配置说明

VisuGuide 生产环境 apiBasevisuguide.visuscience.com)经 CDN / DCDN 加速, WebSocket 无法经 CDN 转发,因此必须单独配置 wsBase 指向直连源站的子域名。

场景apiBase 是否经 CDN / DCDNwsBase
VisuGuide 生产接入(当前默认) 必填。使用 WS 子域名绕过 CDN,例如
wsBase: 'https://ws.visuguide.visuscience.com'
私有化 / 同源 / 直连源站 可选。可省略,SDK 默认与 apiBase 相同
请勿将 WebSocket 指向 CDN 加速域名;经 CDN / DCDN 的域名不支持 WS 长连接,会导致聊天无法收发消息。

界面参数

参数类型默认说明
titlestring聊天窗口顶部标题
subtitlestring顶部副标题(如在线状态、工作时间)
launcherSizePxnumber64右下角 FAB 边长(16–96 px,超出自动修正)
zIndexnumber2147483000挂件 DOM 层级;被全屏弹窗遮挡时可调大
positionright|leftright预留,面板对齐方向

布局参数

参数类型默认说明
layoutfloating|inlinefloating floating:视口角落浮层;inline:嵌入指定容器(如工具栏)
containerHTMLElementdocument.body 挂载节点。inline 模式必须指定具体 DOM 元素
draggablebooleanfloating:true / inline:false 是否允许拖拽 FAB 与聊天窗

资源路径

参数类型默认说明
assetsBaseUrlstring自动推断 CSS 与字体目录 URL(以 / 结尾)。JS/CSS 不在同目录时必须设置

panelSize 参数(面板尺寸)

控制聊天面板打开大小、放大尺寸、边界与本地记忆。所有字段可选。

VisuChat.init({
  apiBase: 'https://visuguide.visuscience.com',
  panelSize: {
    openWidthRatio: 0.35,
    openHeightRatio: 0.85,
    minWidthPx: 360,
    minHeightPx: 500,
    maxWidthPx: 600,
    persistLayout: true,
  },
});

打开尺寸

参数默认说明
openWidthRatio0.4初始宽度占视口比例(0.05–1)
openHeightRatio0.9初始高度占视口比例
openWidthPx初始宽度 px,设置后 ratio 失效
openHeightPx初始高度 px,设置后 ratio 失效

放大尺寸(用户点击放大按钮)

参数默认说明
enlargeWidthRatio0.8放大后宽度占视口比例
enlargeHeightRatio0.9放大后高度占视口比例

尺寸限制

参数默认说明
minWidthPx320最小宽度
minHeightPx400最小高度
maxWidthPx最大宽度,不设则仅受视口限制
maxHeightPx最大高度
absoluteMinHeightPx120极小屏幕高度硬下限
closedWidthPx0关闭时占位宽度,0 = FAB 宽度
closedHeightPx0关闭时占位高度,0 = 仅 FAB

记忆与存储

参数默认说明
persistLayouttrue是否记住用户调整的尺寸与 FAB 位置(localStorage)
layoutStorageKeyvisu_chat_widget_layout_v2存储键名;有 siteKey 时自动追加后缀

尺寸优先级:已保存的用户尺寸 → openWidthPx/openHeightPx → openWidthRatio/openHeightRatio × 视口 → min/max 约束。

nudge 参数(沉默跟进)

AI 回复后访客长时间未发言时,自动推送跟进话术。

参数类型默认说明
enabledbooleantrue是否开启
firstDelayMsnumber30000AI 回复后首次跟进延迟(毫秒)
secondDelayMsnumber45000第二次跟进延迟
maxPerSilencenumber2每段沉默最多跟进次数;访客发消息后重新计数
VisuChat.init({
  apiBase: 'https://visuguide.visuscience.com',
  nudge: { enabled: false },  // 关闭跟进
});

服务地址与使用限制

聊天、会话、消息等功能均由 SDK 内部自动完成,第三方无需直接调用后端接口。 接入时只需正确配置 apiBasewsBasesiteKey

服务地址(VisuGuide 生产环境)

用途地址说明
HTTP API https://visuguide.visuscience.com init 中 apiBase;经 CDN / DCDN 加速
WebSocket https://ws.visuguide.visuscience.com init 中 wsBase直连源站子域名,绕过 CDN

使用限制

  • siteKey:须使用 VisuGuide 平台分配的编号,与页面域名无关。
  • Origin 白名单:您的网站域名须在 VisuGuide 平台登记,否则 API / WebSocket 会被拒绝。
  • HTTPS:生产页面须 HTTPS,apiBase / wsBase 也须 HTTPS / WSS。
  • wsBase 与 CDNapiBase 经 CDN / DCDN 时,wsBase 必填且须为未走 CDN 的子域名;仅当 API 直连源站、未加速时方可省略 wsBase
  • 单例:同一页面仅一个挂件实例;重复 init 会销毁前一个。
  • 请勿绕过 SDK:鉴权由 SDK 内部处理,不支持第三方自行请求 API。

跨域与安全说明

您的页面域名与 OSS / API 域名不同,属于跨域访问:

资源是否受浏览器 CORS 限制要求
JS(script 标签)OSS 公共读即可
CSS(link 标签)一般否OSS 公共读即可
字体 woff2VisuGuide 已在 OSS 配置 CORS,第三方无需额外操作
HTTP API(fetch)须在平台登记您的站点 Origin
WebSocket是(Origin 校验)须在平台登记您的站点 Origin
接入前请联系 VisuGuide 提供您的生产域名(如 https://www.example.com)以加入白名单。 未登记域名会出现控制台 CORS / WebSocket 连接失败。

常见问题

siteKey 和域名是什么关系?

siteKey 是 VisuGuide 分配的站点编号(如 mainproduct), 用于标识 SDK 挂载点。页面域名(如 www.example.com)用于 Origin 白名单, 二者独立:先在平台登记域名,再使用分配的 siteKey 初始化 SDK。

同一域名多个页面怎么区分?

不同挂载点使用不同 siteKey 即可,会话相互隔离。

图标显示为英文文字而非图形?

字体未加载成功。检查 OSS 上 fonts/material-symbols-outlined.woff2 是否可访问,或联系 VisuGuide 确认 OSS CORS 配置。

控制台报 CORS error(API)?

您的站点 Origin 未在后端白名单中。请在 VisuGuide 平台登记域名后重试。

WebSocket 连不上?

VisuGuide 生产环境 apiBase 经 CDN 加速,wsBase 必须配置为 https://ws.visuguide.visuscience.com直连源站的子域名,不可与 CDN 加速域名相同。 同时检查 Origin 白名单是否已登记您的站点域名。

launcherSizePx 设置了没变化?

须在 VisuChat.init() 中传入,范围 16–96,修改后需刷新页面。

面板大小/位置异常?

可能受 localStorage 记忆影响。清除键名 visu_chat_widget_layout_v2visu_chat_widget_layout_v2:您的siteKey,或设 panelSize.persistLayout: false

聊天入口被全屏弹窗遮挡?

调大 zIndex(默认 2147483000)。

多站点共用域名,会话会串吗?

不会。使用不同 siteKey 即可隔离。

SPA 路由切换需要重新 init 吗?

一般不需要。用户登出等场景再调用 chat.destroy()

外层网站有语言切换,如何同步挂件?

在站点切换语言时调用 chat.setLanguage(locale),例如 chat.setLanguage('en-US')chat.setLanguage('de')。 详见上方「语言设置」章节。

如何只用代码打开、隐藏默认按钮?

可用 CSS 隐藏 [data-visu-chat-widget],再通过 chat.open() 程序化打开。

浏览器兼容性

浏览器最低版本
Chrome73+
Edge79+
Firefox63+
Safari13.1+
移动端 Chrome / Safari对应桌面版要求

不支持 IE。