如何用jQuery/JS预填充动态加载输入框并触发指定Power Virtual Agent聊天流
解决方案
你之前通过jQuery修改输入框DOM的方案失效,是因为微软Web Chat基于React开发,输入框值由内部状态管理,手动修改DOM的内容会被React的状态同步逻辑覆盖,不需要操作DOM,直接通过Web Chat内置的store发送触发活动即可实现动态指定初始主题。
具体修改方案
直接修改你现有Web Chat初始化代码中的store逻辑,在DirectLine连接完成的回调中,发送对应主题的触发短语即可,支持静默触发(用户看不到发送的关键词),也可自定义根据当前页面动态生成触发词。
修改后的核心代码片段
const store = window.WebChat.createStore( {}, ({ dispatch }) => next => action => { if (action.type === "DIRECT_LINE/CONNECT_FULFILLED") { // 保留原有的会话初始化事件(不需要可删除) dispatch({ meta: { method: "keyboard", }, payload: { activity: { channelData: { postBack: true, }, name: 'startConversation', type: "event" }, }, type: "DIRECT_LINE/POST_ACTIVITY", }); // 新增:发送主题触发短语 // 可根据当前页面信息动态生成triggerKeyword的值,例如根据URL路径、页面参数判断 const triggerKeyword = "red"; // 替换为你PVA中对应主题的触发短语 dispatch({ meta: { method: "keyboard", }, payload: { activity: { channelData: { postBack: true, // 设为true则用户看不到这条发送的消息,体验更流畅;需要显示则改为false }, text: triggerKeyword, type: "message" } }, type: "DIRECT_LINE/POST_ACTIVITY" }); } return next(action); } );
动态匹配页面的示例
如果要根据用户当前访问的页面自动匹配不同的触发词,可以按以下逻辑自定义:
// 示例:根据页面路径匹配触发词 let triggerKeyword = "默认咨询"; if (location.pathname.includes('/product')) { triggerKeyword = "产品咨询"; } else if (location.pathname.includes('/order')) { triggerKeyword = "订单查询"; } else if (location.pathname.includes('/refund')) { triggerKeyword = "退款申请"; }
内容的提问来源于stack exchange,提问作者thisisready
相关产品推荐
相关产品推荐

