你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用通话结束调查收集用户反馈

本教程介绍了如何使用 Azure 通信服务通话结束调查。

先决条件

重要

从通话 SDK 的 1.13.1 版本开始,即可使用通话结束调查。 请确保在尝试以下说明时使用该版本或更高版本。

  • 推荐 Node.js 活动的长期支持 (LTS) 版本。

API 用法示例

通话结束调查功能应在通话结束后使用。 用户可以对任何类型的 VoIP 通话(一对一、群组、会议、呼出和呼入)进行评分。 用户通话结束后,你的应用程序可以向最终用户显示一个 UI,以便其选择评分分数,并从我们预定义的列表中选择他们在通话中遇到的问题(如果需要)。

以下代码截图显示了一对一通话的示例。 通话结束后,你的应用程序可以显示一个调查 UI。在用户选择评分后,应用程序应调用功能 API 以提交包含用户所做选择的调查。

建议使用默认评分标准。 但是,也可以提交采用自定义评分标准的调查。 你可以查看示例应用程序,其中提供了示例 API 用法。

仅对通话质量进行评分 - 无自定义评分标准

call.feature(Features.CallSurvey).submitSurvey({
    overallRating: { score: 5 }, // issues are optional
}).then(() => console.log('survey submitted successfully'));

OverallRating 是所有调查的必需类别。

仅对通话质量进行评分 - 有自定义评分标准和问题

call.feature(Features.CallSurvey).submitSurvey({
    overallRating: {
        score: 1, // my score
        scale: { // my custom scale
            lowerBound: 0,
            upperBound: 1,
            lowScoreThreshold: 0
        },
        issues: ['HadToRejoin'] // my issues, check the table below for all available issues
    }
}).then(() => console.log('survey submitted successfully'));

对整体、音频和视频进行评分,且提供了一个示例问题

call.feature(Features.CallSurvey).submitSurvey({
    overallRating: { score: 3 },
    audioRating: { score: 4 },
    videoRating: { score: 3, issues: ['Freezes'] }
}).then(() => console.log('survey submitted successfully'))

处理 SDK 可以发送的错误

call.feature(Features.CallSurvey).submitSurvey({
    overallRating: { score: 3 }
}).catch((e) => console.log('error when submitting survey: ' + e))

查找不同类型的错误

提交调查时失败

如果数据验证失败或无法提交调查,则 API 返回以下错误消息。

  • 需要至少一个调查评级。

  • 默认刻度 X 应为 1 到 5。 - 其中 X 为以下之一:

    • overallRating.score
    • audioRating.score
    • videoRating.score
    • ScreenshareRating.score
  • {propertyName}:{rating.score} 应介于 {rating.scale?.lowerBound} 和 {rating.scale?.upperBound} 之间。

  • {propertyName}:{rating.scale?.lowScoreThreshold} 应介于 {rating.scale?.lowerBound} 和 {rating.scale?.upperBound} 之间。

  • {propertyName} lowerBound:{rating.scale?.lowerBound} 和 upperBound: {rating.scale?.upperBound} 应介于 0 和 100 之间。

  • 请重试 [ACS 由于网络或其他错误而未能提交调查]。

我们将返回包含消息的任何错误代码。

  • 适用于所有错误消息(除一个以外)的错误代码 400(请求错误)。
{ message: validationErrorMessage, code: 400 }
  • 丢弃事件时的一个 408(超时):
{ message: "Please try again.", code: 408 }

所有可能的值

默认调查 API 配置

API 评分类别 界限值* 输入范围 注释
整体通话质量 2 1 - 5 调查呼叫参与者的整体质量体验,评分范围为 1-5。 答复 1 表示通话体验不佳,5 表示完美。 界限值 2 意味着,客户答复 1 或 2 表示通话体验欠佳。
音频 2 1 - 5 答复 1 表示音频体验不佳,5 表示没有遇到音频问题。
视频 2 1 - 5 答复 1 表示视频体验不佳,5 表示没有遇到视频问题。
屏幕共享 2 1 - 5 答复 1 表示屏幕共享体验不佳,5 表示没有遇到屏幕共享问题。

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

更多调查标记

