在新创建的团队中进行测试时,Teams UpdateActivity 事件有所不同
Teams UpdateActivity events difference when you test in newly created teams
我们有一个在 MS Teams 中发布消息的 Teams 机器人。新对话的第一个 activity 始终是自适应卡片,我们偶尔会用新卡片更新它。在我用这个机器人组建一个新团队之前,这一切正常。
我们正在尝试使用 UpdateActivityAsync 进行更新,return NotFound。
经过一些故障排除后,我注意到以下几点:
- 新团队有一个不同的名字:19:...@thread.tacv2 而不是 19:...@thread.skype.
- 当我使用旧团队时,它按预期工作。
- 当我仅使用文本更新 activity 时(因此没有自适应卡作为附件)它总是会按预期更新。
- 用文字更新后,我们可以用自适应卡片更新一次。使用自适应卡进行一次更新后,使用自适应卡进行的任何后续更新都将 return NotFound。
- 因此,作为一种解决方法,我现在首先使用文本进行更新,然后立即使用卡片发送更新。这是一个糟糕的 UI 事情(闪烁),但它现在有效。
我们使用旧的 bot 框架版本 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);
异常没有提供太多细节:
操作 returned 了一个无效的状态代码 'NotFound'
未找到对话。
有谁知道如何避免团队之间的这种变化并允许使用卡片更新 activity?
此外(这不太重要,但我认为添加它很有用)我注意到有时(我现在已经看过两次)Teams 似乎无法渲染自适应卡片并显示 URIObject XML 相反,包含错误:cards.unsupported。但是,如果我退出客户端并重新启动它,它就可以正常显示...到目前为止,我从未在旧频道中看到过这种情况。
Teams 客户端版本 1.3.00.362(64 位)(无开发模式)。
普通 Azure 租户(无 preview/trial)
编辑 11/05/2020 这似乎也发生在名称为 'old' (@thread.skype) 的团队中。所以“@thread.tacv2”似乎无关。
我们无法在您提供的确切时间戳中找到日志,但确实找到了那些日期的对话 ID 的日志,并看到 404 具有相同的 UTC 分钟和秒数。我们假设所提供的时间戳在不同的时区中表示。
我们从日志中看到以下模式:
Bot sends PUT activity with card - 404 returned
Bot sends PUT activity with text - 200 returned
Bot sends PUT activity with card - 200 returned
这看起来与您在原始 post 中分享的相同模式。
有一种情况会导致 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
您的机器人是否可能遇到这种情况?有没有办法检查您的机器人在第一个 PUT 请求中发送的卡片是否与原始消息中已经存在的卡片相同
我们有一个在 MS Teams 中发布消息的 Teams 机器人。新对话的第一个 activity 始终是自适应卡片,我们偶尔会用新卡片更新它。在我用这个机器人组建一个新团队之前,这一切正常。
我们正在尝试使用 UpdateActivityAsync 进行更新,return NotFound。
经过一些故障排除后,我注意到以下几点:
- 新团队有一个不同的名字:19:...@thread.tacv2 而不是 19:...@thread.skype.
- 当我使用旧团队时,它按预期工作。
- 当我仅使用文本更新 activity 时(因此没有自适应卡作为附件)它总是会按预期更新。
- 用文字更新后,我们可以用自适应卡片更新一次。使用自适应卡进行一次更新后,使用自适应卡进行的任何后续更新都将 return NotFound。
- 因此,作为一种解决方法,我现在首先使用文本进行更新,然后立即使用卡片发送更新。这是一个糟糕的 UI 事情(闪烁),但它现在有效。
我们使用旧的 bot 框架版本 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);
异常没有提供太多细节:
操作 returned 了一个无效的状态代码 'NotFound'
未找到对话。
有谁知道如何避免团队之间的这种变化并允许使用卡片更新 activity?
此外(这不太重要,但我认为添加它很有用)我注意到有时(我现在已经看过两次)Teams 似乎无法渲染自适应卡片并显示 URIObject XML 相反,包含错误:cards.unsupported。但是,如果我退出客户端并重新启动它,它就可以正常显示...到目前为止,我从未在旧频道中看到过这种情况。
Teams 客户端版本 1.3.00.362(64 位)(无开发模式)。 普通 Azure 租户(无 preview/trial)
编辑 11/05/2020 这似乎也发生在名称为 'old' (@thread.skype) 的团队中。所以“@thread.tacv2”似乎无关。
我们无法在您提供的确切时间戳中找到日志,但确实找到了那些日期的对话 ID 的日志,并看到 404 具有相同的 UTC 分钟和秒数。我们假设所提供的时间戳在不同的时区中表示。
我们从日志中看到以下模式:
Bot sends PUT activity with card - 404 returned
Bot sends PUT activity with text - 200 returned
Bot sends PUT activity with card - 200 returned
这看起来与您在原始 post 中分享的相同模式。
有一种情况会导致 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
您的机器人是否可能遇到这种情况?有没有办法检查您的机器人在第一个 PUT 请求中发送的卡片是否与原始消息中已经存在的卡片相同