Моя ошибка заключалась в том, что я взял идентификатор активности, который нужно обновить или удалить. Правильный идентификатор активности можно узнать только из ответа. Итак, вот рабочий код:
var oldActivity = MessageFactory.Text("Old activity");
var response = await turnContext.SendActivityAsync(oldActivity);
var activity_id = response.Id;
var newActivity = MessageFactory.Text("New activity");
newActivity.Id = activity_id;
await turnContext.UpdateActivityAsync(newActivity);
Кстати, вы можете сделать то же самое из диалогов, используя stepContext.Context вместо turnContext:
var oldActivity = MessageFactory.Text("Old activity");
await stepContext.Context.SendActivityAsync(oldActivity);
var response = await stepContext.Context.SendActivityAsync(oldActivity);
var newActivity = MessageFactory.Text("New activity");
newActivity.Id = response.Id;
await stepContext.Context.UpdateActivityAsync(newActivity);
или для удаления, но странно способ -
Похоже, это неправильное решение для диалогов. Но когда вы используете адаптивные карты, все в порядке. Я использую диалоги водопада с подсказками для всплывающих адаптивных карт, как описано здесь Использование адаптивных карт с диалогами водопада . Итак, чтобы удалить карту из предыдущего шага водопада, вам понадобится этот код:
private async Task<DialogTurnResult> ProcessResultsAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
dynamic choice = stepContext.Result;
var activity_id = stepContext.Context.Activity.ReplyToId;
await stepContext.Context.DeleteActivityAsync(activity_id, cancellationToken);
return await stepContext.ContinueDialogAsync();
}