评分类别 可选标记
整体通话质量 CallCannotJoin CallCannotInvite HadToRejoin CallEndedUnexpectedly OtherIssues
音频 NoLocalAudio NoRemoteAudio Echo AudioNoise LowVolume AudioStoppedUnexpectedly DistortedSpeech AudioInterruption OtherIssues
视频 NoVideoReceived NoVideoSent LowQuality Freezes StoppedUnexpectedly DarkVideoReceived AudioVideoOutOfSync OtherIssues
屏幕共享 NoContentLocal NoContentRemote CannotPresent LowQuality Freezes StoppedUnexpectedly LargeDelay OtherIssues

自定义选项

你可以选择收集四个 API 值中的每一个,也可以只收集你认为最重要的值。 例如,你可以选择仅询问客户的整体通话体验,而不是询问其音频、视频和屏幕共享体验。 还可以根据自己的需求自定义输入范围。 对于“整体通话质量”、“音频”、“视频”和“屏幕共享”,默认输入范围为 1 到 5。 但是,每个 API 值都可以从最小 0 到最大 100 进行自定义。

自定义示例

API 评分类别 界限值* 输入范围
整体通话质量 0 - 100 0 - 100
音频 0 - 100 0 - 100
视频 0 - 100 0 - 100
屏幕共享 0 - 100 0 - 100

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

自定义问题

除了使用呼叫结束调查 API 之外,你还可以创建自己的调查问题,并将其与呼叫结束调查结果合并。 下面,你将找到将自己的客户问题合并到调查中的步骤,并查询呼叫结束调查 API 的结果和你自己的调查问题。

  • 创建 App Insight 资源

  • 将 Azure AppInsights 嵌入应用程序 单击此处了解有关使用纯 JavaScript 的 App Insight 初始化的详细信息。 或者,可以使用 NPM 获取 App Insights 依赖项。 单击此处了解有关使用 NPM 进行 App Insight 初始化的详细信息

  • 在应用程序中生成一个 UI,该 UI 将向用户提供自定义问题并收集其输入,假设应用程序将响应作为变量中的 improvementSuggestion 字符串收集

  • 使用 App Insights 将调查结果提交到 ACS 并发送用户响应:

    currentCall.feature(SDK.Features.CallSurvey).submitSurvey(survey).then(res => {
    // `improvementSuggestion` contains custom, user response
        if (improvementSuggestion !== '') {
            appInsights.trackEvent({
                    name: "CallSurvey", properties: {
                        // Survey ID to correlate the survey
                        id: res.id,
                        // Other custom properties as key value pair
                        improvementSuggestion: improvementSuggestion
                    }
                });
         }
    });
    appInsights.flush();
    

可在 App Insights 工作区下找到使用 AppInsights 发送的用户响应。 可以使用工作簿在多个资源之间进行查询,将呼叫评级和自定义调查数据相关联。 将呼叫评级和自定义调查数据关联的步骤:

  • 创建新的工作簿(你的 ACS 资源 -“>监视”->“工作簿”->“新建”),并从 ACS 资源查询呼叫调查数据。
  • 添加新查询(“+添加”->“添加查询”)
  • 确保 Data sourceLogsResource typeCommunication
  • 可以重命名查询(“高级设置”-> 步骤名称 [例如:call-survey])
  • 请注意,调查数据可能最多需要 2 小时才能在 Azure 门户中显示。 查询呼叫分级数据 -
    ACSCallSurvey
    | where TimeGenerated > now(-24h)
    
  • 添加另一个查询以从 App Insights 获取数据(“+添加”->“添加查询”)
  • 确保 Data sourceLogsResource typeApplication Insights
  • 查询自定义事件 -
    customEvents
    | where timestamp > now(-24h)
    | where name == 'CallSurvey'
    | extend d=parse_json(customDimensions)
    | project SurveyId = d.id, ImprovementSuggestion = d.improvementSuggestion
    
  • 可以重命名查询(“高级设置”-> 步骤名称 [例如:custom-call-survey])
  • 最后,通过 surveyId 合并这两个查询。 创建新查询(“+添加”->“添加查询”)。
  • 确保将 Data source 设置为“合并”,并根据需要选择 Merge type

title: Azure 通信服务通话结束调查 titleSuffix: Azure 通信服务教程文档 description: 了解如何使用通话结束调查收集用户反馈。 author: viniciusl-msft ms.author: viniciusl manager: gaobob services: azure-communication-services ms.date: 7/30/2024 ms.topic: tutorial ms.service: azure-communication-services ms.subservice: calling

