You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何程序化触发LiveChatWidget聊天及预聊天表单提交问题

问题1:程序化触发@microsoft/omnichannel-chat-widget中LiveChatWidget的聊天初始化

要程序化触发聊天初始化,核心是结合OmnichannelChatSDK的API与组件状态控制:

  • 先保存chatSDK实例到ref中,方便后续调用
  • 调用chatSDK.startChat()发起聊天初始化,同时通过visible属性控制聊天窗口的显示

修改后的示例代码:

import { OmnichannelChatSDK } from "@microsoft/omnichannel-chat-sdk";
import { LiveChatWidget } from "@microsoft/omnichannel-chat-widget";
import { InputValidationPane, ChatButton, PreChatSurveyPane } from "@microsoft/omnichannel-chat-components";
import React, { useEffect, useState, useRef } from "react";

const getOmnichannelChatConfig = () => {
  const omnichannelConfig = {
    orgId: "xxx", 
    orgUrl: "https://example.com", 
    widgetId: "xxx", 
  };
  return omnichannelConfig;
};

const ChatWidgetV1 = () => {
  const [liveChatWidgetProps, setLiveChatWidgetProps] = useState(null);
  const [isChatVisible, setIsChatVisible] = useState(false);
  const chatSDKRef = useRef(null);

  const init = async () => {
    const omnichannelConfig = getOmnichannelChatConfig();
    const chatSDK = new OmnichannelChatSDK(omnichannelConfig);
    await chatSDK.initialize();
    const chatConfig = await chatSDK.getLiveChatConfig();
    chatSDKRef.current = chatSDK;

    const liveChatWidgetProps = {
      styleProps: {
        generalStyles: { width: "400px", height: "600px", bottom: "30px", right: "30px" },
      },
      chatSDK,
      chatConfig,
      webChatContainerProps: { disableMarkdownMessageFormatting: false },
      visible: isChatVisible
    };
    setLiveChatWidgetProps(liveChatWidgetProps);
  };

  // 程序化触发聊天的函数,可绑定到按钮点击或自动触发
  const triggerChatInit = async () => {
    if (!chatSDKRef.current) return;
    try {
      await chatSDKRef.current.startChat();
      setIsChatVisible(true);
    } catch (error) {
      console.error("触发聊天失败:", error);
    }
  };

  useEffect(() => {
    init();
    // 如需页面加载自动触发,可取消下一行注释
    // triggerChatInit();
  }, []);

  return (
    <div>
      <button onClick={triggerChatInit}>开启聊天</button>
      {liveChatWidgetProps && (
        <LiveChatWidget
          {...liveChatWidgetProps}
          visible={isChatVisible}
        ></LiveChatWidget>
      )}
    </div>
  );
};
export default ChatWidgetV1;

问题2:自定义预聊天表单提交验证并正常发起聊天

自定义onSubmit会覆盖组件默认的提交逻辑,导致点击提交后无法触发聊天。解决思路是:在自定义验证通过后,手动调用chatSDK.startChat()并传入预聊天数据。

修改后的核心代码:

const ChatWidgetV1 = () => {
  const [liveChatWidgetProps, setLiveChatWidgetProps] = useState(null);
  const chatSDKRef = useRef(null);

  const init = async () => {
    const omnichannelConfig = getOmnichannelChatConfig();
    const chatSDK = new OmnichannelChatSDK(omnichannelConfig);
    await chatSDK.initialize();
    const chatConfig = await chatSDK.getLiveChatConfig();
    chatSDKRef.current = chatSDK;

    const liveChatWidgetProps = {
      styleProps: {
        generalStyles: { width: "400px", height: "600px", bottom: "30px", right: "30px" },
      },
      chatSDK,
      chatConfig,
      webChatContainerProps: { disableMarkdownMessageFormatting: false },
    };
    setLiveChatWidgetProps(liveChatWidgetProps);
  };

  useEffect(() => {
    init();
  }, []);

  return (
    <div>
      {liveChatWidgetProps && (
        <LiveChatWidget
          {...liveChatWidgetProps}
          preChatSurveyPaneProps={{
            controlProps: {
              onSubmit: async (values) => {
                try {
                  // 自定义验证逻辑示例
                  if (!values.email?.includes('@')) {
                    throw new Error("请输入有效的邮箱地址");
                  }
                  if (!values.name?.trim()) {
                    throw new Error("请填写您的姓名");
                  }

                  // 验证通过后,调用SDK发起聊天并传入预聊天数据
                  await chatSDKRef.current.startChat({
                    preChatSurveyResponse: values
                  });
                } catch (error) {
                  console.error("表单验证失败:", error.message);
                  // 此处可添加用户提示逻辑,比如弹出错误提示框
                }
              },
            },
          }}
        ></LiveChatWidget>
      )}
    </div>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:20:42