在新创建的团队中进行测试时,团队 UpdateActivity 事件会有所不同

use*_*791 12 c# botframework microsoft-teams

我们有一个团队机器人,可以在 MS 团队中发布消息。新对话的第一个活动总是一张自适应卡片,我们偶尔会用一张新卡片更新它。这一切正常,直到我用这个机器人组建了一个新团队。

我们正在尝试使用 UpdateActivityAsync 进行更新,返回 NotFound。

经过一些故障排除后,我注意到以下几点:

  1. 新团队有一个不同的名称:19:...@thread.tacv2 而不是 19:...@thread.skype。
  2. 当我使用较老的团队时,它会按预期工作。
  3. 当我仅使用文本更新活动时(因此没有自适应卡作为附件),它将始终按预期更新。
  4. 使用文本更新后,我们可以使用自适应卡进行一次更新。使用自适应卡进行一次更新后,任何后续使用自适应卡的更新都将返回 NotFound。
  5. 因此,作为一种解决方法,我现在首先使用文本进行更新,然后立即使用卡发送更新。这是一个糟糕的 UI 事情(闪烁),但它现在有效。

我们使用旧的 bo​​t 框架版本 3,我知道它不再维护,但据我所知,它应该仍然有效(不打算停止运行)。还考虑到上述几点(特别是第 4 点),我希望它在后台使用相同的调用。

因此,这适用于较旧的团队,但不适用于使用 @thread.tacv2 的团队

await connector.Conversations.UpdateActivityAsync(
      teamsConversationId,
      activityId,
      (Activity)messageWithCard);
Run Code Online (Sandbox Code Playgroud)

对于@thread.tacv2我们现在必须使用的团队

var messageWithText = Activity.CreateMessageActivity();
messageWithText.ChannelId = teamsConversationId;
messageWithText.Id = activityId;
messageWithText.Type = ActivityTypes.Message;
messageWithText.Text = "Updated";

await connector.Conversations.UpdateActivityAsync(
      teamsConversationId,
      activityId,
      (Activity)messageWithText);

await connector.Conversations.UpdateActivityAsync(
      teamsConversationId,
      activityId,
      (Activity)messageWithCard);
Run Code Online (Sandbox Code Playgroud)

异常没有提供太多细节:

操作返回了无效的状态代码“NotFound”

未找到对话。

有谁知道如何避免团队之间的这种变化并允许使用卡片更新活动?

另外(这不太重要,但我认为添加它很有用)我注意到有时(我现在已经看过两次)Teams 似乎无法呈现自适应卡片并显示 URIObject XML,其中包含错误:cards.unsupported . 但是,如果我退出客户端并重新启动它,它会呈现出很好的效果……到目前为止,我从未在旧频道中看到过这种情况。

Teams 客户端版本 1.3.00.362(64 位)(无开发模式)。普通 Azure 租户(无预览/试用)

编辑 11/05/2020 似乎这也发生在具有“旧”名称(@thread.skype)的团队中。所以 '@thread.tacv2' 似乎无关。

小智 1

我们无法找到您提供的确切时间戳的日志,但确实找到了这些日期的对话 ID 的日志,并看到 UTC 中具有相同分钟和秒数的 404。我们假设提供的时间戳是在不同的时区中表示的。

从日志中我们看到以下模式:

Bot sends PUT activity with card - 404 returned
Bot sends PUT activity with text - 200 returned
Bot sends PUT activity with card - 200 returned
Run Code Online (Sandbox Code Playgroud)

这看起来与您在原始帖子中分享的模式相同。

有一种情况会导致每当机器人在新消息发送到回复链后尝试使用完全相同的卡更新现有卡消息时,PUTS 上就会返回 404。

这些是回购步骤:

 Bot send card to reply chain (can be root message or reply message)
    Any user sends a message to the chain
    Bot attempts to update message with the exact same card
Run Code Online (Sandbox Code Playgroud)

您的机器人有可能遇到这种情况吗?有没有办法检查您的机器人在第一个 PUT 请求中发送的卡是否与原始消息中已存在的卡相同