互客鱼 返回主站

嵌入小部件

语音、潜在客户和持久化

小部件不仅仅是一个聊天框。它内联捕获潜在客户、转录语音、在重新加载时持久化, 并在操作员接管时显示实时的“人工在这里”状态。 本页涵盖每个功能以及如何配置它。

对话持久化

每个访客都会获得一个 anon_id(首次访问时写入 localStorage 的随机字符串)。 重新加载时,小部件使用相同的 anon_id 调用 /v1/widget/init, 如果最近一次对话少于 24 小时,服务器会恢复该对话。

Init 响应包括最后 30 条消息,因此聊天记录以访客离开的顺序重新水合。 “清除对话”按钮(在小部件标题中)在对话行上写入 cleared_at 时间戳 — 过去的消息保留在数据库中以用于分析 + 潜在客户链接,但不再向访客显示。

语音麦克风

输入区域的麦克风按钮让访客可以口述而不是打字。 小部件使用浏览器内置的 SpeechRecognition API — 没有服务器端语音模型。 录音时麦克风显示声纳环动画;再次点击停止并将转录文本插入输入框(如果已有文本则追加,因此您可以口述、编辑,然后再口述更多)。

没有 SpeechRecognition 的浏览器(Firefox、旧版 Safari)不显示麦克风按钮。 没有回退 — 该功能是机会性的。

潜在客户捕获

小部件可以内联收集联系信息,而无需强制访客离开对话。 潜在客户捕获在以下情况下触发:

  • kind=lead_capture 的行为规则匹配。
  • 访客明确要求被联系(“有人能给我打电话吗?”,“给我发一封报价邮件”)。
  • 您将 CTA 按钮连接到 lead_capture 操作。

表单字段按智能体配置。默认是姓名 + 电子邮件;您可以添加电话、公司和自定义字段。 提交的潜在客户 POST 到 /v1/widget/leads(每个 JWT 速率限制)并立即出现在 /app/inbox(每工作区潜在客户列表)中。

基于意图的智能捕获

最新更新(commit 9190aa5)添加了基于意图的捕获: 小部件监视对话中暗示真实销售意图的短语 — 定价问题、“这适合…吗?”、“我可以演示…” — 并在几轮后主动提供潜在客户表单。 阈值和短语列表可按智能体调整。

人工接管

当工作区操作员在 /app/inbox 中认领对话时, 小部件接收 Reverb 事件(conversation.takeover)并更新聊天标题以显示“人工在这里”徽章。 从那时起,AI 保持暂停 — 每条访客消息都发送给操作员,每个操作员回复都流式传输给访客。 访客看到一个连续的线程;在幕后,消息 roleassistant 翻转到 human-agent 再返回。

请参阅 收件箱和人工接管 了解操作员端。

引用

每当智能体从检索源回答时,引用芯片会出现在消息下方。 点击一个在新标签页中打开源 URL。 芯片编号([1], [2])与响应文本中的内联引用匹配 — 关心的访客可以验证答案;不关心的访客看到干净的回复。

精选答案也可以包括可选的引用 URL — 当预设答案来自特定页面时有用。

流式传输

消息通过 Server-Sent Events 逐 token 流式传输。 小部件读取流并实时将 token 附加到 DOM。 如果流在中途出错(网络闪烁、LLM 超时),小部件在显示错误状态之前自动重试最多 3 次 — 即使重试也只出现一个用户气泡(commit a576e1c)。

品牌化

小部件页脚默认显示“由互客鱼提供支持”链接。 对于启用了 remove_branding 功能标志的计划的工作区,它被隐藏 — 请参阅 计费和计划

品牌标签、URL 和徽标都来自平台管理员配置(config('branding.*') + 可选的 app_settings 单例覆盖), 因此自托管部署可以完全重新品牌化页脚。

存储

小部件使用 localStorage 用于:

  • anon_id — 持久访客标识符。
  • 对话清除状态(访客通过“清除”隐藏了哪些消息 ID)。

客户端不存储任何个人身份信息。JWT 本身存在于内存中 — 每次 init 时重新颁发。