我有一个我用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
中为非直接通道的欢迎消息添加一些内容。