即使在发送消息后 Bot Framework Composer 也会显示键入指示器

Typing indicator shows even afterr message is sent Bot Framework Composer

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

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

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

对于尝试使任一方法(适配器或自定义组件)工作或新方法(如果有任何其他问题),我将不胜感激。

@owenpww

如您所见,只需设置 "showTyping":"true" 即可启用键入中间件。

类型化中间件的工作方式有几个方面。在发送任何输入 activity 之前请求必须继续多长时间存在延迟。将此视为所需的阈值,以允许机器人在发送 any 输入 activity 之前进行回复。默认值为 500 毫秒。第二个方面是如何在发送响应之前发送 often/frequent 打字活动并取消打字活动。默认为每 2 秒一次。你可以看到这个here. The third aspect is how long the client wants to render their typing activity. The spec recommends displaying for 3 seconds。看起来网络聊天至少接近于此。该规范还说,如果为客户端分配了一个 id,则客户端可以清除 activity。

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

以下是您要在 Emulator 或 Composer Webchat 中查找的内容:

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

我认为是因为 docs are a littled dated. They reference a .sln file that as far as I know does not exist anymore in the template Composer projects. Because of this, I created a blank solution in VS where I opened my existing bot project and created a new project for the component. I mainly followed the instructions here 与文档非常相似(只是专门针对组件而不是操作),但最后我将组件项目移到了 bot 项目目录中。然后我调整了 <bot>.csproj 中的项目引用以指向新移动的组件项目。在 <component>.csproj<PropertyGroup> 中添加了一些 <Generate...Attribute>false</Generate...Attribute> 属性(现在再次在 bot 项目中而不是在它之外)以删除我得到的重复属性错误。删除了机器人项目和组件项目的 bin/obj/ 目录。然后它在本地和 Azure 上都运行良好。