Nexoply

使用教程

Vue 聊天机器人:为 Vue 3 或 Nuxt 应用添加 AI 聊天机器人

为 Vue 3 或 Nuxt 添加 AI 聊天机器人:复制即用的 Chatbot.vue 组件、index.html 中的一个 script 标签,或 useHead。无需 npm 包,也无需 AI 密钥。

更新于 2026年10月6日 阅读约 7 分钟

简要回答

Nexoply 只是一个 script 标签,而不是 npm 包。在 Vue 3 应用中,复制下方小巧的 Chatbot.vue 组件(它在 onMounted 中只添加一次脚本),并在 App.vue 中渲染它;或者把该标签粘贴到 index.html 中,紧挨在 </body> 之前。在 Nuxt 3 中,用 tagPosition: "bodyClose" 把它添加到 nuxt.config.ts 的 app.head.script 中,或在 app.vue 中使用 useHead。它只在浏览器中运行,Vue Router 导航后依然保留,并通过 Shadow DOM 让它的样式与您的样式互不干扰。

  • 无需插件或 npm 包:小组件始终是 https://nexoply.com/widget.js,并带有一个保存您密钥的 data-chatbot 属性。
  • Vue 3(Vite):使用 <script setup> 和 onMounted 的复制即用 Chatbot.vue 组件,或在 index.html 的 </body> 之前放一个标签。
  • Nuxt 3:nuxt.config.ts 中的 app.head.script,或 app.vue 中的 useHead。它只在浏览器中运行,因此兼容 SSR。
  • 加载两次不会有问题:它对每个聊天机器人密钥只挂载一次,因此热重载和重复挂载不会产生第二个按钮。
  • 用 window.dispatchEvent(new Event("nexoply:open-chat")) 从您自己的按钮打开聊天。

开始之前

您需要一个 Nexoply 账户和您的聊天机器人密钥。免费注册(免费版每月包含 50 次对话,无需信用卡),添加企业信息或从网站导入,然后在控制台中打开聊天机器人并复制安装代码。它看起来是这样的:

<script src="https://nexoply.com/widget.js" data-chatbot="YOUR-KEY" async></script>

data-chatbot 的值就是您的密钥。它是公开的,不是机密:它只用来告诉小组件属于哪家企业,因此可以放在客户端代码和您的代码仓库中。请严格保留属性名称以及包含 widget.js 的 src,因为小组件会从自身的 script 标签读取设置。

Vue 3:可直接复制的 Chatbot.vue 组件

创建 src/components/Chatbot.vue。该组件自身不渲染任何内容:挂载时,它只向页面添加一次 Nexoply 脚本,由小组件绘制聊天按钮和聊天窗口。

<!-- src/components/Chatbot.vue -->
<script setup lang="ts">
import { onMounted } from "vue";

const props = defineProps<{ chatbotKey: string }>();

onMounted(() => {
  // 没有密钥,或脚本已在页面上:无需任何操作。
  if (!props.chatbotKey || document.querySelector("script[data-chatbot]")) return;
  const s = document.createElement("script");
  s.src = "https://nexoply.com/widget.js";
  s.async = true;
  s.dataset.chatbot = props.chatbotKey;
  document.body.appendChild(s);
});
</script>

<template><slot /></template>

在整个访问期间始终保持挂载的 App.vue 中渲染它一次。把密钥以 VITE_NEXOPLY_KEY=YOUR-KEY 的形式写入 .env:

<!-- src/App.vue -->
<script setup lang="ts">
import Chatbot from "./components/Chatbot.vue";

const nexoplyKey = import.meta.env.VITE_NEXOPLY_KEY;
</script>

<template>
  <!-- 您的布局和路由 -->
  <Chatbot :chatbot-key="nexoplyKey" />
</template>

在 JavaScript 项目中,请去掉 lang="ts",并用 defineProps({ chatbotKey: String }) 代替类型参数。由于它是一个普通组件,您也可以用 v-if 渲染它,例如 v-if="hasConsent",这样只有在访客接受您的同意横幅后才加载聊天。

