退出事件/欢迎事件未触发

时间:2020-02-18 21:09:20

标签: botframework

当用户退出聊天机器人窗口(或网站)(或欢迎消息)时,我们正在尝试发布一些事件/消息,但是到目前为止,这些事件并未触发。

我可以在Inspector工具中看到

截屏2020-02-18,下午3 15 39

创建了各种活动/会话,聊天机器人可以运行,但是没有触发欢迎/退出事件。

我们正在使用的代码几乎与此处的文档代码相同:https://github.com/microsoft/BotFramework-WebChat/blob/master/docs/WELCOME_MESSAGE.md

此处:How to handle user leaving conversation

我有一个在关闭窗口时触发的函数,如下所示:

    const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
    return next( action );});      

        window.addEventListener( 'sendEventActivity', ( { data } ) => {

          store.dispatch({
            type: 'WEB_CHAT/SEND_EVENT',
            payload: {
              name: 'user_event',
              value: {
                name: 'end_conversation',
                value: 'user ended conversation'
              },
              text: 'The user has left the conversation.'
            }
          })

        });

        function exitEvent(){
          const eventSendActivity = new Event( 'sendEventActivity' );
          eventSendActivity.data = 'User left conversation';
          window.dispatchEvent( eventSendActivity );
          console.log('Exit Event Submitted (hopefully)');
        }
        exitEvent();

我尝试了其他变体,在渲染聊天上方,渲染聊天之后定义了商店,并在各个时间和地点从各个位置发送了欢迎消息,但似乎无法发送。

我们正在使用https://cdn.botframework.com/botframework-webchat/latest/webchat.js

任何想法可能是什么问题?不确定我们出了什么问题或为什么不触发-理论上将可以正常工作的代码直接复制到我们的代码中似乎并不能解决问题。

在此先感谢您,如果我未能提供任何必要的详细信息,这是chatbot的新功能,请不要在github上发布太多内容。非常感谢,

编辑:

我能够将上述代码与以下代码结合使用:https://github.com/microsoft/BotFramework-WebChat/issues/2120#issuecomment-516056614,以实现我想要的功能。我将在下面发布,以防其他人...

const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
            if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
               dispatch({
                  type: 'WEB_CHAT/SEND_EVENT',
                  payload: {
                     name: 'webchat/join'
                  }
               });
            }
            return next(action);
         });

          window.addEventListener( 'sendEventActivity', ( { data } ) => {

          store.dispatch( {
              type: 'WEB_CHAT/SEND_EVENT',
              payload: {
                 name: 'webchat/exit'
              }
            } );
          } );

          document.getElementById("action_menu_btn").addEventListener( 'click', function() {
            const eventSendActivity = new Event( 'sendEventActivity' );
            eventSendActivity.data = 'User left conversation';
            window.dispatchEvent( eventSendActivity );
            console.log('End Converstaion Event Fired');
          });

干杯!

1 个答案:

答案 0 :(得分:2)

我在其他post中没有提及(我将对其进行更新),但是代码起作用的原因是由于window.onbeforeunload()函数。没有它,该窗口将在任何代码完成执行之前关闭。结果是没有事件被创建,没有被侦听器捕获,也没有通过Web Chat存储发送到机器人。

在这里,使用上述内容刷新页面将产生“用户离开对话”活动。

enter image description here


还有一点要注意,您创建并通过exitEvent()传递的任何函数都将在页面加载后立即运行。采取以下代码,该代码通过浏览器获取用户的位置(位于结束</script>标记之前)。如您所见,它甚至在Web Chat之前就已加载。如果您希望某个功能根据机器人传递的活动来运行,请使用store的{​​{3}}(例如DIRECT_LINE / INCOMING_ACTIVITY或其他)或通过可用的{{3 }}。

let geoLoc = async () => {
  await navigator.geolocation.getCurrentPosition(position => {
    console.log('Latitude: ', position.coords.latitude);
    console.log('Longitude: ', position.coords.longitude);
  });
}

geoLoc();

actions


关于欢迎消息,您有两个选择。从您的漫游器作为活动发送(参考此middleware),或者在收到一些初始活动后在您的页面上发起一个事件(参考此enter image description here)。

最后,我建议先修改代码,然后再进行修改。通常这会使我绊倒,所以以为我会过去。

希望有帮助!