Обновление и удаление сообщений, отправленных ботом
Статья
Важно!
Примеры кода в этом разделе основаны на версии 4.6 и более поздних версиях пакета SDK Bot Framework. Если вы ищете документацию по более ранним версиям, см. раздел пакет SDK для ботов версии 3 в папке Устаревшие пакеты SDK документации.
Бот может динамически обновлять сообщения после их отправки, а не сохранять их в виде статических снимков данных. Сообщения также можно удалить с помощью метода DeleteActivity Bot Framework.
Примечание.
Бот не может обновлять или удалять сообщения, отправленные пользователем в Microsoft Teams.
Обновление сообщений
Вы можете использовать динамические обновления сообщений для таких сценариев, как обновления опроса, изменение действий, доступных после нажатия кнопки, или любое другое асинхронное изменение состояния.
Новое сообщение не обязательно должно совпадать по типу с исходным. Например, если исходное сообщение содержит вложение, новое сообщение может быть простым текстовым сообщением.
Чтобы обновить существующее сообщение, передайте новый объект Activity с существующим идентификатором действия в метод UpdateActivityAsync класса TurnContext.
// Send initial message
var response = await turnContext.SendActivityAsync(MessageFactory.Attachment(card.ToAttachment()), cancellationToken);
var activityId = response.Id; // Fetch activity id.
// MessageFactory.Text(): Specifies the type of text data in a message attachment.
var newActivity = MessageFactory.Text("The new text for the activity");
newActivity.Id = activityId;
// UpdateActivityAsync(): A method that can participate in update activity events for the current turn.
await turnContext.UpdateActivityAsync(newActivity, cancellationToken);
Чтобы обновить существующее сообщение, передайте новый объект Activity с существующим идентификатором действия в метод updateActivity объекта TurnContext.
// Send initial message
var message = await context.sendActivity("<Your Message>");
var activityId = message.id; // Fetch activity id.
// MessageFactory.Text(): Specifies the type of text data in a message attachment.
const newActivity = MessageFactory.text('The new text for the activity');
newActivity.id = activityId;
// A method that can participate in update activity events for the current turn.
await turnContext.updateActivity(newActivity);
Чтобы обновить существующее сообщение, передайте новый объект Activity с существующим идентификатором действия в метод update_activity класса TurnContext.
# Send initial message
message = await turn_context.send_activity("<Your Message>")
activityId = message.id # Fetch activity id.
# MessageFactory.Text(): Specifies the type of text data in a message attachment.
new_activity = MessageFactory.text("The new text for the activity")
new_activity.id = activity_id
# A method that can participate in update activity events for the current turn.
update_result = await context.update_activity(new_activity)
Примечание.
Вы можете разрабатывать приложения Teams с помощью любой технологии веб-программирования и напрямую вызывать REST API службы соединителя ботов. Для этого вам необходимо реализовать процедуры безопасности Проверки подлинности безопасности с вашими запросами API.
Чтобы обновить существующее действие в беседе, включите conversationId и activityId в конечную точку запроса. Чтобы выполнить этот сценарий, вы должны кэшировать идентификатор действия, возвращенный исходным почтовым вызовом.
PUT /v3/conversations/{conversationId}/activities/{activityId}
Чтобы обновить существующую карточку при выборе кнопки, передайте новый объект Activity с обновленной карточкой и ReplyToId как идентификатор действия для метода UpdateActivityAsync класса TurnContext.
// Returns a message activity that contains an attachment.
var activity = MessageFactory.Attachment(card.ToAttachment());
activity.Id = turnContext.Activity.ReplyToId;
// A method that can participate in update activity events for the current turn.
await turnContext.UpdateActivityAsync(activity, cancellationToken);
Чтобы обновить существующую карточку при выборе кнопки, передайте новый объект Activity с обновленной карточкой и replyToId как идентификатор действия для метода updateActivity объекта TurnContext
// MessageFactory.attachment(): Returns a message activity that contains an attachment.
const message = MessageFactory.attachment(card);
message.id = context.activity.replyToId;
// updateActivity(): A method that can participate in update activity events for the current turn.
await context.updateActivity(message);
Чтобы обновить существующую карточку при нажатии кнопки, передайте новый объект Activity с обновленной карточкой и reply_to_id как идентификатор действия для метода update_activity класса TurnContext.
# MessageFactory.attachment(): Returns a message activity that contains an attachment.
updated_activity = MessageFactory.attachment(CardFactory.hero_card(card))
updated_activity.id = turn_context.activity.reply_to_id
# update_activity(): A method that can participate in update activity events for the current turn.
await turn_context.update_activity(updated_activity)
Примечание.
Вы можете разрабатывать приложения Teams с помощью любой технологии веб-программирования и напрямую вызывать REST API службы соединителя ботов. Для этого вам необходимо реализовать процедуры безопасности Проверки подлинности безопасности с вашими запросами API.
Чтобы обновить существующее действие в беседе, включите conversationId и activityId в конечную точку запроса. Чтобы выполнить этот сценарий, вы должны кэшировать идентификатор действия, возвращенный исходным почтовым вызовом.
PUT /v3/conversations/{conversationId}/activities/{activityId}
Чтобы удалить сообщение, передайте идентификатор этого действия методу DeleteActivityAsync класса TurnContext.
foreach (var activityId in _list)
{
// When overridden in a derived class, deletes an existing activity in the conversation.
await turnContext.DeleteActivityAsync(activityId, cancellationToken);
}
Чтобы удалить сообщение, передайте идентификатор этого действия методу deleteActivity объекта TurnContext.
for (let i = 0; i < activityIds.length; i++) {
// deleteActivity(): deletes an existing activity in the conversation.
await turnContext.deleteActivity(activityIds[i]);
}
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.