【问题标题】:Typing indicator shows even afterr message is sent Bot Framework Composer即使在发送消息后打字指示器也会显示 Bot Framework Composer
【发布时间】:2021-12-01 18:42:20
【问题描述】:

正是标题所说的。我一直在尝试为通过 Bot Framework Composer 创建的机器人实现打字指示器(在机器人发送消息之前)。指导方针是将appsettings.json 中的showTyping 属性设置为true,但是当我这样做时,它有时会在机器人发送消息之前显示打字指示器,但有时它会在机器人消息之后显示打字指示器。

我已经查看了这个错误,但似乎没有任何地方支持 Bot Framework Composer,但是有资源可以解决使用 Bot Framework SDK 发生的同样问题。我已广泛阅读并尝试了有关 SDK 版本的所有建议,但似乎无法使其正常工作。我不知道我是否遗漏了一些将组件连接在一起的代码,但我已经做了很多事情,通常包括

  • 创建CustomShowTypingMiddleware.cs
  • 创建和编辑AdapterWithErrorHandler.cs
  • 使用Startup.cs中的适配器

我不知道是否要向其他任何 composer c# 文件添加其他内容(例如 BotController.csProgram.cs),但这些是我在代码示例中注意到的更改,所以这就是全部我补充说。通过进行这些更改,它似乎什么也没做。它不会破坏机器人,但也不会添加任何打字功能。我尝试过的另一种只能在本地工作的方法是创建一个自定义中间件组件(在此 https://docs.microsoft.com/en-us/composer/how-to-create-custom-actions?tabs=csharp#export-the-bot-runtime 之后),在我的作曲家机器人中引用它,然后将新组件的名称添加到 appsettings.json 中的 components 数组中.这成功发送了打字活动并在本地聊天中显示,但每当我将代码部署到 Azure 并在 Webchat 中测试或在链接到此托管 Azure 机器人的客户端应用程序中使用它时,它总是会发回 502/500 错误说请求 webchat/join 中缺少秘密或令牌,而实际上 Authorization 标头显示其他内容。

如果有任何其他方法(适配器或自定义组件)工作或新方法工作,我将不胜感激。

【问题讨论】:

    标签: c# botframework direct-line-botframework web-chat bot-framework-composer


    【解决方案1】:

    @owenpww

    设置"showTyping":"true" 是启用打字中间件所需的一切,正如您所发现的。

    打字中间件的工作方式有几个方面。在发送任何打字活动之前,请求必须继续多长时间存在延迟。将此视为所需的阈值,以允许机器人在发送 任何 键入活动之前进行回复。默认值为 500 毫秒。第二个方面是在发送响应和取消打字活动之前发送打字活动的频率/频率。默认值为每 2 秒。你可以看到这个here。第三个方面是客户端想要呈现他们的打字活动多长时间。 spec recommends displaying for 3 seconds。看起来网络聊天至少接近那个。规范还说,如果为活动分配了 ID,客户端可以清除活动。

    所以,我的问题是;您在 WebChat/Emulator 中看到了什么(它在 Emulator 中的行为是否相同?)关于输入活动的顺序以及与消息活动的关系。您是否看到多个打字活动?您是否在跟踪中以正确的顺序显示,但在聊天中以错误的顺序显示(用户看到的)?如果您能够按摩您的机器人以获得更长/更短的响应(不超过 15 秒),这对行为有何影响?

    这是您在 Emulator 或 Composer Webchat 中寻找的内容:

    【讨论】:

    • 嗨@Dana V,感谢您的回复。我知道这些事情,但不确定如何对它们采取行动,因为我使用的是 Composer 而不是 SDK。当我使用模拟器/作曲家进行测试时,日志总是按用户输入 -> 打字 -> 机器人响应的顺序显示,尽管我没有注意到 UI 上的任何内容,因为机器人似乎在本地运行得更快。但是,当我将代码发布到我的 Azure Bot 时,除了我在 UI 上看到的内容之外,我无法看到事件的顺序,正如我所提到的,有时是用户输入 > 打字 > 机器人消息,但有时是用户输入 >机器人消息 > 打字
    • “如果您能够按摩您的机器人以采取更长/更短的响应(不超过 15 秒),这对行为有何影响?”按摩我的机器人是什么意思,或者你的意思是给我的机器人发消息?无论哪种情况,我都认为我不明白你的意思。
    • 你好@dana-v 不确定我是否正确标记了你
    【解决方案2】:

    原来我的自定义机器人组件实现的问题在于它是一个外部项目。

    我认为是因为docs 有点过时了。他们引用了一个.sln 文件,据我所知,该文件在模板 Composer 项目中不再存在。因此,我在 VS 中创建了一个空白解决方案,在其中打开了我现有的机器人项目并为组件创建了一个新项目。我主要遵循指令here,这与文档非常相似(仅针对组件而不是操作),但最后我将组件项目移到了机器人项目目录中。然后我调整了<bot>.csproj中的项目引用指向新移动的组件项目。在<component>.csproj<PropertyGroup> 中添加了一些<Generate...Attribute>false</Generate...Attribute> 属性(现在再次在机器人项目中而不是在它之外)以消除我遇到的重复属性错误。删除了bot项目和组件项目的bin/obj/目录。然后它在本地和 Azure 上都运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2019-03-03
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多