Ключ к этому - убедиться, что при использовании 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);
- Примечание: вы можете обновить активность чем угодно. Я поменял совершенно разные адаптивные карты
До:
После того, как: