当你在新创建的团队中测试时,团队更新活动事件的差异。

问题描述 投票:11回答:1

我们有一个团队机器人,在MS Teams中发布消息。新对话的第一个活动总是一个自适应卡,每隔一段时间,我们就会用一个新的卡更新它。在我用这个机器人创建了一个新的Team之前,这个工作还算正常。

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

经过一些故障排除后,我注意到了以下问题。

  1. 新的团队有一个不同的名字:19:[email protected],而不是19:[email protected]
  2. 当我使用一个旧的团队时,它能像预期的那样工作。
  3. 当我只用文本更新活动时(所以没有自适应卡作为附件),它总是会按预期更新。
  4. 在用文本更新后,我们能够用自适应卡更新一次。在用自适应卡更新一次后,任何后续的自适应卡更新都会返回NotFound。
  5. 所以,作为一个变通办法,我现在先用文本更新,之后马上用卡片发送更新。这是一个不好的UI的事情(闪烁),但它目前工作。

我们用的是老的机器人框架3版本,我知道现在已经不维护了,但就我找到的资料来看,应该还能用(没有停止运营的计划)。另外鉴于以上几点(特别是第4点),我希望它在引擎盖下使用相同的调用。

所以,这对老的团队来说是可行的,但对有@thread.tacv2的团队就不行了。

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

而对于有 @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);

异常没有提供太多细节。

操作返回了一个无效的状态码 "NotFound

对话找不到。

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

另外(这是不太重要的,但我认为补充一下是有用的)我注意到有时(我已经看到两次了)Teams似乎无法渲染自适应卡,而是显示URIObject XML,包含错误:卡.不支持。然而,如果我退出客户端并重新启动它,它就能正常渲染......。我在老频道里至今没有见过这种情况。

Teams客户端版本1.3.00.362(64位)(无开发模式).正常的Azure租户(无预览试验)

EDIT 11052020 似乎这种情况也会发生在使用'旧'名称(@thread.skype)的队伍中。所以'@thread.tacv2'似乎没有关系。

c# botframework microsoft-teams
1个回答
0
投票

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

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

Bot sends PUT activity with card - 404 returned
Bot sends PUT activity with text - 200 returned
Bot sends PUT activity with card - 200 returned

这看起来和你在原帖中分享的模式一样。

有一种情况是,每当机器人在向回复链发送新消息后试图用完全相同的卡更新现有的卡消息时,都会在PUTS上导致404s返回

这些都是回帖的步骤。

 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

你的机器人有没有可能遇到这种情况?有没有办法检查你的机器人在第一次PUT请求中发送的卡片是否是已经在原始消息中的同一张卡片呢?

© www.soinside.com 2019 - 2024. All rights reserved.