文档

常见问题

用户需要安装任何东西吗?

不需要。用户只需将一个 script 标签粘贴到自己的 HTML 中 —— 无需 npm 包、无需构建步骤、无需依赖。额外功能会自动从同一来源加载。

它会与我的 CSS 冲突吗?

不会。挂件在 Shadow DOM 内部渲染,将其样式与您的页面完全隔离。

它支持单页应用(React、Vue、Next.js)吗?

支持。脚本只加载一次,并在路由变化时保持存在。对于 React/Next.js,请将脚本放在您的根布局中。

Next.js App Routertsx
// app/layout.tsx (App Router)
import Script from 'next/script';
import { ReactNode } from 'react';

export default function RootLayout({ children }: { children: ReactNode }) {
  return (
    <html lang="en">
      <body>
        {children}
        <Script id="respondo-init" strategy="afterInteractive">
          {`
            window.Respondo = window.Respondo || {};
            Respondo.init = Respondo.init || function(c) { window.RespondoAIConfig = c; };
            Respondo.q = Respondo.q || [];
            Respondo.identify = Respondo.identify || function(d) { Respondo.q.push(['identify', d]); };
            Respondo.init({
              agentId: 'YOUR_AGENT_ID',
              channelId: 'YOUR_CHANNEL_ID'
            });
          `}
        </Script>
        <Script src="https://api.respondo.ai/widget/widget.js" strategy="afterInteractive" />
      </body>
    </html>
  );
}

对话被解决后会发生什么?

