web-dev-qa-db-ja.com

新しく作成されたチームでテストするときのTeams UpdateActivityイベントの違い

MS Teamsにメッセージを投稿するTeamsボットがあります。新しい会話の最初のアクティビティは常にアダプティブカードであり、時々、新しいカードで更新します。これは、このボットで新しいチームを作成するまで問題ありませんでした。

UpdateActivityAsyncで実行しようとしている更新は、NotFoundを返します。

トラブルシューティングの結果、次のことに気づきました。

  1. 新しいチームには別の名前があります。19:... @ thread.skypeではなく、19:... @ thread.tacv2です。
  2. 古いチームを使用すると、期待どおりに動作します。
  3. テキストのみでアクティビティを更新すると(アタッチメントとしてアダプティブカードがないため)、常に期待どおりに更新されます。
  4. テキストで更新した後、アダプティブカードONCEで更新できます。アダプティブカードを使用して1回更新すると、アダプティブカードを使用した以降の更新では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」を返しました

会話が見つかりません。

チーム間のこの変更を回避し、カードによるアクティビティの更新を許可する方法を知っている人はいますか?

また(これはそれほど重要ではありませんが、追加すると便利だと思います)時々(2回見たことがあります)チームがアダプティブカードをレンダリングできず、代わりにURIObject XMLを表示しているように見えました。 。ただし、クライアントを終了して再起動すると、正常にレンダリングされます...これまでのところ、これまでのチャネルでこれまで見たことがない。

Teamsクライアントバージョン1.3.00.362(64ビット)(開発モードなし)。通常のAzureテナント(プレビュー/試用なし)

編集11/05/2020これは、「古い」名前(@ thread.skype)を持つチームでも発生するようです。したがって、「@ thread.tacv2」は関係がないようです。

11
user1515791

指定された正確なタイムスタンプでログを見つけることはできませんでしたが、それらの日付の会話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

これは、元の投稿で共有したのと同じパターンのようです。

新しいメッセージが返信チェーンに送信された後、ボットが既存のカードメッセージをまったく同じカードで更新しようとすると、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リクエストで送信しているカードが、元のメッセージにすでにあるカードと同じかどうかを確認する方法はありますか

0
Trinetra-MSFT