【问题标题】:BotFramework-DirectLine JS - Initial Message MissingBotFramework-DirectLine JS - 初始消息丢失
【发布时间】:2021-09-30 20:11:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js reactjs botframework direct-line-botframework


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 哦,有趣。我会看看。我用 BotFramework Composer 构建了我的机器人,所以我还没有真正看过它的代码 - 我假设你的 sn-p 来自机器人本身?我对聊天客户端更感兴趣,而不是对实际的机器人感兴趣,但你的建议很有道理,所以我会去那里看看。
    • 是的,这来自我的“主要”机器人文件。您应该能够在机器人代码中修改它而不会破坏任何东西。这就是大多数现代示例中的根对话框。我正在使用较旧的设置,其中我基本上有一个没有自己的对话框的活动处理程序,但这在任何一种情况下都应该有效,因为它只是欢迎消息。如果您还没有onEvent 处理程序,则它应该在您现有的onMembersAdded 处理程序所在的位置。我不确定您对聊天客户端与机器人的意思是什么,您正在使用聊天客户端连接到机器人,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2017-07-02
    相关资源
    最近更新 更多