Различия в командах UpdateActivity при тестировании во вновь созданных командах - PullRequest
11 голосов
/ 25 февраля 2020

У нас есть бот Teams, который отправляет сообщения в MS Teams. Первым действием в новом разговоре всегда является адаптивная карта, и время от времени мы обновляем ее новой картой. Это работало нормально, пока я не создал новую Команду с этим ботом.

Обновление, которое мы пробуем с UpdateActivityAsyn c, возвращает NotFound.

После некоторого устранения неполадок я заметил следующее:

  1. У новой команды другое имя: 19: ... @ thread.tacv2, а не 19: ... @ thread.skype.
  2. Когда я использую старую команду, он работает, как и ожидалось.
  3. Когда я обновляю упражнение только с текстом (поэтому адаптивная карта не является вложением), оно всегда будет обновляться, как ожидается.
  4. После обновления с текстом мы можем обновить с помощью адаптивной карты ОДИН РАЗ. После одного обновления с адаптивной картой любые последующие обновления с адаптивными картами будут возвращать NotFound.
  5. Итак, в качестве обходного пути я сначала сначала обновляю текст, а сразу после этого отправляю обновление с картой. Это плохой интерфейс (мерцание), но пока он работает.

Мы используем старую версию фреймворка бота 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);

Исключение не предоставляет слишком много деталей:

Операция вернула недопустимый статус код «Не найден»

Разговор не найден.

Кто-нибудь знает, как избежать этого изменения между командами и разрешить обновления активности с карточками?

Кроме того (и это гораздо менее важно, но я думаю, что это полезно добавить), я заметил, что иногда (я уже дважды видел это) команды, кажется, не могут отрендерить адаптивную карту и вместо этого отображают URIObject XML, содержащий ошибка: cards.unsupported. Однако, если я выйду из клиента и перезапущу его, он будет работать нормально ... Я никогда не видел этого до сих пор в старых каналах.

Команда клиента версии 1.3.00.362 (64-разрядная версия) (без режима разработки) ). Обычный Azure арендатор (без предварительного просмотра / пробного использования)

РЕДАКТИРОВАТЬ 11/05/2020 Кажется, что это также происходит в командах со «старым» именем (@ thread.skype). Таким образом, '@ thread.tacv2' кажется не связанным.

...