Connector SDK 适合自研网站、定制 CMS、Node 服务和需要自行实现站点代理的客户。它不是一个完整插件,而是一组接入 GrowthOS 的代码能力。
SDK 当前包含三类能力:
GrowthOSServerConnectorClient:用于服务端连接器、客户后端和自研插件,持有 GrowthOS site token。
GrowthOSBrowserWidgetClient:用于浏览器代码,只能请求客户站点代理,不能接触 site token。
GrowthOSChatWidget:用于自研网站的内置 AI 客服前端窗口,包含主题、语言、推荐问题、事件上报和人工消息轮询。
| 名称 | 版本 | 更新时间 | 获取方式 |
|---|
| Connector SDK | 0.2.1 | 2026-06-08 | 下载 |
不要在浏览器代码中使用 GrowthOS site token。site token 只能保存在客户服务端或连接器服务中。
安装与接口域名
npm install ./growthos-connector-0.2.1.tgz
生产开放接口域名是:
SDK 的服务端 baseUrl 只需要传域名 origin。SDK 内部会自动拼接标准路径 /api/connector/v1。
const connectorApiUrl = "https://open.tui161.com";
不要把 baseUrl 写成 https://open.tui161.com/api/connector/v1,否则会重复拼接路径。
激活连接器
激活阶段不需要 site token。客户提交授权码后,GrowthOS 返回站点身份和 site token,连接器需要把 token 安全保存在服务端。
import { activateGrowthOSConnector } from "@growthos/connector";
const activation = await activateGrowthOSConnector(
{ baseUrl: process.env.GROWTHOS_CONNECTOR_API_URL! },
{
licenseCode: process.env.GROWTHOS_LICENSE_CODE!,
domain: "https://customer.example",
platform: "custom",
siteName: "Customer Site",
primaryLocale: "zh-CN",
supportedLocales: ["zh-CN", "en-US"]
}
);
const siteToken = activation.data.siteToken || activation.data.token;
服务端客户端
服务端客户端负责调用标准 SaaS Connector API。它可以放在客户后端、定制 CMS 插件、独立连接器服务或云函数里。
import { createGrowthOSServerConnectorClient } from "@growthos/connector";
const growthos = createGrowthOSServerConnectorClient({
baseUrl: process.env.GROWTHOS_CONNECTOR_API_URL!,
token: process.env.GROWTHOS_SITE_TOKEN!,
timeoutMs: 20000,
retries: 1
});
const status = await growthos.getSiteStatus();
服务端客户端常用能力:
| 能力 | 方法 |
|---|
| 查询站点状态 | getSiteStatus() |
| 获取 AI 客服配置 | getChatConfig(locale) |
| 发送 AI 客服消息 | sendMessage(input) |
| 拉取会话消息 | listMessages(input) |
| 获取人工在线状态 | getPresence(conversationId) |
| 上报行为事件 | track()、trackBatch() |
| 同步站点内容 | syncContent()、syncContentPages() |
| 拉取 SEO/GEO overlay | listSeoOverlays() |
| 领取云端任务 | claimNextJob() |
| 完成云端任务 | completeJob() |
浏览器代理客户端
浏览器客户端不直连 open.tui161.com,而是请求客户站点自己的代理接口。代理接口再由服务端携带 site token 转发到 GrowthOS。
import { createGrowthOSBrowserWidgetClient } from "@growthos/connector";
const client = createGrowthOSBrowserWidgetClient({
proxyBaseUrl: `${window.location.origin}/api/growthos`
});
await client.track("page_view");
const reply = await client.sendMessage({
message: "你好,我想了解报价",
locale: "zh-CN",
sourcePage: location.pathname
});
浏览器客户端会自动维护 visitorId 和 conversationId,客户不需要在前端保存 site token。
内置 AI 客服窗口
对于无法使用 WordPress 插件的自研网站,可以直接使用 SDK 挂载完整 AI 客服窗口。
import { createGrowthOSChatWidget } from "@growthos/connector";
const widget = createGrowthOSChatWidget({
proxyBaseUrl: `${window.location.origin}/api/growthos`,
theme: "light_blue",
locale: "zh-CN",
assistantName: "AI 客服",
avatarUrl: "/ai-avatar.png",
suggestedQuestions: ["什么价格?", "需要多久?", "售后如何?"]
});
窗口支持:
| 能力 | 说明 |
|---|
| 主题预设 | teal、blue、emerald、violet、amber、rose、slate、light_teal、light_blue、light_amber、light_rose |
| 自定义主题 | 使用 theme: "custom" 和 themeTokens 覆盖颜色 |
| 推荐问题 | SaaS 配置或 SDK suggestedQuestions 都可以显示,点击后自动发送 |
| 多语言 | 自动匹配浏览器语言、页面 html lang 或显式 locale |
| 访客持久化 | 自动保存 visitor ID、conversation ID 和最后消息时间 |
| 行为事件 | 自动上报 page view、打开、关闭、用户发送消息 |
| 人工接管 | 根据 presence 结果决定是否轮询人工回复 |
| 慢响应恢复 | AI 回复慢或请求中断时,会继续拉取会话消息恢复结果 |
常用控制方法:
widget.open();
widget.close();
widget.reloadConfig();
widget.setTheme("teal");
widget.destroy();
客户站点代理接口
如果使用浏览器客户端或内置窗口,客户站点需要提供以下代理路径。路径前缀可以自定义,例如 /api/growthos。
GET /api/growthos/chat/config
POST /api/growthos/chat/messages
GET /api/growthos/chat/messages
GET /api/growthos/chat/presence
POST /api/growthos/events
代理服务端再转发到标准 SaaS 开放接口:
GET https://open.tui161.com/api/connector/v1/chat/config
POST https://open.tui161.com/api/connector/v1/chat/messages
GET https://open.tui161.com/api/connector/v1/chat/messages
GET https://open.tui161.com/api/connector/v1/chat/presence
POST https://open.tui161.com/api/connector/v1/events
服务端转发时必须附带 site token:
Authorization: Bearer GROWTHOS_SITE_TOKEN
样式隔离
内置窗口默认启用 Shadow DOM,客户网站的大部分全局 CSS 不会影响窗口内部样式。
createGrowthOSChatWidget({
proxyBaseUrl: "/api/growthos",
shadowDom: true
});
如果宿主应用必须直接覆盖内部样式,可以设置 shadowDom: false。这种模式下 SDK 仍使用 growthos-widget-* 命名空间,但样式走形风险会更高。
实际上线前建议在客户真实页面预览,重点检查:
- 页面是否有很高的固定层级遮挡窗口。
- CSP 是否允许 SDK 脚本和头像图片加载。
- 全局
transform、zoom 或 iframe 是否影响固定定位。
- 移动端视口高度是否压缩输入框。
可靠性默认值
SDK 默认包含:
- 请求超时控制。
- 瞬时错误重试和退避。
Retry-After 处理。
- mutating 请求自动 idempotency key。
- 标准化
ConnectorApiError。
- 分页内容同步 helper。
重试只能覆盖网络抖动和短暂冲突。业务状态、token 泄露、接口权限和客户站点代理实现仍需要连接器服务自己保证。