Teams机器人分配电话号码遇‘用户未找到’错误求助
问题背景
按官方文档步骤为Teams机器人创建了资源账户,执行Set-CsPhoneNumberAssignment命令时却弹出"The user 'XXX-XXX-XXX-XXX-XXX' is not found"错误,在Teams管理中心手动分配号码也报同样错。但用Auto Attendant默认ID创建的资源账户能正常分配号码,推测问题出在机器人App ID的配置环节。
错误原因
核心问题是机器人的服务主体未被Teams电话系统识别为合法的号码分配实体。用机器人App ID创建资源账户时,默认情况下该App对应的服务主体没有启用电话接入所需的权限或属性,导致系统无法将其关联到电话分配逻辑中;而Auto Attendant的默认ID是微软预配置的、自带电话服务权限的实体,所以能正常操作。
正确操作步骤
1. 检查并注册机器人服务主体
先确认机器人App ID对应的服务主体是否存在:
Get-AzureADServicePrincipal -Filter "AppId eq '你的机器人App ID'"
如果返回空结果,手动注册服务主体:
New-AzureADServicePrincipal -AppId "你的机器人App ID"
2. 配置电话系统所需权限
机器人服务主体需要拥有Microsoft Graph的以下权限(需全局管理员同意):
- Calls.Initiate.All
- Calls.AccessMedia.All
- OnlineMeetings.ReadWrite.All
可以通过Azure AD门户的「应用注册」→「API权限」页面添加,也用PowerShell批量配置:
# Microsoft Graph的固定App ID $graphAppId = "00000003-0000-0000-c000-000000000000" # 对应上述权限的ID $permissionIds = @("e1fe6dd8-ba31-4d61-89e7-88639da4683d", "8a256a2b-b617-496d-b51b-e76466e88db0", "5801d61c-0c6e-441c-a67b-8a4601811291") $botServicePrincipal = Get-AzureADServicePrincipal -Filter "AppId eq '你的机器人App ID'" $graphServicePrincipal = Get-AzureADServicePrincipal -Filter "AppId eq '$graphAppId'" foreach ($id in $permissionIds) { New-AzureADServiceAppRoleAssignment -ObjectId $botServicePrincipal.ObjectId ` -PrincipalId $botServicePrincipal.ObjectId ` -ResourceId $graphServicePrincipal.ObjectId ` -Id $id }
配置完成后,需要全局管理员登录Azure AD门户,在「API权限」页面点击「授予管理员同意」。
3. 重新创建资源账户
如果现有资源账户无法被识别,先删除旧账户:
Remove-CsOnlineApplicationInstance -Identity abcaccount@xyz.onmicrosoft.com
再用已配置好权限的机器人App ID重新创建:
New-CsOnlineApplicationInstance -UserPrincipalName abcaccount@xyz.onmicrosoft.com -ApplicationId "你的机器人App ID" -DisplayName "ABCaccount"
4. 分配电话号码
等待15-30分钟让账户同步到Teams电话系统,再执行分配命令:
Set-CsPhoneNumberAssignment -Identity abcaccount@xyz.onmicrosoft.com -PhoneNumber +1234567890 -PhoneNumberType CallingPlan
也可以直接在Teams管理中心→「语音」→「资源账户」页面找到对应账户,手动分配号码。
应急修复方案
如果不想重新创建账户,先尝试强制同步目录:
Invoke-CsOnlineDirectorySync
等待10-20分钟同步完成后,再尝试分配号码。如果仍失败,建议按上述步骤重新创建账户。
内容的提问来源于stack exchange,提问作者vtdev24