解决后的新消息会自动开启一个与前一个对话关联的后续对话(在您的收件箱中显示为「Continued from #N」)。语言和先前的对话记录等上下文会被继承,访客看到的是一段连续的聊天。如果之前是团队成员在处理这个已解决的对话,后续对话会被路由回您的团队而不是 AI;否则由 AI 接手。

挂件是如何加载的?

挂件是异步加载的(async),因此它永远不会阻塞页面渲染。核心包约 180KB(gzip 后约 50KB);可选功能(营销活动、产品导览)会在挂件挂载后作为独立的懒加载分块加载,因此初始页面渲染永远不会被阻塞。

升级是如何工作的?

用户可以点击「转人工」按钮、输入请求人工的短语,或者当 AI 无法依据您的知识库作答时,由它自行转交。一旦升级,AI 便停止回复,所有后续消息都会转发给您的支持团队。详见 升级与转交 章节。

升级后用户还能继续与 AI 聊天吗?

可以。挂件会显示一个「继续与 AI 对话」按钮,让用户取消升级并恢复 AI 对话。

知识库与网站抓取#

为什么我的网站抓取被拦截了?

“被拦截”表示网站——或其防护层(Cloudflare、WAF、反机器人插件)——拒绝了我们的抓取器:起始页面或 robots.txt 在每次尝试时都返回访问错误或“正在检查您的浏览器”验证,或者 robots.txt 明确禁止我们的抓取器。之前导入的页面保持完好;在网站放行之前,重新同步会以同样方式失败。请网站所有者在防护设置中放行 User-Agent RespondoAI-Crawler(完整字符串:Mozilla/5.0 (compatible; RespondoAI-Crawler/1.0; +https://respondo.ai/bot))——在 Cloudflare 中位于 Security → WAF → Custom rules——如果原因是 robots.txt,请为 User-agent: RespondoAI-Crawler 添加允许规则。Respondo 不公布固定的抓取器 IP 地址,请按 User-Agent 加入白名单;如果来源上显示的错误中列出了某个 IP,也请一并放行。如果网站无法修改,请改为以文件或粘贴文本的形式添加相同内容。

抓取已完成,但只找到很少的页面

我们通过网站的站点地图(robots.txt 中的 Sitemap: 行,或 /sitemap.xml 等常见位置)以及从起始 URL 沿链接逐层发现页面——最深 10 层链接,每个来源最多 5,000 个页面。只导入同一网站上且位于起始 URL 路径之下的页面:从 https://example.com/help 开始的抓取会跳过 /blog,因此请从根路径开始,或添加包含路径。没有任何链接或站点地图指向的页面、被 robots.txt 禁止的页面以及需要登录的页面都不会被找到。近似重复的页面(打印版、带跟踪参数的变体)会合并为一个。内容完全由 JavaScript 绘制的页面会被识别并通过基于浏览器的备用方式渲染,因此页面数偏少通常是范围或站点地图问题,而不是渲染问题。

如何将抓取限制在网站的某一个栏目?

在添加网站对话框中展开 Advanced,填写 Only crawl paths starting with(只抓取以此开头的路径)和/或 Skip paths starting with(跳过以此开头的路径)——每行一个路径,每个字段最多 50 条。匹配按完整路径段进行:/docs 匹配 /docs 和 /docs/getting-started,但不匹配 /docs-archive;末尾斜杠会被忽略,也可以粘贴完整 URL——只使用其路径部分。跳过规则优先于包含规则。同样的规则适用于站点地图以及该来源之后的每一次重新同步。

Respondo 多久重新抓取一次我的网站?

每个网站来源的页面面板中都有 Auto-refresh 计划:Off(关闭)、Daily(每 24 小时)或 Weekly(每 7 天)。计划抓取是增量的:站点地图中 lastmod 早于上次抓取的页面会被跳过,未变化的页面不会重新索引,已变化的页面会重新索引,已消失的页面会被移除。要立即刷新,请使用来源菜单中的 Re-sync,或 Knowledge 页面上的 Re-sync all。

“这次我们无法读取该网站”——发生了什么?

这是通用失败:网站未及时响应、域名无法解析、服务器返回错误、起始页面没有可读文本,或地址未找到。详细信息显示在来源上。请检查该 URL 能否在浏览器隐私窗口中打开、域名是否有拼写错误,以及起始页面是否是真正的内容页而非登录页。社交网络和即时通讯平台(Facebook、Instagram、LinkedIn、X、YouTube 及类似平台)完全无法导入——它们在抓取开始前就会被拒绝。您现有的页面会被保留;设置了计划的来源会在下次运行时重试,否则请在网站恢复可访问后重新同步。

“我们的搜索索引已满”和“我们无法为此来源建立索引”是什么意思?

两者都出现在内容已成功读取之后。索引已满表示该来源要复制进去的搜索索引在 Respondo 一侧没有空间了——这是 Respondo 的限制,不是您内容的问题。页面已存储,已建立索引的内容会继续回答,我们的团队会自动收到通知,一旦有空间就会为该来源建立索引;提前重新同步会以同样方式失败。无法为此来源建立索引表示这次搜索索引构建失败——这是我们这边的临时错误;现有数据完好,任务会自动重试。如果任一提示持续出现,请使用错误上的“询问 Copilot”。

长页面是否只根据开头部分作答?

不是。每个抓取的页面都会被切分为约 1,600 个字符、相互重叠的片段,每个片段附带页面标题单独建立索引,因此答案可以来自长文章的任何部分。引用仍然每个页面只显示一个链接。在此变更之前导入的页面会在后续重新同步时重新切分。

如何就抓取错误获得帮助?

Knowledge 页面上的每个抓取或索引错误都带有 询问 Copilot 按钮。它会打开附带该错误的 Copilot,Copilot 会基于 Respondo 自身的帮助文档,针对您的情况给出具体步骤。这项帮助是免费的——不计入您的 AI 请求数。 如果这些步骤没有解决问题,直接说出来即可——“没有用”就足够了。随后 Copilot 会提供一张卡片,用于把问题移交给 Respondo 团队:卡片会列出确切要发送的内容,在您确认之前不会发出任何东西,他们的回复会出现在同一个 Copilot 会话中。如果无法从这里移交,Copilot 会直接说明,而不是保持沉默。

无法送达客户的消息#

回复显示“Not delivered”——这是什么意思,我该先做什么?

收件箱中每条发出的消息都带有投递状态指示:Queued(排队中——相继写下的回复会被合并,几分钟后作为一封邮件发出)、Sending…、Sent、Delivered,或者一个红色的失败状态。失败分为三种:Not delivered——渠道拒绝了这条消息;Bounced 并在旁边标注退信子类型——收件人的邮件服务器拒收了该邮件;以及 Marked as spam——收件人举报了它。将鼠标悬停或点击该标签:提示框会给出服务商的原话,退信还会附上原始 SMTP 诊断信息。旁边最多有两个操作——Retry / Send again,它会真正重新发送;以及 Ask Copilot(询问 Copilot),它会打开附带该错误的 Copilot。如果根本没有重试按钮,说明该地址已被封锁,再发一次也会以同样方式失败。若 Sent 或 Delivered 旁边带有 N files not delivered,表示正文已送达但附件没有——该渠道无法承载这个文件。

为什么我的邮件没有送达客户?

有四种不同的原因,标签能把它们区分开。永久性退信表示该地址不存在或拒收邮件——没有重试按钮,并且该地址会进入禁发名单。临时性退信是邮箱已满或接收服务器上的一时故障;这时会提供 Send again,通常稍后就能成功。诊断信息中提到 SPF、DKIM、DMARC 或 5.7.515 的退信则是另一回事:收件人的邮件系统拒收该消息,是因为您的发件域名未通过身份验证检查。在域名修好之前,新的回复会以完全相同的方式退回,因此暂时改用其他渠道回复,并在 Settings → Channels 中修复该邮件渠道的 DNS 记录。最后,Marked as spam 表示收件人点了“举报垃圾邮件”:该地址被禁发,我们不再向它发送。营销活动报告中还可能出现 The email provider rejected this message(邮件服务商拒绝了这条消息)——邮件尚未发出就被永久拒绝,通常是发件域名未验证或地址格式有误——以及 The email provider rejected our credentials(邮件服务商拒绝了我们的凭据),这属于工作区的配置问题,而与那一个联系人无关。

禁发名单是什么?地址如何从中移除?

它是一份仅属于您工作区的邮件地址清单,Respondo 拒绝向这些地址发送。当一条消息硬退信(永久性拒收)、有人把您的某封邮件举报为垃圾邮件,或者地址被手动封锁时,该地址就会进入名单。软退信绝不会导致地址被禁发。封锁生效期间,发往该地址的营销活动投递会被跳过并标注 This address is blocked after an earlier bounce or complaint(该地址因此前的退信或投诉而被封锁),收件箱中的回复也会在发出之前被拒绝。只有消息的真实收件人才会被禁发——一封退信通知无法封锁任意地址。仪表板中没有这份名单的界面:所有者或管理员可以用 GET https://api.respondo.ai/api/v1/integrations/email/suppressions 读取它,用 DELETE https://api.respondo.ai/api/v1/integrations/email/suppressions/<email> 解除某一条,或者请 Respondo 支持团队代为处理。只有在确知邮箱确实已修复时才解除硬退信——再次向一个已失效的地址发信会损害您域名的信誉。

WhatsApp 不接受我的回复——24 小时窗口

WhatsApp 只允许企业在客户最后一条消息之后的 24 小时内发送自由格式的消息;超过之后 Meta 会以错误 131047 拒绝一切。Respondo 会按人分别跟踪这个窗口,一旦确知窗口已过期,就会在发送前拦下回复。当 Respondo 完全没有窗口记录时——导入的联系人,或者从未给您写过消息的号码——它不会拦截:消息会送到 Meta,由 Meta 决定。往下走的路恰好有两条。等客户再次写来——他们的消息会把窗口重新打开 24 小时,您的回复届时就能发出——或者发送一个经 Meta 审核通过的模板。模板无法从会话的回复框中发送。请在 Outbound → WhatsApp templates 中管理它们:Sync(同步)会拉取您的号码上已注册的模板,New template(新建模板)会向 Meta 提交一个模板,审核通常需要一天或更久。随后通过一个面向该联系人的 outbound 活动发送已通过审核的模板。模板对窗口内外的人同样可达,但仅限其状态为 approved(已通过)期间。

“该渠道已断开连接”/“该渠道尚未连接”

Disconnected(已断开连接)表示集成仍然存在但不再生效——它的访问令牌被吊销或已过期,或者有人断开了它。Not connected(尚未连接)表示联系人的这个联系方式背后根本没有任何集成。两者都在 Settings → Channels 中修复,已断开的渠道会归入各自的标题下,每张卡片上都有 Reconnect 按钮;重新连接后再重试该消息。有两个相邻的情况看起来相似但并不相同:发件域名未验证的邮件渠道无法切换为 Live,在 DKIM 和 SPF 得到确认之前什么都发不出;而仅接收渠道按设计就不发出消息,因此在那里点 Retry 永远不会成功。

“没有可以联系到此人的渠道”/“此联系人没有邮件地址”

两者都出现在营销活动的投递报告中,而不是收件箱里。前者表示联系人的任何联系方式都不匹配该活动所使用的渠道;如果他们唯一的联系方式位于仅接收渠道上,这会作为一次有意的跳过被单独报告。后者表示该活动发送邮件,而联系人档案中没有邮件地址。Telegram 有自己的情况:如果对方从未给您的机器人写过消息,就没有可以写入的会话,因为 Bot API 禁止机器人主动发起消息——必须由对方发出第一条消息。修复办法是:给联系人补上缺失的地址、扩大该活动覆盖的渠道,或者让它回退到邮件。

联系人已退订——我还能发什么?

They had already unsubscribed(他们此前已退订)表示该联系人带有全局退订标记——通过您某封邮件中的退订链接设置、随导入一并带入,或由同事手动切换。营销活动和系列在所有渠道上都会跳过这类联系人,而不仅是邮件,并且该次投递会记为跳过而非失败。同事在会话中一对一的回复则被刻意设计为不受其阻止:退订针对的是群发,而回复一个主动写信给您的人是人的判断。该状态在联系人上显示为 Outbound: Subscribed / Unsubscribed,联系人列表可以按它筛选,联系人上的 Re-subscribe 按钮可将其恢复——只有在对方主动要求时才使用。

你们会重试多少次?手动点 Retry 安全吗?

从收件箱发出的回复会交给一个队列,最多尝试五次,各次之间大约间隔 3、10、30 和 30 分钟。只有瞬时故障才会重试——超时、连接被拒、频率限制、服务商自身的服务器错误。永久性拒绝(地址未知、发件域名未验证、凭据被拒)会立即标记为失败,因为重复一次也只会得到相同的答复。营销活动投递运行在自己的队列上,最多尝试六次,等待时间更短——5 秒、30 秒、2 分钟、10 分钟;这些次数用尽后,该次投递会以 Delivery kept failing and was stopped after several attempts(投递持续失败,几次尝试后已停止)结束,而不是永远停在“排队中”。手动点 Retry 是安全的。它只作用于确实处于失败状态的消息;对邮件而言,它会先向服务商查询原件的下落:如果那封邮件确实已经发出,该行会转为已送达,而不是再发一份副本,真正的重发则会使用新的幂等键。在再发一份会出错的情形下——硬退信、垃圾邮件投诉、仍在发送途中的消息——按钮不会出现,或者重试会连同原因一起被拒绝。

原因仍然不明——如何获得帮助?

每条失败的消息旁边都有 Ask Copilot(询问 Copilot)按钮。它会打开 Copilot,并附上错误、渠道和会话,Copilot 会基于 Respondo 自身的帮助文档,针对这一具体失败给出步骤。这项帮助是免费的——不计入您的 AI 请求数。 如果这些步骤没有解决问题,直接说出来即可——“没有用”就足够了。随后 Copilot 会提供一张卡片,用于把问题移交给 Respondo 团队:卡片会列出确切要发送的内容,在您确认之前不会发出任何东西,他们的回复会出现在同一个 Copilot 会话中。如果无法从这里移交,Copilot 会直接说明,而不是保持沉默。