MS Teams机器人报错:获取客户端凭据令牌失败(ThrottleException)
MS Teams主动消息机器人令牌获取节流异常问题
问题背景
开发了一款可向用户发送主动消息的MS Teams机器人,采用ConnectorClient实现消息发送功能,同时配置了错误邮件通知机制,在发生异常时接收详细报错信息。近几日,针对部分用户出现如下报错:
无法通过客户端凭据获取令牌。(引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。)
详细报错信息
无法通过客户端凭据获取令牌。(引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) (引发了类型为'Microsoft.Bot.Connector.Authentication.ThrottleException'的异常。) 堆栈跟踪: 在 Microsoft.Bot.Connector.Authentication.Retry.Run[TResult](Func`1 task, Func`3 retryExceptionHandler) 在 Microsoft.Bot.Connector.Authentication.AdalAuthenticator.GetTokenAsync(Boolean forceRefresh) 在 Microsoft.Bot.Connector.Authentication.AdalAuthenticator.Microsoft.Bot.Connector.Authentication.IAuthenticator.GetTokenAsync(Boolean forceRefresh) 在 Microsoft.Bot.Connector.Authentication.AppCredentials.GetTokenAsync(Boolean forceRefresh) 在 Microsoft.Bot.Connector.Authentication.AppCredentials.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) 在 Microsoft.Bot.Connector.Conversations.CreateConversationWithHttpMessagesAsync(ConversationParameters parameters, Dictionary`2 customHeaders, CancellationToken cancellationToken) 在 Microsoft.Bot.Connector.ConversationsExtensions.CreateConversationAsync(IConversations operations, ConversationParameters parameters, CancellationToken cancellationToken) 在 Microsoft.BotBuilderSamples.WelcomeBotCloundStorage.sendMessage(ConnectorClient connectorClient, UserDetails user, Activity personalMessageActivity)
原因分析
ThrottleException是微软Bot Framework对令牌请求频率的限制触发的,说明机器人在短时间内向Azure AD发送了过多的令牌获取请求,超出了配额限制。
解决方案
- 优化令牌缓存策略:确保
AppCredentials的令牌缓存机制正常工作,避免重复请求令牌。检查代码中是否频繁调用GetTokenAsync(true)(强制刷新),改为使用默认的GetTokenAsync(false),仅在必要时强制刷新。 - 调整请求频率:批量发送消息时添加请求间隔,避免短时间内集中调用
CreateConversationAsync或发送消息接口。可采用批量分组、延迟发送的方式分散请求压力。 - 调整重试逻辑:系统已内置重试机制,但多次重试仍失败说明当前频率远超限制。自定义重试策略,增加重试间隔(如指数退避),避免持续触发节流。
- 检查应用权限配置:确认机器人应用的权限范围,移除不必要的权限以减少令牌请求量,同时可根据业务需求申请提升Azure AD的令牌配额。
- 排查代码逻辑:检查是否存在循环发送、重复触发消息发送的逻辑(如用户状态监听的重复回调),消除不必要的令牌请求。
内容的提问来源于stack exchange,提问作者Swapnil Chowkekar
相关产品推荐
相关产品推荐