重要

从 Android 通话 SDK 的 2.10.0 版本开始,即可使用通话结束调查。 请确保在尝试以下说明时使用该版本或更高版本。

API 用法示例

通话结束调查功能应在通话结束后使用。 用户可以对任何类型的 VoIP 通话(一对一、群组、会议、呼出和呼入)进行评分。 用户通话结束后,你的应用程序可以向最终用户显示一个 UI,以便其选择评分分数,并从我们预定义的列表中选择他们在通话中遇到的问题(如果需要)。

以下代码截图显示了一对一通话的示例。 通话结束后,你的应用程序可以显示一个调查 UI。在用户选择评分后,应用程序应调用功能 API 以提交包含用户所做选择的调查。

我们建议你使用默认的评级刻度,即五星评定(介于 1-5 之间)。 但是,也可以提交采用自定义评分标准的调查。

启动调查

通过启动调查来创建一个 CallSurvey 对象。 这会记录调查意图。 如果之后未提交此特定 CallSurvey 对象,则意味着最终客户跳过或忽略了调查。

SurveyCallFeature surveyCallFeature = call.feature(Features.SURVEY);
try {
    CallSurvey survey = surveyCallFeature.startSurvey().get();
} catch (InterruptedException | ExecutionException e) {
    // failure to start survey
}

常规用法

对通话进行评级时,你必须遵守在刻度字段上定义的值。 lowerBound 值表示可能的最差体验,而 upperBound 值表示完美的体验。 这两个值都包含在内。

OverallRating 是所有调查的必需类别。

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

有关建议的调查使用情况的详细信息,请参阅调查概念

仅对通话质量进行评分 - 无自定义评分标准

SurveyScore overall = new SurveyScore();
overall.setScore(5);
callSurvey.setOverallScore(overall);

仅对通话质量进行评分 - 有自定义评分标准和问题

// configuring scale
CallSurveyRatingScale ratingScale = new CallSurveyRatingScale();
ratingScale.setLowerBound(0);
ratingScale.setLowerBound(1);
ratingScale.setLowScoreThreshold(0);
SurveyScore overall = new SurveyScore();
overall.setScale(ratingScale);

// setting score according to scale
overall.setScore(1);
callSurvey.setOverallScore(overall);
// reporting one or more issues
callSurvey.setCallIssues(CallIssues.HAD_TO_REJOIN);

对整体、音频和视频进行评分,且提供了一个示例问题

SurveyScore overall = new SurveyScore();
overall.setScore(3);
SurveyScore audio = new SurveyScore();
audio.setScore(4);
SurveyScore video = new SurveyScore();
video.setScore(3);
callSurvey.setOverallScore(overall);
callSurvey.setAudioScore(audio);
callSurvey.setVideoScore(video);
callSurvey.setVideoIssues(VideoIssues.FREEZES);

提交调查并处理 SDK 可能发送的错误

try {
    CallSurveyResult survey = surveyCallFeature.submitSurvey(survey).get();
} catch (InterruptedException e) {
    // Threading error
} catch (ExecutionException e) {
    Log.e("SURVEY", e.getCause().getMessage());
}

查找不同类型的错误

提交调查时失败:

submitSurvey API 在以下场景中可能会返回错误:

  • 必须填写总体调查评级。

  • CallSurveyRatingScale 边界必须位于 0 到 100 范围内。 LowerBound 应小于 UpperBound。 LowScoreThreshold 应位于边界内。

  • 任何分数都必须遵守 CallSurveyRatingScale 定义的边界。 CallSurveyRatingScale 对象中的所有值都包容在内。 使用默认刻度时,分数值应介于 1 和 5 之间。

  • 由于网络/服务错误,无法提交调查。

可用的调查标记

整体通话质量

标签 说明
CannotJoin 客户无法加入通话
CannotInvite 客户无法在通话时添加新参与者
HadToRejoin 为了解决某个问题,客户离开并再次加入通话
CallEndedUnexpectedly 客户的通话结束,原因不明
OtherIssues 与前面的描述不符的任何问题

音频问题

