DirectLine Speech适配Web Chat:无欢迎消息及机器人活动渲染
解决方案
1. 先确认机器人消息是否到达Web Chat Store
在你的store中间件中添加日志,监听机器人消息的传入事件,确认Web Chat是否接收到了机器人发送的活动:
const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => { if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') { console.log("Conexión establecida con Direct Line Speech, enviando evento 'webchat/join'"); dispatch({ type: 'WEB_CHAT/SEND_EVENT', payload: { name: 'webchat/join', value: { language: "es-ES", mail: "h@gmail.es", client: "Cliente123", centro: "CentroX", ambito: "app", traces: "logs" } } }); } // 添加日志监听机器人消息 if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') { console.log('收到机器人活动:', action.payload.activity); } return next(action); });
- 如果控制台能打印出机器人的欢迎消息,说明问题出在UI渲染环节,需要检查Web Chat配置;
- 如果没有打印,说明适配器未接收到机器人消息,需要排查连接或机器人端的配置。
2. 显式启用WebSocket连接
在创建DirectLine Speech适配器时,显式指定启用WebSocket,确保消息通道稳定:
const adapters = await window.WebChat.createDirectLineSpeechAdapters({ fetchCredentials, webSocket: true });
3. 延迟发送webchat/join事件
DirectLine Speech的连接就绪时机可能与标准DirectLine不同,尝试延迟发送join事件,避免因连接未完全就绪导致后续消息通道异常:
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') { console.log("Conexión establecida con Direct Line Speech, enviando evento 'webchat/join'"); setTimeout(() => { dispatch({ type: 'WEB_CHAT/SEND_EVENT', payload: { name: 'webchat/join', value: { language: "es-ES", mail: "h@gmail.es", client: "Cliente123", centro: "CentroX", ambito: "app", traces: "logs" } } }); }, 1000); }
4. 确保机器人返回的消息包含speak字段
DirectLine Speech适配器默认会处理语音合成,若机器人返回的消息缺少speak字段,可能影响UI渲染。在C#机器人的欢迎消息中添加该字段:
var welcomeMessage = MessageFactory.Text("欢迎使用智能客服!"); welcomeMessage.Speak = "欢迎使用智能客服!"; // 也可使用SSML格式文本 await turnContext.SendActivityAsync(welcomeMessage, cancellationToken);
5. 升级Web Chat到最新稳定版
旧版本的Web Chat可能存在DirectLine Speech适配器的兼容性问题,替换为最新版的Web Chat脚本:
<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
内容的提问来源于stack exchange,提问作者Victor Muñoz
相关产品推荐
相关产品推荐

