你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 通信服务中的故障排除
本文会帮助你排查 Azure 通信服务解决方案中可能会遇到的问题。 如果要排查短信故障,可以使用 Azure 事件网格启用送达报告以捕获短信送达详情。
获取帮助
我们鼓励开发人员提交问题、建议功能以及报告问题。 有关详细信息,请参阅专用支持和帮助选项页。
为了帮助你排查某些问题,可能需要以下一条或多条信息:
- MS-CV ID:排查通话和消息问题。
- 通话 ID:标识 Azure 通信服务通话。
- 短信 ID:标识短信。
- 短代码计划简报 ID:标识短代码计划简报申请。
- 免费电话验证活动概要 ID:标识免费电话验证活动概要申请。
- 电子邮件 ID:标识“发送电子邮件”请求。
- 关联 ID:标识使用通话自动化发出的请求。
- 呼叫日志:使用该详细信息排查通话和网络问题。
有关限制和局限性的详细信息,请参阅服务限制。
获取 MS-CV ID
在初始化 SDK 时,可以通过在 clientOptions
对象实例中配置诊断来访问 MS-CV ID。 可为任何 Azure SDK 配置诊断,包括聊天、标识和 VoIP 通话。
客户端选项示例
以下代码片段演示的是诊断配置。 为 SDK 启用诊断时,诊断详细信息会发送到配置的事件侦听器。
// 1. Import Azure.Core.Diagnostics
using Azure.Core.Diagnostics;
// 2. Initialize an event source listener instance
using var listener = AzureEventSourceListener.CreateConsoleLogger();
Uri endpoint = new Uri("https://<RESOURCE-NAME>.communication.azure.net");
var (token, communicationUser) = await GetCommunicationUserAndToken();
CommunicationUserCredential communicationUserCredential = new CommunicationUserCredential(token);
// 3. Setup diagnostic settings
var clientOptions = new ChatClientOptions()
{
Diagnostics =
{
LoggedHeaderNames = { "*" },
LoggedQueryParameters = { "*" },
IsLoggingContentEnabled = true,
}
};
// 4. Initialize the ChatClient instance with the clientOptions
ChatClient chatClient = new ChatClient(endpoint, communicationUserCredential, clientOptions);
ChatThreadClient chatThreadClient = await chatClient.CreateChatThreadAsync("Thread Topic", new[] { new ChatThreadMember(communicationUser) });
使用访问 ID 实现通话自动化
排查通话自动化 SDK 出现的问题(如通话管理或录制问题)时,需要收集有助于识别失败通话或操作的 ID。 可以提供以下两个 ID 之一:
API 响应标头中的 ID。 找到字段
X-Ms-Skype-Chain-Id
。应用程序在执行操作后收到的回叫事件中的 ID。 例如,使用
CallConnected
或PlayFailed
查找相关 ID。。
除了其中一个 ID 之外,还需要提供有关失败用例的详细信息以及发生故障的时间戳。
访问客户端呼叫 ID
排查语音或视频通话故障时,可能需要提供 call ID
。 通过 call
对象的 id
属性访问此值。
// `call` is an instance of a call created by `callAgent.startCall` or `callAgent.join` methods
console.log(call.id)
获取短信 ID
对于短信问题,可以从响应对象中收集消息 ID。
// Instantiate the SMS client
const smsClient = new SmsClient(connectionString);
async function main() {
const result = await smsClient.send({
from: "+18445792722",
to: ["+1972xxxxxxx"],
message: "Hello World 👋🏻 via Sms"
}, {
enableDeliveryReport: true // Optional parameter
});
console.log(result); // your message ID is in the result
}
访问短代码计划概要 ID
在 Azure 门户中的“短代码”部分查找计划简报 ID。
获取免费电话验证活动概要 ID
在 Azure 门户上的“法规文档”部分查找计划简报 ID。
获取电子邮件操作 ID
排查电子邮件发送状态或电子邮件状态请求的问题时,可能需要提供操作 ID。 可以在响应中获取此值。
var emailSendOperation = await emailClient.SendAsync(
wait: WaitUntil.Completed,
senderAddress: sender,
recipientAddress: recipient,
subject: subject,
htmlContent: htmlContent);
/// Get the OperationId so that it can be used for tracking the message for troubleshooting
Console.WriteLine($"Email operation id = {emailSendOperation.Id}");
获取通话 SDK 中的支持文件
通话 SDK 提供了便捷方法来访问日志文件。 这些文件可以帮助 Microsoft 支持部门的专家和工程师。 建议在检测问题时收集这些日志。
启用和访问调用日志
了解如何启用和访问呼叫日志。
JavaScript
Azure 通信服务通话 SDK 在内部依赖于 @azure/logger 库来控制日志记录。
使用 @azure/logger
包中的 setLogLevel
方法配置日志输出级别。 创建记录器并将其传递给 CallClient
构造函数。
import { setLogLevel, createClientLogger, AzureLogger } from '@azure/logger';
setLogLevel('verbose');
let logger = createClientLogger('ACS');
const callClient = new CallClient({ logger });
可以使用 AzureLogger
通过重写 AzureLogger.log
方法来重定向 Azure SDK 的日志记录输出。
可以登录到浏览器控制台、文件或缓冲区。 还可以发送到自己的服务。 如果要通过网络将日志发送到自己的服务,请不要按日志行发送请求,因为此方法会对浏览器性能造成不利影响。 而是累积日志行,并分批发送它们。
// Redirect log output
AzureLogger.log = (...args) => {
// To console, file, buffer, REST API, etc...
console.log(...args);
};
本机 SDK (Android/iOS)
对于 Android、iOS 和 Windows,Azure 通信服务通话 SDK 提供对日志文件的访问权限。
有关通话本机 SDK 的信息,请参阅日志文件访问教程。
UI 库(Android、iOS)
如果使用适用于 Android 或 iOS 的 Azure 通信服务 UI 库,可以通过内置支持表单征求用户反馈。
有关通话 UI 支持表单的支持功能的详细信息,请参阅支持表单集成教程。 本文介绍如何添加必要的事件处理程序和创建用于集中存储支持信息的基本客户端/服务器实现。 本文介绍与组织使用的支持服务集成的路径。
在 ACS 集成中构建端到端支持流
无论是使用通话 SDK 还是通话 UI SDK,向客户提供支持都是任何可靠集成的重要组成部分。
提供用户支持一文重点介绍了支持反馈循环中每个时间点的重要注意事项,并提供了了解更多信息的出发点。
查找 Microsoft Entra 信息
使用以下过程查找 Microsoft Entra 信息。
获取目录 ID
若要查找目录(租户)ID,请执行下列步骤:
登录到 Azure 门户。
在服务菜单上,选择“Microsoft Entra ID”。
在 Microsoft Entra ID 的“概述”页中,复制目录 ID(租户 ID)并将其存储在应用程序代码中。
获取应用程序 ID
若要查找应用程序 ID,请执行下列步骤:
登录到 Azure 门户。
在服务菜单上,选择“Microsoft Entra ID”。
在 Microsoft Entra ID 中的“应用注册”中,选择应用程序。
复制“应用程序(客户端) ID”并将其存储在应用程序代码中。
还可以在应用程序的“概述”页上找到目录(租户)ID。
获取用户 ID
若要查找用户 ID,请执行下列步骤:
登录到 Azure 门户。
在服务菜单上,选择“Microsoft Entra ID”。
在 Microsoft Entra ID 中的“用户”中,选择用户。
在 Microsoft Entra 用户的“配置文件”页上,复制“对象 ID”并将其存储在应用程序代码中。
获取不可变资源 ID
有时,你还需要提供 Azure 通信服务资源的不可变资源 ID。 若要查找此 ID,请执行下列步骤:
登录到 Azure 门户。
打开 Azure 通信服务资源。
在服务菜单上,选择“概述”并切换到“JSON 视图”。
在“资源 JSON”页上,复制
immutableResourceId
值,并将其提供给支持团队。
验证 Teams 许可证是否符合资格,使 Teams 用户可以使用 Azure 通信服务支持
可通过两种方法验证 Teams 许可证是否符合资格,使 Teams 用户可以使用 Azure 通信服务支持。
通过 Teams Web 客户端进行验证
若要通过 Teams Web 客户端验证 Teams 许可证资格,请按以下步骤操作:
- 打开浏览器并转到 Teams Web 客户端。
- 使用具有有效 Teams 许可证的凭据登录。
- 如果身份验证成功,并且你仍在
https://teams.microsoft.com/
域中,则 Teams 许可证符合资格。 如果身份验证失败,或者你被重定向到https://teams.live.com/v2/
域,则 Teams 许可证不符合使 Teams 用户使用 Azure 通信服务支持的资格。
通过 Microsoft 图形 API 检查当前 Teams 许可证
可以使用 licenseDetails 查找当前的 Teams 许可证。 Microsoft 图形 API 返回分配给用户的许可证。 按照以下步骤使用 Graph 浏览器工具查看分配给用户的许可证。
打开浏览器并转到 Graph 浏览器。
使用凭据登录到 Graph 浏览器。
在查询框中,输入以下 API,然后选择“运行查询”。
https://graph.microsoft.com/v1.0/me/licenseDetails
或者,可以通过使用以下 API 提供用户 ID 来查询特定用户:
https://graph.microsoft.com/v1.0/users/{id}/licenseDetails
“响应预览”窗格显示输出。
为便于阅读,此处显示的响应对象可能会缩短。
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('071cc716-8147-4397-a5ba-b2105951cc0b')/assignedLicenses", "value": [ { "skuId": "b05e124f-c7cc-45a0-a6aa-8cf78c946968", "servicePlans":[ { "servicePlanId":"57ff2da0-773e-42df-b2af-ffb7a2317929", "servicePlanName":"TEAMS1", "provisioningStatus":"Success", "appliesTo":"User" } ] } ] }
查找许可证详细信息,其中
servicePlanName
属性具有符合资格的 Teams 许可证表中的一个值。