我们有一个团队机器人,在MS Teams中发布消息。新对话的第一个活动总是一个自适应卡,每隔一段时间,我们就会用一个新的卡更新它。在我用这个机器人创建了一个新的Team之前,这个工作还算正常。
我们正在尝试用UpdateActivityAsync更新,返回NotFound。
经过一些故障排除后,我注意到了以下问题。
我们用的是老的机器人框架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'似乎没有关系。
我们无法在您提供的确切时间戳处找到日志,但确实在这些日期找到了对话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请求中发送的卡片是否是已经在原始消息中的同一张卡片呢?