首页 > 解决方案 > BotFramework-DirectLine JS - 初始消息丢失

问题描述

我有一个使用 MS BotFramework 构建的 Bot,托管在 Azure 上。Bot 旨在通过欢迎消息启动 convo。当我通过模拟器或在 Azure 测试网络聊天中测试机器人时,机器人将按预期通过欢迎消息启动对话。

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

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

我是否缺少使此功能正常工作的东西?

标签: node.jsreactjsbotframeworkdirect-line-botframework

解决方案


鉴于这在“Webchat 测试”中对您有用,我假设您的 if 条件不是问题,但请检查它是否是if (member.id === context.activity.recipient.id) {(而不是!==)。模板上的默认设置是!==,但在模拟器之外对我不起作用。它===适用于模拟器和其他部署的渠道。

但是,根据您的用例,您可能希望为 Directline 会话提供完全不同的欢迎消息。这就是我所做的。在我的onMembersAdded处理程序中,我实际上是通过const { channelId, membersAdded } = context.activity;. channelId != 'directline'然后我在继续之前检查一下。

相反,我使用onEvent处理程序查找并响应来自 Directline 的“网络聊天/加入”事件。这样一来,欢迎的回应就毫不含糊了。对于一个非常简单的示例,它看起来像这样:

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非直接频道欢迎消息中包含一些内容。


推荐阅读