Обновление активности в BotFramework v4 на платформе Teams - PullRequest
0 голосов
/ 14 марта 2019

У меня есть бот, разработанный с использованием Bot Framework v4 с использованием NodeJS и развернутый на нескольких каналах в командах. Есть ли способ обновить сообщение, отправленное ботом? Я попытался реализовать функцию updateActivity () в BotFrameworkAdapter. Однако это не обновляет действие.

enter image description here

Мне отправили эту карту от бота на канал Команд. Когда кто-то нажимает на кнопку, есть ли способ обновить карточку или сообщение (отключение кнопки)?

1 Ответ

2 голосов
/ 15 марта 2019

Ключ к этому - убедиться, что при использовании updateActivity() вы используете правильный идентификатор активности, созданный каналом команд. Вам также необходимо убедиться, что обновленное мероприятие получает все наборы данных Команд для него. В onTurn захватывайте исходящие действия, чтобы вы могли легко сохранить все необходимые данные канала Команды:

public onTurn = async (turnContext: TurnContext) => {

    turnContext.onSendActivities(async (ctx, activities, nextSend) => {
        activities.forEach(async (activity) => {
            if (activity.channelData.saveMe) {
                this.savedActivity = activity;
            }
        });
        return await nextSend();
    });
  • Примечание: может быть другой способ сделать это. Я просто нашел, что это проще всего, так как вам нужно сохранить всю информацию channelData, conversation и activity.id, как минимум
  • Как вы храните эту деятельность для последующего использования, зависит от вас. Если вы сохраните его в конструкторе, оно будет либо повторно создаваться для каждого сообщения (C # SDK), либо любой пользователь сможет изменить его (JS SDK). Вы можете написать собственное хранилище .
  • Действия сохраняют все данные канала. Устанавливая флаг saveMe, мы гарантируем, что сохраняем правильную активность

Создание некоторых ключевых переменных:

const teamsChannel = '19:8d60061c3d10xxxxxxxxxxxxxxxx@thread.skype';
const serviceUrl = 'https://smba.trafficmanager.net/amer/';
  • Примечание: самый простой способ получить эти переменные - это отправить сообщение от Команды боту, в то же время установив точку останова на входящем activity
  • serviceUrl вероятно, зависит от географического региона

Отправьте первое действие и сохраните ID:

// This ensures that your bot can send to Teams
turnContext.activity.conversation.id = teamsChannel;
turnContext.activity.serviceUrl = serviceUrl;
MicrosoftAppCredentials.trustServiceUrl(serviceUrl);

// Add the saveMe flag
yourActivity.channelData = { saveMe: true };

const response = await turnContext.sendActivity(yourActivity);
this.activityToUpdateId = response.id;
  • Как вы храните этот идентификатор для последующего использования, зависит от вас. Если вы сохраните его в конструкторе, оно будет либо повторно создаваться для каждого сообщения (C # SDK), либо любой пользователь сможет изменить его (JS SDK). Вы можете написать собственное хранилище .

Обновление сохраненной активности:

// New data
const card2 = CardFactory.adaptiveCard(adaptiveCard2);

// Set the saved activity.id and new activity data (an adaptiveCard, in this example)
this.savedActivity.id = this.activityToUpdateId;
this.savedActivity.attachments = [card2];

Отправьте обновление:

await turnContext.updateActivity(this.savedActivity);
  • Примечание: вы можете обновить активность чем угодно. Я поменял совершенно разные адаптивные карты

До:

enter image description here

После того, как:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...