标签 说明
NoLocalAudio 客户计算机上未收到通话音频,无法听到通话中的任何人说话
NoRemoteAudio 听不到特定参与者的音频
Echo 感觉通话中有回声
AudioNoise 收到的音频带有意外噪音
LowVolume 音频太低
AudioStoppedUnexpectedly 音频停止,没有明确的原因(例如没有人静音)
DistortedSpeech 参与者的声音被扭曲,不同于他们预期的语音
AudioInterruption 客户经历了音频中断、语音中断等。
OtherIssues 与前面的描述不符的任何问题

视频问题

标签 说明
NoVideoReceived 客户收不到参与者的视频
NoVideoSent 客户启动了视频,但通话中没有人能够看到它
LowQuality 视频质量低
Freezes 视频卡住
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如,摄像头打开,视频通话打开)
DarkVideoReceived 正在发送视频,但参与者只看到一个黑框(或其他单色)
AudioVideoOutOfSync 视频和音频似乎不同步
OtherIssues 与前面的描述不符的任何问题

屏幕共享问题

标签 说明
NoContentLocal 客户没有从正在共享的参与者那里收到屏幕共享
NoContentRemote 客户正在共享屏幕,但其他一个或多个参与者无法看到它
CannotPresent 无法启动屏幕共享
LowQuality 屏幕共享视频质量低,例如无法阅读
Freezes 演示过程中屏幕共享卡住
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如,屏幕共享未被客户停止)
LargeDelay 正在显示的内容与看到的内容之间存在可感知的延迟
OtherIssues 与前面的描述不符的任何问题

自定义选项

你可以选择收集四个 API 值中的每一个,也可以只收集你认为最重要的值。 例如,你可以选择仅询问客户的整体通话体验,而不是询问其音频、视频和屏幕共享体验。 还可以根据自己的需求自定义输入范围。 对于“整体通话质量”、“音频”、“视频”和“屏幕共享”,默认输入范围为 1 到 5。 但是,每个 API 值都可以从最小 0 到最大 100 进行自定义。

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

自定义问题

除了使用呼叫结束调查 API 之外,你还可以创建自己的调查问题,并将其与呼叫结束调查结果合并。

SubmitSurvey 操作的结果有效负载提供可用于将 ACS 调查数据与你自己的自定义数据和存储相关联的数据。 CallSurveyResult 类具有 SurveyId 字段,该字段表示调查的唯一标识符,CallId 表示生成调查的通话的标识符。 将这些标识符与你的自定义数据一起保存,可以唯一地将数据关联起来。

重要

从 iOS 通话 SDK 的 2.10.0 版本开始,即可使用通话结束调查。 请确保在尝试以下说明时使用该版本或更高版本。

API 用法示例

通话结束调查功能应在通话结束后使用。 用户可以对任何类型的 VoIP 通话(一对一、群组、会议、呼出和呼入)进行评分。 用户通话结束后,你的应用程序可以向最终用户显示一个 UI,以便其选择评分分数,并从我们预定义的列表中选择他们在通话中遇到的问题(如果需要)。

以下代码截图显示了一对一通话的示例。 通话结束后,你的应用程序可以显示一个调查 UI。在用户选择评分后,应用程序应调用功能 API 以提交包含用户所做选择的调查。

我们建议你使用默认的评级刻度,即五星评定(介于 1-5 之间)。 但是,也可以提交采用自定义评分标准的调查。

启动调查

通过启动调查来创建一个 CallSurvey 对象。 这会记录调查意图。 如果之后未提交此特定 CallSurvey 对象,则意味着最终客户跳过或忽略了调查。

var surveyCallFeature = self.call.feature(Features.survey)
do {
    try self.callSurvey = await surveyFeature.startSurvey()
} catch {
    print("Failure to start survey")
}

常规用法

对通话进行评级时,你必须遵守在刻度字段上定义的值。 lowerBound 值表示可能的最差体验,而 upperBound 值表示完美的体验。 这两个值都包含在内。

OverallRating 是所有调查的必需类别。

有关建议的调查使用情况的详细信息,请参阅调查概念

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

仅对通话质量进行评分 - 无自定义评分标准

let overallScore = SurveyScore()
overallScore.score = Int32(5)
callSurvey.overallScore = overallScore

仅对通话质量进行评分 - 有自定义评分标准和问题

// configuring scale
var ratingScale = new CallSurveyRatingScale()
ratingScale.lowerBound = 0;
ratingScale.upperBound = 1;
ratingScale.lowScoreThreshold = 0;
SurveyScore overall = new SurveyScore();
overall.scale = ratingScale;
// setting score according to scale
overall.score = 1;

callSurvey.overallScore = overall;

// reporting one or more issues
callSurvey.callIssues = [ CallIssues.hadToRejoin ];

对整体、音频和视频进行评分,且提供了一个示例问题

let overall = SurveyScore();
overall.score  = 3;

let audio = SurveyScore();
audio.score = 4;

let video = SurveyScore();
video.score = 3;

callSurvey.overallScore = overall;
callSurvey.audioScore = audio;
callSurvey.videoScore = video;
callSurvey.videoIssues = [ VideoIssues.freezes ];

提交调查并处理 SDK 可能发送的错误

do {
    var result =  try await self.surveyFeature!.submit(survey: callSurvey)
} catch let error as NSError {
    print("==> Survey Not Submitted " + error.localizedDescription)
}

查找不同类型的错误

提交调查时失败:

submitSurvey API 在以下场景中可能会返回错误:

  • 必须填写总体调查评级。

  • CallSurveyRatingScale 边界必须位于 0 到 100 范围内。 LowerBound 应小于 UpperBound。 LowScoreThreshold 应位于边界内。

  • 任何分数都必须遵守 CallSurveyRatingScale 定义的边界。 CallSurveyRatingScale 对象中的所有值都包容在内。 使用默认刻度时,分数值应介于 1 和 5 之间。

  • 由于网络/服务错误,无法提交调查。

可用的调查标记

整体通话质量

标签 说明
CannotJoin 客户无法加入通话
CannotInvite 客户无法在通话时添加新参与者
HadToRejoin 为了解决某个问题,客户离开并再次加入通话
CallEndedUnexpectedly 客户的通话结束,原因不明
OtherIssues 与前面的描述不符的任何问题

音频问题

标签 说明
NoLocalAudio 客户计算机上未收到通话音频,无法听到通话中的任何人说话
NoRemoteAudio 听不到特定参与者的音频
Echo 感觉通话中有回声
AudioNoise 收到的音频带有意外噪音
LowVolume 音频太低
AudioStoppedUnexpectedly 音频停止,没有明确的原因(例如没有人静音)
DistortedSpeech 参与者的声音被扭曲,不同于他们预期的语音
AudioInterruption 客户经历了音频中断、语音中断等。
OtherIssues 与前面的描述不符的任何问题

视频问题

标签 说明
NoVideoReceived 客户收不到参与者的视频
NoVideoSent 客户启动了视频,但通话中没有人能够看到它
LowQuality 视频质量低
Freezes 视频卡住
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如,摄像头打开,视频通话打开)
DarkVideoReceived 正在发送视频,但参与者只看到一个黑框(或其他单色)
AudioVideoOutOfSync 视频和音频似乎不同步
OtherIssues 与前面的描述不符的任何问题

屏幕共享问题

标签 说明
NoContentLocal 客户没有从正在共享的参与者那里收到屏幕共享
NoContentRemote 客户正在共享屏幕,但其他一个或多个参与者无法看到它
CannotPresent 无法启动屏幕共享
LowQuality 屏幕共享视频质量低,例如无法阅读
Freezes 演示过程中屏幕共享卡住
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如,屏幕共享未被客户停止)
LargeDelay 正在显示的内容与看到的内容之间存在可感知的延迟
OtherIssues 与前面的描述不符的任何问题

自定义选项

你可以选择收集四个 API 值中的每一个,也可以只收集你认为最重要的值。 例如,你可以选择仅询问客户的整体通话体验,而不是询问其音频、视频和屏幕共享体验。 还可以根据自己的需求自定义输入范围。 对于“整体通话质量”、“音频”、“视频”和“屏幕共享”,默认输入范围为 1 到 5。 但是,每个 API 值都可以从最小 0 到最大 100 进行自定义。

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

自定义问题

除了使用呼叫结束调查 API 之外,你还可以创建自己的调查问题,并将其与呼叫结束调查结果合并。

