更新和删除机器人发送的消息

重要

本部分中的代码示例基于 Bot Framework SDK 版本 4.6 和更高版本。 如果要查找早期版本的文档,请参阅文档的旧版 SDK 文件夹中的 机器人 - v3 SDK 部分。

机器人可以在发送消息后动态更新消息,而不是将其用作数据的静态快照。 也可以使用 Bot Framework 的 DeleteActivity 方法删除消息。

注意

机器人无法更新或删除用户在 Microsoft Teams 中发送的消息。

更新邮件

可以针对轮询更新、按下按钮后修改可用操作或任何其他异步状态更改等方案使用动态消息更新。

新消息不需要匹配类型中的原始消息。 例如,如果原始消息包含附件,则新消息可以是简单的文本消息。

若要更新现有消息,请将具有现有活动 ID 的新 Activity 对象传递给 TurnContext 类的方法 UpdateActivityAsync

// 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);

现在,你已更新消息,请为传入活动更新按钮选择的现有卡片。

更新卡片

若要更新按钮选择的现有卡片,可以使用传入活动的 ReplyToId

若要更新按钮选择的现有卡片,请将具有更新卡片和 ReplyToId 活动 ID 的新 Activity 对象传递给 TurnContext 类的方法 UpdateActivityAsync

// 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);

现在,你已更新卡片,可以使用 Bot Framework 删除消息。

删除邮件

在 Bot Framework 中,每个消息都有其唯一的活动标识符。 可以使用 Bot Framework 的 DeleteActivity 方法删除消息。

若要删除消息,请将该活动的 ID 传递给 TurnContext 类的方法 DeleteActivityAsync

foreach (var activityId in _list)
{
    // When overridden in a derived class, deletes an existing activity in the conversation.
    await turnContext.DeleteActivityAsync(activityId, cancellationToken);
}

代码示例

以下代码示例演示了对话的基础知识:

示例名称 说明 .NET Node.js Python 清单
Teams 对话基础知识 此示例演示如何将机器人框架 v4 中提供的不同机器人对话事件用于个人和团队范围。 View View View View

后续步骤

另请参阅