适用于:SDK v4
跟踪活动是机器人可以发送到 Bot Framework Emulator 的一种活动。 可以使用跟踪活动来以交互方式调试机器人,因为这些活动允许在本地运行机器人时查看有关机器人的信息。
跟踪活动只发送到 Emulator,而不会发送到任何其他客户端或通道。 模拟器会在日志中显示它们,但不会在主聊天面板中显示。
- 通过轮次上下文发送的跟踪活动,会经过在该轮次上下文上注册的发送活动处理程序发送。
- 通过轮次上下文发送的跟踪活动会与入站活动相关联;如果存在会话引用,则通过应用该引用进行关联。 对于主动消息,回复 ID将是一个新的 GUID。
- 无论发送方式如何,跟踪活动永远都不会设置 responded 标志。
重要
Bot Framework SDK 和 Bot Framework Emulator 已在 GitHub 上存档。 项目不再更新或维护。 自 2025 年 12 月 31 日起,Bot Framework SDK 的支持票证将不再提供服务。
若要使用所选的 AI 服务、业务流程和知识生成代理,请考虑使用 Microsoft 365 代理 SDK。 代理 SDK 对 C#、JavaScript 或 Python 具有语言支持。 可以在 aka.ms/agents 了解有关代理 SDK 的详细信息。 如果现有的机器人是使用 Bot Framework SDK 生成的,则可以将机器人更新到代理 SDK。 查看 Bot Framework SDK 到代理 SDK 迁移指南的核心更改和更新。
如果要构建设计为在 Microsoft Teams 中工作的协作代理,请考虑使用 Teams SDK。 它为在 Teams 环境中运行的代理提供 Teams 特定的 API、自适应卡支持和内置 AI 协同调度功能。 可以在 Teams SDK(Teams AI 库)中了解详细信息。
如果要查找基于 SaaS 的代理平台,请考虑 Microsoft Copilot Studio。
使用跟踪活动
若要在 Emulator 中查看跟踪活动,需要有这样一种场景:你的机器人会发送跟踪活动,例如引发异常,并从适配器的每轮错误处理程序中发送跟踪活动。
若要从你的机器人发送跟踪活动:
- 创建一个新活动。
- 将其必需的 type 属性设置为“trace”。
- 可根据跟踪的需要,设置其 name、label、value 和 值类型 属性。
- 使用轮次上下文对象的 send activity 方法发送跟踪活动。
- 此方法根据传入的活动,为该活动的剩余必需属性添加值。 这些属性包括 channel ID、service URL、from 和 recipient。
若要在 Emulator 中查看跟踪活动:
- 在计算机本地运行机器人。
- 使用模拟器进行测试。
- 与机器人交互,并使用方案中的步骤生成跟踪活动。
- 当机器人发出跟踪活动时,跟踪活动将显示在 Emulator 日志中。
下面是在未事先设置机器人所依赖的 QnAMaker 知识库的情况下运行核心机器人时可能会看到的跟踪活动。
在适配器的错误处理程序中添加跟踪活动
适配器的轮次错误处理程序会捕获机器人在某个轮次期间引发的任何原本未被捕获的异常。 错误处理程序是非常适合跟踪活动的位置,因为这样可以向用户发送用户友好的消息,并将有关异常的调试信息发送给 Emulator。
此示例代码摘自核心机器人示例。 请参阅完整的 C#、JavaScript、Python 或 Java 示例。
适配器的 OnTurnError 处理程序创建跟踪活动以包含异常信息,并将其发送到 Emulator。
AdapterWithErrorHandler.cs
{
// Log any leaked exception from the application.
// NOTE: In production environment, you should consider logging this to
// Azure Application Insights. Visit https://aka.ms/bottelemetry to see how
// to add telemetry capture to your bot.
logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");
// Send a message to the user
var errorMessageText = "The bot encountered an error or bug.";
var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput);
await turnContext.SendActivityAsync(errorMessage);
errorMessageText = "To continue to run this bot, please fix the bot source code.";
errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput);
await turnContext.SendActivityAsync(errorMessage);
if (conversationState != null)
{
try
{
// Delete the conversationState for the current conversation to prevent the
// bot from getting stuck in a error-loop caused by being in a bad state.
// ConversationState should be thought of as similar to "cookie-state" in a Web pages.
await conversationState.DeleteAsync(turnContext);
}
catch (Exception e)
{
logger.LogError(e, $"Exception caught on attempting to Delete ConversationState : {e.Message}");
}
}
// Send a trace activity, which will be displayed in the Bot Framework Emulator
await turnContext.TraceActivityAsync("OnTurnError Trace", exception.Message, "https://www.botframework.com/schemas/error", "TurnError");
};
}
后续步骤
- 《如何使用检查中间件调试机器人》介绍了如何添加可发出跟踪活动的中间件。
- 若要调试已部署的机器人,可以使用 Application Insights。 有关详细信息,请参阅将遥测功能添加到机器人。
- 有关每种活动类型的详细信息,请参阅 Bot Framework 活动架构。