You need to enable JavaScript to run this app. 如何在Next.js项目中接入Facebook客服聊天Messenger功能
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js项目中接入Facebook客服聊天Messenger功能

解答

代码错误说明

你当前的代码存在两处核心结构错误,这是功能无法运行的直接原因:

  • 标签未闭合:<noscript>标签缺少闭合标记,导致后续DOM结构解析异常
  • 节点位置错误:所有Facebook相关的DOM节点(fb-root容器、SDK加载脚本、客服聊天容器)都放在了<body>标签外部,浏览器不会正常渲染这部分内容

正确接入步骤

修改_document.js的结构,将所有Facebook相关代码移入<body>标签内部,放在<NextScript />之后即可,修改后参考代码如下:

import Document, { Html, Head, Main, NextScript } from "next/document";
import React from "react";
import { getLangParam } from "../utils";

export default class MyDocument extends Document {
  render() {
    return (
      <Html >
        <Head />
        <body>
          <noscript
            dangerouslySetInnerHTML={{
              __html: `<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MPQD53D"
                        height="0" width="0" style="display:none;visibility:hidden"></iframe>`,
            }}
          />
          <Main />
          <NextScript />
          {/* Facebook聊天相关代码移入body内部 */}
          <div id="fb-root"></div>
          <script
          dangerouslySetInnerHTML={{
            __html: `
            window.fbAsyncInit = function() {
              FB.init({
                xfbml            : true,
                version          : 'v10.0'
              });
            };
            (function(d, s, id) {
              var js, fjs = d.getElementsByTagName(s)[0];
              if (d.getElementById(id)) return;
              js = d.createElement(s); js.id = id;
              js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
              fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));
            `,
          }}
        />
        <div className="fb-customerchat"
          attribution="biz_inbox"
          page_id="1043670075778655">
        </div>
        </body>
      </Html>
    );
  }
}

修改后还需要确认两个配置:

  • 你使用的Facebook公共主页已经开启了客服聊天功能,且填写的page_id和主页ID一致
  • 你的站点域名已经添加到Facebook后台客服插件的白名单中,避免跨域拦截

更优实现方案

如果需要降低第三方SDK对首屏性能的影响,可以采用按需加载的方案:

  • 封装独立的聊天组件,仅在组件挂载完成后再动态注入Facebook SDK,不需要全局嵌入在_document中
  • 可以配置为用户触发特定交互(比如点击咨询按钮)或者页面滚动到一定比例后再加载SDK,进一步减少首屏资源消耗

内容的提问来源于stack exchange,提问作者Jenn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 00:57:03