不过,SubmitSurvey 操作的结果有效负载提供可用于将 ACS 调查数据与你自己的自定义数据和存储相关联的数据。 CallSurveyResult 类具有 SurveyId 字段,该字段表示调查的唯一标识符,CallId 表示生成调查的通话的标识符。 将这些标识符与你的自定义数据一起保存,可以唯一地将数据关联起来。

重要

从 Windows 通话 SDK 的 1.8.0 版本开始,即可使用通话结束调查。 请确保在尝试以下说明时使用该版本或更高版本。

API 用法示例

通话结束调查功能应在通话结束后使用。 用户可以对任何类型的 VoIP 通话(一对一、群组、会议、呼出和呼入)进行评分。 用户通话结束后,你的应用程序可以向最终用户显示一个 UI,以便其选择评分分数,并从我们预定义的列表中选择他们在通话中遇到的问题(如果需要)。

以下代码截图显示了一对一通话的示例。 通话结束后,你的应用程序可以显示一个调查 UI。在用户选择评分后,应用程序应调用功能 API 以提交包含用户所做选择的调查。

我们建议你使用默认的评级刻度,即五星评定(介于 1-5 之间)。 但是,也可以提交采用自定义评分标准的调查。

启动调查

通过启动调查来创建一个 CallSurvey 对象。 这会记录调查意图。 如果之后未提交此特定 CallSurvey 对象,则意味着最终客户跳过或忽略了调查。

var surveyCallFeature = call.Features.Survey;
var survey = await surveyCallFeature.StartSurveyAsync();

常规用法

对通话进行评级时,你必须遵守在刻度字段上定义的值。 lowerBound 值表示可能的最差体验,而 upperBound 值表示完美的体验。 这两个值都包含在内。

OverallRating 是所有调查的必需类别。

有关建议的调查使用情况的详细信息,请参阅调查概念

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

仅对通话质量进行评分 - 无自定义评分标准

survey.OverallScore = new CallSurveyScore() { Score = 5 };

仅对通话质量进行评分 - 有自定义评分标准和问题

// configuring scale and score
survey.OverallScore = new CallSurveyScore() { 
    Scale = new CallSurveyRatingScale() { 
                LowerBound = 0,
                UpperBound = 1,
                LowScoreThreshold = 1,
            }, 
            Score = 1 
};

// reporting one or more issues
survey.OverallIssues = CallIssues.HadToRejoin;

对整体、音频和视频进行评分,且提供了一个示例问题

survey.OverallScore = new CallSurveyScore() { 
    Score = 5 
};
survey.AudioScore = new CallSurveyScore() { 
    Score = 4
};
survey.VideoScore = new CallSurveyScore() { 
    Score = 3
};

survey.videoIssues = VideoIssues.Freezes;

提交调查并处理 SDK 可能发送的错误

try
{
    CallSurveyResult result = await surveyCallFeature.SubmitSurveyAsync(survey);
    Console.WriteLine("Survey submitted" + result.SurveyId);
} catch (Exception ex)
{
   Console.WriteLine(ex.Message);
}

查找不同类型的错误

提交调查时失败:

submitSurvey API 在以下场景中可能会返回错误:

  • 必须填写总体调查评级。

  • CallSurveyRatingScale 边界必须位于 0 到 100 范围内。 LowerBound 应小于 UpperBound。 LowScoreThreshold 应位于边界内。

  • 任何分数都必须遵守 CallSurveyRatingScale 定义的边界。 CallSurveyRatingScale 对象中的所有值都包容在内。 使用默认刻度时,分数值应介于 1 和 5 之间。

  • 由于网络/服务错误,无法提交调查。

可用的调查标记

整体通话质量

标签 说明
CannotJoin 客户无法加入通话
CannotInvite 客户无法在通话时添加新参与者
HadToRejoin 为了解决某个问题,客户离开并再次加入通话
EndedUnexpectedly 客户的通话结束,原因不明
OtherIssues 与前面的描述不符的任何问题

音频问题

标签 说明
NoLocalAudio 客户计算机上未收到通话音频,无法听到通话中的任何人说话
NoRemoteAudio 听不到特定参与者的音频
Echo 感觉通话中有回声
AudioNoise 收到的音频带有意外噪音
LowVolume 音频太低
AudioStoppedUnexpectedly 音频停止,没有明确的原因(例如没有人静音)
DistortedSpeech 参与者的声音被扭曲,不同于他们预期的语音
AudioInterruption 客户经历了音频中断、语音中断等。
OtherIssues 与前面的描述不符的任何问题

