父网页跳转时如何保持Microsoft Bot可见及会话状态,附QnA Maker问题
需求实现解决方案
一、页面跳转后保留Bot可见性与会话历史的实现方式
常规iframe嵌入方式会随父页面刷新销毁,可根据你的技术栈选择以下两种方案:
- 方案1:公共布局集成Web Chat+会话持久化(推荐)
放弃iframe嵌入逻辑,直接在官网所有页面的公共通用模板中集成Web Chat JS SDK,同时做两处配置:- 给每个访问用户生成唯一固定标识,存储在
localStorage中,调用Direct Line接口时始终携带该标识 - 开启Web Chat的会话持久化能力,将历史会话记录存储在
localStorage/sessionStorage中,页面加载时自动读取历史记录渲染
该方案下Bot控件会固定悬浮在页面固定位置(如右下角),用户跳转页面时每个页面都会加载Bot控件且自动恢复之前的全部会话内容,用户感知不到Bot重启,对现有业务逻辑侵入最小。
- 给每个访问用户生成唯一固定标识,存储在
- 方案2:顶层框架嵌套方案
若不想调整现有多页网站的业务逻辑,可新增一个父级页面,将整站内容放在父级页面的下层iframe中,Bot控件放在父级页面的固定悬浮层,用户点击链接时仅跳转下层iframe的内容,父级页面的Bot始终保持运行,不会被刷新。
该方案改造成本极低,只需调整全站链接的target属性指向下层iframe的name属性,避免链接跳出框架即可。
二、QnA Maker链接target属性修改方案
可选择以下两种方式实现自定义属性替换:
- 方式1:Bot端拦截修改
在Bot Composer中添加自定义中间件,拦截QnA Maker返回的答案内容,通过正则匹配将所有target="_blank"属性替换为你需要的target="_top"/target="_parent",再返回给前端渲染。 - 方式2:前端层统一处理(更灵活)
在前端集成Web Chat时,监听消息渲染事件,所有包含链接的消息渲染前,统一修改DOM元素的target属性,覆盖QnA Maker的默认配置。该方式不需要修改Bot端逻辑,调整无需重新发布Bot,推荐优先使用。
内容的提问来源于stack exchange,提问作者StellarFan
相关产品推荐
相关产品推荐

