TLDR:我如何使用从后台发送的数据初始化我的对话,并在与用户的整个对话中使用这些信息?
使用Microsoft botbuilder,提供了一种“反向通道”机制,我可以通过它向bot发送数据,也可以从bot发送数据。
与此答案类似,我正在使用backchannel方法向bot发送conversationStarted事件,以便按照您的预期启动对话。
收到事件后,我启动一个对话框,向用户发送主动消息。
bot.on('event', event => {
if (event.name === 'conversationStarted') {
bot.beginDialog(event.address, determineWhichDialogToStart(event))
}
})
然后,我可以使用中间件或事件侦听器来截取此事件并查看其内容。果然我可以看到事件
{ type: 'event',
name: 'conversationStarted',
text: '',
myMetaProperty: 'foobar',
attachments: [],
entities: [],
address:
{ id: '8f5d3952-df3b-4340-89b4-97360f8d4965',
channelId: 'emulator',
user: { id: '33abc508-86d7-49c1-aa68-00a3491fda12' },
conversation: { id: '4e8a943d-6a45-41f2-aa11-6671cc1ca4f3' },
bot: { id: 'bot' },
serviceUrl: 'http://localhost:3010/' },
source: 'emulator',
agent: 'botbuilder',
user: { id: '33abc508-86d7-49c1-aa68-00a3491fda12' } }
但是我可以监听以查看此事件的事件无法访问会话,因为消息似乎尚未发送到一个。
如果我使用botBuilder
中间件,或者路由
事件,我就会看到它变成了消息而不是事件,并且丢失了传递给事件的元数据。
{ type: 'message',
agent: 'botbuilder',
source: 'emulator',
sourceEvent: {},
address:
{ id: '8f5d3952-df3b-4340-89b4-97360f8d4965',
channelId: 'emulator',
user: { id: '33abc508-86d7-49c1-aa68-00a3491fda12' },
conversation: { id: '4e8a943d-6a45-41f2-aa11-6671cc1ca4f3' },
bot: { id: 'bot' },
serviceUrl: 'http://localhost:3010/' },
text: '',
user: { id: '33abc508-86d7-49c1-aa68-00a3491fda12' } }
我试图通过Github上的注释在我的receive
event/middleware中访问会话,但虽然我访问了会话,但它不是会话。
bot.on('receive', event => {
bot.loadSessionWithoutDispatching(event.address, (error, session) => {
session.conversationData.myMetaProperty = event.myMetaProperty
})
})
这实际上最终启动了一个新的会话-已经研究了load会话
/loadSessionWithouse tDispatting
,它们都导致了start会话
,因此当我试图在对话框中使用它时,我将数据添加到会话中丢失了
bot.dialog('example', [
(session, args, next) => {
console.log(session.conversationData.myMetaProperty) // nope
console.log(session.cantUseThisEither) // nope
session.send('foo')
next()
}
])
现在我要重申一个问题,因为已经有了一些背景知识,我如何使用从后台发送的数据初始化我的对话,并在与用户的整个对话中使用这些信息?
您可以通过beginDialog传递数据(地址:IAddress,dialogId:string,dialogArgs?:any,done?:(错误:Error)=
您可以在以下位置参考源代码:https://github.com/Microsoft/BotBuilder/blob/master/Node/core/src/bots/UniversalBot.ts#L243更多细节。
最后,我启动了一个通用对话框,它设置了我的会话,然后转到根对话框。
bot.on('event', event => {
if (event.name === 'conversationStarted') {
bot.beginDialog(event.address, 'initialise-conversation', {
myMetaProperty: event.myMetaProperty
});
}
});
bot.dialog('initialise-conversation', (session, args, next) => {
session.conversationData.myMetaProperty = args.myMetaProperty
session.beginDialog('/');
});
然后,每当我在整个对话中需要myMetaProperty
时,我可以从session.conversationData
获取它
--
作为对下面评论的回应,这里有一些额外的信息可能会对某人有所帮助。
您在bot上接收的事件的形状必须包含地址
。例如,这里有一个我发送给我的机器人。
{ myMetaProperty: 'foo',
name: 'conversationStarted',
type: 'event',
address:
{ id: '4q5aaBw77aNGGvrpkeji8A',
channelId: 'custom-directline',
user: { id: 'c214imy6PCJZY4G1x2AXSD' },
conversation: { id: 'bGvMBjEmFTg3DMxsbvJGjH' },
bot: { id: 'bot' },
serviceUrl: 'https://localhost:3010/' },
source: 'custom-directline',
agent: 'botbuilder',
user: { id: 'c214imy6PCJZY4G1x2AXSD' } }
首先确保你正在发送地址。将消息路由回个人的关键信息位是用户和会话对象。
例如,如果您正在使用botframework webchat的反向通道发送信息,您将按照以下方式进行操作。
var user = { id: uuidv4() };
var botConnection = new BotChat.DirectLine({...});
botConnection.postActivity({
type: 'event',
from: user,
name: 'conversationStarted',
myMetaProperty: 'foo',
}).subscribe();
BotChat.App({
user: user,
botConnection: botConnection,
}, document.getElementById("bot"));
这将由上述事件侦听器拾取。
另一件需要注意的事情是,emulator(可能还有其他客户端/通道)发送一个conversationUpdate
事件,我在使用它时刚刚将它传递到我的conversationStarted
事件上。下面是侦听器,以供参考,以防有用。
bot.on('conversationUpdate', message => {
message.membersAdded &&
message.membersAdded
.filter(identity => identity.id === message.address.bot.id)
.forEach(identity => bot.emit('conversationStarted', message));
});
问题内容: 在React中,我有类似的文件 parent.js 包含文本框和按钮 child.js 包含P标签 App.js 包含父组件和子组件 问题 将“父级”上的“文本框”值传递给子级,并将其显示在子级标记中。 完整代码 堆叠 问题答案: 更新了示例以将数据传递给子组件。 https://stackblitz.com/edit/react- trmj9i?file=child.js 在下面添加
-bash-4.1$ 任何帮助都将不胜感激。
本文向大家介绍数据传输的事务有几种?相关面试题,主要包含被问及数据传输的事务有几种?时的应答技巧和注意事项,需要的朋友参考一下 数据传输的事务定义通常有以下三种级别: 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输 最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输. 精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被
我有一个组件A,它触发一个对话框 此组件触发PicuploadComponent,我在此上传图像并接收带有一些数据响应
当使用链式法则计算成本函数相对于层权重的斜率时,公式变为: 与: 作为感应局部场: 输出端: 作为输入 请注意,在层上方的代码中,层是最后一层或输出层。和sigmoid\u导数(自输出)这是当前层的激活作为用作激活函数的sigmoid函数导数的输入。 问题是: 我们不应该使用这个sigmoid\u导数(np.dot(self.layer1,self.weights2))而不是这个sigmoid\u
我正试图传送一封电子邮件到控制器,但由于某些原因它不工作,我收到404错误。 当我将email变量更改为没有“.”的字符串时。它起作用了。 这就是它在客户端的样子- 在控制器里- 感谢任何帮助!!谢谢