如何使用 botframework 网络聊天一个接一个地发送 2 个事件?

How to send 2 events one after the other with botframework webchat?

我自定义了 BotFramework Webchat 以向我的机器人发送 2 个事件。 第一个是针对 RGPD,我们提醒用户保存了哪些信息以及用于什么目的。第二个是 "greeting" 消息(机器人说 "Hi ...")。

但是使用 dispatch 方法,两个事件几乎同时发送,有时,webchat 会先显示问候消息,这不是我所期望的。

这是示例。

createStore({}, function (_ref) {
        var dispatch = _ref.dispatch;
        return function (next) {
            return function (action) {
                 if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
                    dispatch({
                        type: 'WEB_CHAT/SEND_EVENT',
                        payload: {
                            name: 'rgpd',
                            type: 'event'
                        }
                    });

                    dispatch({
                            type: 'WEB_CHAT/SEND_EVENT',
                            payload: {
                                name: 'greeting',
                                type: 'event'
                            }
                        });
                 }
            }
        }
}

那么我怎样才能总是在 rgpd 事件之后发送问候事件呢?

我尝试使用一个简单的 window.setTimeout,但是,这不是一个好的解决方案,因为我不知道直拨电话需要多少时间来处理第一个电话,而且结果和以前一样。

有什么想法吗? 谢谢

我建议调查 Javascript promises as they are meant to solve problems with asynchronous task. There are some great writeups here and here

类似于以下内容:

if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
  new Promise(function() {
    dispatch({
        type: 'WEB_CHAT/SEND_EVENT',
        payload: {
            name: 'rgpd',
            type: 'event'
        }
    });
  }).then(function() {
    dispatch({
      type: 'WEB_CHAT/SEND_EVENT',
      payload: {
          name: 'greeting',
          type: 'event'
      }
    });
  });
}

我建议分派一个事件并从机器人发送两个活动。

机器人框架 SDK v4(节点)

this.onEvent(async (context, next) => {
  if (context.activity.name === 'webchat/join') {
    await context.sendActivities([{ text: 'General Data Protection Regulation' }, { text: 'Backchannel Welcome Message sent from `onEvent`!' }]);
  }
  await next();
});

网络聊天 v4 - 存储中间件

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

截图