【问题标题】:Chatbot restarts conversation on minimizing聊天机器人重新启动有关最小化的对话
【发布时间】: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/generate API)。我使用“restify-cors-middleware”在本地管理 CORS(更多用于测试,而不是任何东西)。如果我使用 ngrok 与 ABS 建立隧道,那么我会更新 DirectLine Channel 设置中的白名单,位于“Enhanced Authentication Option”下。
  • 首先解决 CORS 问题,以便您按预期运行代码,然后让我们看看问题是否仍然存在。
  • 因为我是这个平台的新手,所以我不明白你所说的。你能澄清一下吗?或者,如果可能的话,您能否将其作为答案。

标签: c# node.js botframework


【解决方案1】:

查看this solution 我发布了解释如何制作基本本地令牌服务器的帖子。仅当您在纯本地运行时才在此处启用 CORS。如果您通过 ngrok 隧道连接到 Azure 机器人服务,则需要在机器人的 DirectLine 通道或应用服务上进行更改。查看this image post 以供视觉参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    相关资源
    最近更新 更多