不需要组件?最简单的安装方式是把该标签粘贴到项目根目录下的 index.html 中,紧挨在 </body> 之前。它以异步方式加载,绝不会阻塞渲染:

<body>
  <div id="app"></div>
  <script type="module" src="/src/main.ts"></script>
  <script src="https://nexoply.com/widget.js" data-chatbot="YOUR-KEY" async></script>
</body>

Nuxt 3:nuxt.config.ts 或 useHead

在 Nuxt 中不需要组件:在 nuxt.config.ts 中为整个网站添加脚本即可。tagPosition: "bodyClose" 会把它放在 </body> 之前:

export default defineNuxtConfig({
  app: {
    head: {
      script: [
        {
          src: "https://nexoply.com/widget.js",
          async: true,
          "data-chatbot": "YOUR-KEY",
          tagPosition: "bodyClose",
        },
      ],
    },
  },
});

也可以在 app.vue 中用 useHead 添加。如果您想把密钥放在环境变量中,请在 nuxt.config.ts 中声明 runtimeConfig: { public: { nexoplyKey: "" } }并设置 NUXT_PUBLIC_NEXOPLY_KEY;否则直接在此处写入密钥即可:

<script setup lang="ts">
useHead({
  script: [
    {
      src: "https://nexoply.com/widget.js",
      async: true,
      "data-chatbot": useRuntimeConfig().public.nexoplyKey,
      tagPosition: "bodyClose",
    },
  ],
});
</script>

服务器端渲染没有问题:Nuxt 在 HTML 中渲染该标签,而小组件只在浏览器中运行。它不会触及您应用的标记,因此不会出现水合不匹配。

Vue 聊天机器人库与托管式 AI 聊天机器人

搜索 Vue 聊天机器人时,您会看到两类工具,它们解决的是不同的问题:

  • 聊天机器人 UI 库为聊天界面本身提供 Vue 组件:消息列表、输入框、气泡,有时还有预设的对话步骤。界面背后的一切都需要您自己构建:固定脚本,或使用您自己的 API 密钥调用 AI 模型的后端,以及它作答所依据的内容、对话存储和防滥用措施。当聊天是您产品的一部分时,它很合适,例如一个处理您用户自有数据的助手。
  • 托管式 AI 聊天机器人(例如 Nexoply)把界面、AI 和后端一起提供。它只根据您添加或导入的企业信息(服务和价格、常见问题、政策、营业时间)回答访客的问题,不知道时会如实说明。无需 AI 密钥,也无需服务器代码;对话、未解答问题和垃圾信息防护都在控制台中处理。它适合需要回答企业相关问题的面向客户的网站。

如果您希望完全掌控界面和模型,请从 UI 库入手。如果目标是回答访客的问题,又不想构建或运行后端,托管式小组件的工作量更小。请参阅 Nexoply 如何根据您的企业信息作答。

在 Vue 应用中的表现

  • 位于您的应用之外。它挂载在 document.body 上,位于 #app(或 Nuxt 的根节点)之外,因此重新渲染、布局变化和路由切换绝不会移除它。
  • Vue Router 导航。访客在客户端于页面间跳转时,对话会继续进行;URL 变化时会再次检查页面规则(例如只在 /pricing 上显示侧边标签),无需额外代码。
  • Shadow DOM。您的 CSS、Tailwind 类或 UI 库不会影响聊天窗口,聊天窗口的样式也不会影响您的应用。
  • 轻量。它以异步方式加载,不设置 Cookie,只在 localStorage 中保存匿名访客 ID,在 sessionStorage 中保存当前对话。

用您自己的按钮打开聊天

想在首屏区域或价格表中放一个“有问题?问问我们”按钮?在点击处理函数中派发 nexoply:open-chat 事件即可:

<script setup lang="ts">
function openChat() {
  window.dispatchEvent(new Event("nexoply:open-chat"));
}
</script>

<template>
  <button type="button" @click="openChat">向我们提问</button>
</template>

