如何使用 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)
});
截图
我自定义了 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)
});
截图