【发布时间】:2020-03-04 02:32:38
【问题描述】:
我使用 c# 和 bot 框架 sdk v4 开发了我的聊天机器人。我通过传递直线令牌使用 react js 将它连接到我的网页。但是现在,当我最小化聊天然后最大化它时,聊天会停止流程并重新启动。但是旧消息仍然存在。最小化时我不需要重新启动流程。我的 reactjs 实现代码如下。
const store = createStore({}, () => next => action => {
if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
if (action.payload.activity.from.role === 'bot') {
this.setState(() => ({ newMessage: true }));
}
}
return next(action);
});
this.state = {
minimized: true,
newMessage: false,
side: 'right',
store,
styleSet: createStyleSet({
backgroundColor: 'Transparent'
}),
token: null
};
}
async handleFetchToken() {
if (!this.state.token) {
const res = <ReactWebChat directLine={ this.directLine } />
console.log(res)
// const { token } = await res.json();
// this.setState(() => ({ token }));
}
}
handleMaximizeButtonClick() {
this.setState(() => ({
minimized: false,
newMessage: false,
}));
}
handleMinimizeButtonClick() {
this.setState(() => ({
minimized: true,
newMessage: false
}));
}
内部渲染
render() {
const {
state: { minimized, newMessage, side, store, styleSet, token }
} = this;
<WebChat
className="react-web-chat"
// onFetchToken={this.handleFetchToken}
store={store}
styleSet={styleSet}
token={"my_token_here"}
/>
请帮助我解决问题。提前致谢。
【问题讨论】:
-
我注意到您已将
onFetchToken={this.handleFetchToken}注释掉。如果您不将其注释掉并按原样使用会发生什么?我怀疑这是问题,因为WebChat.js文件至少在某种程度上依赖于这个函数。 -
我遇到了 CORS 政策问题。所以我评论了所有的 fetch token 语句
-
从哪里获取token?无论在哪里,您都需要更新 CORS 策略以包含托管您的网络聊天的页面的 URI。例如,我使用 restify 在本地运行服务器以生成令牌(通过调用
/directline/tokens/generateAPI)。我使用“restify-cors-middleware”在本地管理 CORS(更多用于测试,而不是任何东西)。如果我使用 ngrok 与 ABS 建立隧道,那么我会更新 DirectLine Channel 设置中的白名单,位于“Enhanced Authentication Option”下。 -
首先解决 CORS 问题,以便您按预期运行代码,然后让我们看看问题是否仍然存在。
-
因为我是这个平台的新手,所以我不明白你所说的。你能澄清一下吗?或者,如果可能的话,您能否将其作为答案。
标签: c# node.js botframework