web-dev-qa-db-fra.com

Différence des événements Teams UpdateActivity lorsque vous testez dans des équipes nouvellement créées

Nous avons un bot Teams qui publie des messages dans MS Teams. La première activité d'une nouvelle conversation est toujours une carte adaptative et de temps en temps, nous la mettons à jour avec une nouvelle carte. Cela fonctionnait bien jusqu'à ce que je forme une nouvelle équipe avec ce bot.

La mise à jour que nous essayons avec UpdateActivityAsync, renvoie NotFound.

Après quelques dépannage, j'ai remarqué ce qui suit:

  1. La nouvelle équipe a un nom différent: 19: ... @ thread.tacv2 par opposition à 19: ... @ thread.skype.
  2. Lorsque j'utilise une équipe plus ancienne, cela fonctionne comme prévu.
  3. Lorsque je mets à jour l'activité avec du texte uniquement (donc pas de carte adaptative en pièce jointe), elle sera toujours mise à jour comme prévu.
  4. Après une mise à jour avec un texte, nous pouvons mettre à jour avec une carte adaptative UNE FOIS. Après une mise à jour avec une carte adaptative, toutes les mises à jour ultérieures avec des cartes adaptatives renverront NotFound.
  5. Donc, pour contourner le problème, je mets à jour d'abord avec du texte et immédiatement après, j'envoie la mise à jour avec la carte. Ce qui est une mauvaise chose dans l'interface utilisateur (scintillement), mais cela fonctionne pour le moment.

Nous utilisons l'ancienne version 3 du bot framework, qui, je le sais, n'est plus maintenue, mais pour autant que je sache, cela devrait toujours fonctionner (pas de projet d'interruption de fonctionnement). Compte tenu également des points ci-dessus (en particulier le point 4), je suppose qu'il utilise les mêmes appels sous le capot.

Donc, cela fonctionne pour les équipes plus anciennes, mais pas pour une équipe avec @ thread.tacv2

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

Et pour les équipes avec @thread.tacv2 nous devons maintenant utiliser ceci

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);

L'exception ne fournit pas trop de détails:

L'opération a renvoyé un code d'état invalide 'NotFound'

Conversation introuvable.

Quelqu'un sait-il comment éviter ce changement entre les équipes et autoriser les mises à jour d'activité avec des cartes?

Aussi (et c'est beaucoup moins important, mais je pense qu'il est utile d'ajouter) j'ai remarqué que parfois (je l'ai vu deux fois maintenant) Teams semble incapable de rendre la carte adaptative et affiche à la place le XML URIObject, contenant l'erreur: cards.unsupported . Cependant, si je quitte le client et le redémarre, il rend bien ... Je n'ai jamais vu cela jusqu'à présent dans les anciens canaux.

Client Teams version 1.3.00.362 (64 bits) (pas de mode de développement). Locataire Azure normal (pas d'aperçu/d'essai)

EDIT 11/05/2020 Il semble que cela se produise également sur les équipes avec le "vieux" nom (@ thread.skype). Ainsi, le '@ thread.tacv2' ne semble pas lié.

11
user1515791

Nous n'avons pas pu trouver les journaux aux horodatages exacts que vous avez fournis, mais nous avons trouvé des journaux pour les identifiants de conversation à ces dates et voir les 404 avec les mêmes minutes et secondes en UTC. Nous supposons que les horodatages fournis sont représentés dans un fuseau horaire différent.

À partir des journaux, nous voyons le modèle suivant:

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

Cela ressemble au même modèle que vous avez partagé dans votre message d'origine.

Il existe un scénario qui entraîne le retour des 404 sur PUTS chaque fois que le bot tente de mettre à jour un message de carte existant avec exactement la même carte après que de nouveaux messages ont été envoyés à une chaîne de réponse.

Voici les étapes du repo:

 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

Est-il possible que votre bot rencontre cela? Existe-t-il un moyen de vérifier si la carte que votre bot envoie dans la première demande PUT est la même carte qui se trouve déjà dans le message d'origine

0
Trinetra-MSFT