如果要在页面加载后立即打开聊天,请在 script 标签中添加 data-open="true"(在 Nuxt 中为 "data-open": "true")。

本地测试、允许的网站与故障排查

  • 允许的网站。如果您在“聊天机器人”页面填写了仅允许在以下网站上使用,请把带端口的开发主机也加进去:Vite 为 localhost:5173,Nuxt 为 localhost:3000。或者在测试期间让该列表保持为空。
  • Content-Security-Policy。如果您的应用发送 CSP 响应头,请在 script-src、connect-src 和 img-src 中允许 https://nexoply.com。
  • 测试一下。运行开发服务器,打开应用,提一个真实的问题,然后确认这段对话出现在控制台的对话中。

如果按钮没有出现:

  • 检查标签。在浏览器开发者工具中,查找带有 data-chatbot 属性且 src 包含 widget.js 的脚本。如果没有找到,密钥可能为空:请检查是否设置了 VITE_NEXOPLY_KEY 或 NUXT_PUBLIC_NEXOPLY_KEY,并在修改 .env 后重启开发服务器。
  • 检查控制台和“网络”标签。CSP 错误表示尚未允许 nexoply.com;请求被拦截也可能来自广告拦截器,请在不带扩展的无痕窗口中试一试。
  • 检查控制台设置。确认启用聊天机器人开关处于打开状态,并且如果您使用了允许列表,您的域名(或带端口的 localhost)已在其中。
  • 是有意隐藏的吗?设置为“不显示按钮”的页面规则会在匹配的页面上隐藏它。

后续步骤:无需改动代码即可自定义

标签添加好之后,其余一切都在控制台中完成,更改大约一分钟内就会在网站上生效,无需重新部署。在聊天机器人 → 自定义中,您可以设置消息按钮的样式(图标或您自己的图片、文字标签、形状、大小、配色、位置),也可以改用屏幕边缘的侧边标签。您可以为手机设置不同的外观,并用页面规则在指定页面上更改或隐藏按钮(例如 /blog/*)。还可以让聊天窗口的样式与品牌相匹配,并在开始页面添加预约、致电或 WhatsApp 等按钮。

请查看 AI 助手如何了解您的企业和所有自定义选项,或比较各方案和对话限额。使用其他框架开发?请参阅 React 聊天机器人组件指南和如何用 next/script 为 Next.js 添加聊天机器人。

常见问题

有简单的 Vue 聊天机器人组件吗?

有:就是本指南中的 Chatbot.vue 组件,一个使用 onMounted 的 <script setup> 代码块,复制到您自己的项目中即可。没有需要安装的官方 Vue 插件或 npm 包,您也不需要。小组件始终是在 data-chatbot 属性中带有您密钥的脚本 https://nexoply.com/widget.js,所有设置都在控制台中。

它能与 Vue Router 和其他 SPA 导航配合使用吗?

能。它挂载在您的应用之外,访客在客户端导航时会保留对话,并在 URL 变化时重新检查页面规则,无需额外代码。

我需要后端或 AI API 密钥吗?

不需要。AI 和后端由 Nexoply 运行,任何 AI 密钥或私密数据都不会发送到浏览器。您代码中唯一的值是聊天机器人密钥,它是公开的,无法访问您的账户。

它支持 Nuxt SSR 吗?

支持。用 nuxt.config.ts 或 useHead 正常渲染 script 标签即可。小组件只在浏览器中运行,不会触及 Nuxt 的标记,因此不会出现水合问题。

能否只在部分页面上显示它?

能,使用页面规则:控制台 → 聊天机器人 → 自定义 → 消息按钮 → 部分页面不同。对需要隐藏的页面选择“不显示按钮”。小组件加载后没有用于移除它的 API,因此页面规则就是实现方式。

能用我自己的按钮打开聊天吗?

能。在任何点击处理函数中调用 window.dispatchEvent(new Event("nexoply:open-chat")) 即可。

让您的网站替您解答问题

添加企业信息、测试 AI 助手并将其放到您的网站上,全部可在免费版中完成。