C# BotFramework V4:如何从bot发送事件并在react WebChat中捕获它?

C# BotFramework V4:如何从bot发送事件并在react WebChat中捕获它?,c#,react-native,botframework,web-chat,C#,React Native,Botframework,Web Chat,我从我的bot(.NET SDK)发送一个名为“locationRequest”的事件 我想在WebChat客户端应用程序中捕获此事件,基于React中编码的可缩小web聊天,并将布尔locationRequested设置为True: const store = createStore({}, ({ dispatch }) => next => action => { if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED')

我从我的bot(.NET SDK)发送一个名为“locationRequest”的事件

我想在WebChat客户端应用程序中捕获此事件,基于React中编码的可缩小web聊天,并将布尔locationRequested设置为True:

const store = createStore({}, ({ dispatch }) => next => action => {
  if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
    dispatch({
      type: 'WEB_CHAT/SEND_EVENT',
      payload: {
        name: 'webchat/join',
      }
    });
  }
  else if(action.name == 'locationRequest'){
    this.setState(() => ({
      locationRequested: true
    }));
  }
  return next(action);
});

我没法赶上这次活动,你知道吗?

你走对了路。基本上,您可以监视“DIRECT_LINE/INCOMING_ACTIVITY”事件,然后检查传入活动是否具有适当的名称。有关更多详细信息,请查看下面的代码片段和Web聊天示例

conststore=createStore({},({dispatch})=>next=>action=>{
如果(action.type==='DIRECT\u LINE/CONNECT\u completed'){
派遣({
键入:“网络聊天/发送事件”,
有效载荷:{
名称:'webchat/join',
}
});
}
else if(action.type===“直接线路/传入活动”){
if(action.payload.activity.name=='locationRequest'){
此.setState(()=>({
请求的位置:true
}));
}
}
返回下一步(操作);
});

您正在从bot发送一个活动,这意味着您可以尝试捕获该活动,然后检查该活动的名称是否为“locationRequest”,然后更改locationRequested变量的值

它看起来像这样:

// We are adding a new middleware to customize the behavior of DIRECT_LINE/INCOMING_ACTIVITY.
    const store = window.WebChat.createStore(
      {},
      ({ dispatch }) => next => action => {
       if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
         if (action.payload.activity.name == "locationRequest") {
           this.setState(() => ({ locationRequested: true }));
         }
       }

        return next(action);
      }
    );

希望这有帮助!顺便说一句,我的答案是基于

尝试添加描述所用技术、框架或编程语言的标记。非常感谢它的成功!在我的用例中,上下文位于一个带有WaterWallSteps的ComponentDialog中:-机器人正在发送一个选项提示“您希望机器人获取您的位置吗?是/否”-如果是,机器人将发送一个“locationRequest”事件-WebChat接收事件并显示一个GetLocation按钮-当用户单击按钮时,它将地理位置发送到机器人,对话框继续。我们如何暂停ComponentDialog,让用户单击webchat中的按钮?很高兴我能提供帮助。如果你能把我的回答标为接受,我将不胜感激。关于你的第二个问题,我建议你提出一个关于StackOverflow的新问题。评论中需要太多的代码。我的第二个问题就在这里:
// We are adding a new middleware to customize the behavior of DIRECT_LINE/INCOMING_ACTIVITY.
    const store = window.WebChat.createStore(
      {},
      ({ dispatch }) => next => action => {
       if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
         if (action.payload.activity.name == "locationRequest") {
           this.setState(() => ({ locationRequested: true }));
         }
       }

        return next(action);
      }
    );