视频问题

标签 说明
NoVideoReceived 客户收不到参与者的视频
NoVideoSent 客户启动了视频,但通话中没有人能够看到它
LowQuality 视频质量低
Freezes 视频卡住
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如,摄像头打开,视频通话打开)
DarkVideoReceived 正在发送视频,但参与者只看到一个黑框(或其他单色)
AudioVideoOutOfSync 视频和音频似乎不同步
OtherIssues 与前面的描述不符的任何问题

屏幕共享问题

标签 说明
NoContentLocal 客户没有从正在共享的参与者那里收到屏幕共享
NoContentRemote 客户正在共享屏幕,但其他一个或多个参与者无法看到它
CannotPresent 无法启动屏幕共享
LowQuality 屏幕共享视频质量低,例如无法阅读
Freezes 演示过程中屏幕共享卡住
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如,屏幕共享未被客户停止)
LargeDelay 正在显示的内容与看到的内容之间存在可感知的延迟
OtherIssues 与前面的描述不符的任何问题

自定义选项

你可以选择收集四个 API 值中的每一个,也可以只收集你认为最重要的值。 例如,你可以选择仅询问客户的整体通话体验,而不是询问其音频、视频和屏幕共享体验。 还可以根据自己的需求自定义输入范围。 对于“整体通话质量”、“音频”、“视频”和“屏幕共享”,默认输入范围为 1 到 5。 但是,每个 API 值都可以从最小 0 到最大 100 进行自定义。

注意

API 中指示的问题界限值是 Microsoft 在分析调查数据时使用的阈值。 自定义界限值或输入范围时,Microsoft 会根据你的自定义情况分析调查数据。

自定义问题

除了使用呼叫结束调查 API 之外,你还可以创建自己的调查问题,并将其与呼叫结束调查结果合并。

不过,SubmitSurvey 操作的结果有效负载提供可用于将 ACS 调查数据与你自己的自定义数据和存储相关联的数据。 CallSurveyResult 类具有 SurveyId 字段,该字段表示调查的唯一标识符,CallId 表示生成调查的通话的标识符。 将这些标识符与你的自定义数据一起保存,可以唯一地将数据关联起来。

收集调查数据

重要

必须在 Azure Monitor 中启用诊断设置,才能将调查的日志数据发送到 Log Analytics 工作区、事件中心或 Azure 存储帐户,以便接收和分析调查数据。 如果不将调查数据发送到其中一个选项,则调查数据将不会存储,并且将丢失。 若要为通信服务启用这些日志,请参阅:呼叫结束调查日志

使用 Log Analytics 工作区查看调查数据

需要启用 Log Analytics 工作区来存储调查的日志数据和访问调查结果。 若要为通信服务启用这些日志,请参阅:呼叫调查日志结束

最佳做法

下面是我们建议的调查流和建议的问题提示,以供你考虑。 你可以在开发中使用我们的建议,也可以为可视化界面使用自定义的问题提示和流。

问题 1:用户如何看待其整体通话质量体验? 我们建议你在开始调查时仅向参与者询问整体质量情况。 如果你将第一个问题与第二个问题分开,那么只有在调查参与者指出他们遇到通话质量问题时,收集对音频、视频和屏幕共享问题的答复才会有所帮助。

  • 建议的提示:“通话质量如何?”
  • API 问题值:整体通话质量

问题 2:用户是否在通话中感知到任何音频、视频或屏幕共享问题? 如果调查参与者在回答问题 1 时,给出的分数等于或低于整体通话质量的界限值,则提出第二个问题。

  • 建议的提示:“有哪些方面需要改善?”
  • API 问题值:音频、视频和屏幕共享

调查执行指南

  • 避免狂轰滥炸式的调查,不要对所有通话参与者都进行调查。
  • 问题的顺序很重要。 建议对问题 2 中的可选标记序列进行随机化处理,以防被调查者将大部分反馈集中在他们视觉上看到的第一个提示上。
  • 请考虑对受控试验中的单独 Azure 通信服务资源使用调查来确定发布影响。

后续步骤