BotFramework-DirectLine JS -初始消息丢失



我有一个我用MS BotFramework构建的Bot,托管在Azure上。Bot是用来用欢迎信息开始对话的。当我通过模拟器测试机器人时,或者在Azure上测试网络聊天,机器人会像预期的那样用欢迎消息启动对话。

但是,在使用BotFramework-DirectLineJS的聊天客户端中,直到我发送消息,bot才会响应欢迎消息(以及对用户刚刚发送的消息的响应)。

我的期望是,当我创建DirectLine的新实例并订阅它的活动时,这个欢迎消息将通过。然而,这似乎并没有发生。

我错过了什么让这个功能工作吗?

鉴于这是为您工作的"在网络聊天测试",我假设你的条件不是问题,但检查它是否是if (member.id === context.activity.recipient.id) {(而不是!==)。模板上的默认值是!==,但这对我在模拟器之外不起作用。对于===,它可以在模拟器和其他部署的通道中工作。

然而,根据您的用例,您可能希望为direcline会话提供完全不同的欢迎信息。这就是我的工作。在我的onMembersAdded处理程序中,我实际上通过const { channelId, membersAdded } = context.activity;从活动中获得channelId。然后在继续之前检查channelId != 'directline'

相反,我使用onEvent处理程序来寻找和应对"聊天/加入"事件从直达线路。这样一来,受欢迎的回应就不会含糊不清了。对于一个非常简单的例子,它看起来像这样:

this.onEvent(async (context, next) => {
if (context.activity.name && context.activity.name === 'webchat/join') {
await context.sendActivity('Welcome to the Directline channel bot!');
}
await this.userState.saveChanges(context);
await this.conversationState.saveChanges(context);
})

如果使用这种方法,您仍然需要在onMembersAdded中为非直接通道的欢迎消息添加一些内容。

最新更新