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

使用呼叫结束调查收集用户反馈

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

先决条件

重要

通话结束调查在通话 SDK 版本 1.13.1 中可用。 在尝试这些说明时,请确保使用该版本或更高版本。

  • 推荐使用处于活跃状态的长期支持(LTS)版本的 Node.js

API 用法示例

通话结束后,应使用通话后调查功能。 用户可以对任何类型的 VoIP 呼叫、1:1、组、会议、传出和传入进行评分。 用户呼叫结束后,您的应用程序可以向最终用户显示一个界面,使他们能够选择评分分数,并在需要时从我们预定义的列表中选择他们在通话期间遇到的问题。

以下代码截取显示了一对一调用的示例。 调用结束后,应用程序可以显示调查 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 表示没有遇到视频问题。
Screenshare 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
Screenshare NoContentLocal NoContentRemote CannotPresent LowQuality Freezes StoppedUnexpectedly LargeDelay OtherIssues

自定义选项

可以选择收集四个 API 值中的每一个,或仅收集找到最重要的 API 值。 例如,你可以选择只询问客户总体通话体验,而不是询问他们关于其音频、视频和屏幕共享体验的信息。 还可以自定义输入范围以满足你的需求。 对于总体呼叫、音频、视频和屏幕共享,默认输入范围为 1 到 5。 但是,每个 API 值都可以从最小 0 自定义到最大 100。

自定义示例

API 分级类别 截止值* 输入范围
整体通话质量 0 - 100 0 - 100
音频 0 - 100 0 - 100
视频 0 - 100 0 - 100
Screenshare 0 - 100 0 - 100

注释

API 中一个问题的阈值指示是 Microsoft 在分析您的调查数据时使用的阈值。 自定义临界值或输入范围时,Microsoft会根据您的自定义设置来分析调查数据。

自定义问题

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

  • 创建 App Insight 资源

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

  • 在应用程序中生成 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();
    

使用 AppInsights 发送的用户响应在 App Insights 工作区下可用。 可以使用 工作簿 在多个资源之间查询、关联调用评级和自定义调查数据。 关联通话评级和自定义调查数据的步骤:

  • 创建新的 工作簿(您的 ACS 资源 -> 监控 -> 工作簿 -> 新建),并查询 ACS 资源中的呼叫调查数据。
  • 添加新查询(“+添加”->“添加查询”)
  • 确保Data sourceLogs并且Resource typeCommunication
  • 可以重命名查询(高级设置 -> 步骤名称 [示例: call-survey])
  • 请注意,在调查数据在 Azure 门户中可见之前,可能需要最多 2 小时 。 查询呼叫分级数据 -
    ACSCallSurvey
    | where TimeGenerated > now(-24h)
    
  • 添加另一个查询以从 App Insights 获取数据(+添加 -> 添加查询)
  • 确保Data sourceLogs并且Resource 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 呼叫、1:1、组、会议、传出和传入进行评分。 用户呼叫结束后,您的应用程序可以向最终用户显示一个界面,使他们能够选择评分分数,并在需要时从我们预定义的列表中选择他们在通话期间遇到的问题。

以下代码截取显示了一对一调用的示例。 调用结束后,应用程序可以显示调查 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 之间。

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

可用的调查标记

总体通话

标记 Description
CannotJoin 客户无法加入电话会议
CannotInvite 客户无法在通话时添加新参与者
HadToRejoin 为了解决某个问题,客户离开并再次加入通话
CallEndedUnexpectedly 客户的呼叫无缘无故地中断了。
OtherIssues 不符合先前说明的任何问题

音频问题

标记 Description
NoLocalAudio 没有来自呼叫的客户计算机上的音频,无法听到呼叫中的任何人
NoRemoteAudio 缺少来自特定参与者的音频
Echo 在通话过程中检测到回声
AudioNoise 收到含有意外噪音的音频
LowVolume 音频太低
AudioStoppedUnexpectedly 音频停止,没有明确的原因(例如没有人静音)
DistortedSpeech 参与者的声音被扭曲,不同于他们预期的语音
AudioInterruption 客户体验音频中断、语音断续等问题。
OtherIssues 不符合先前说明的任何问题

视频问题

标记 Description
NoVideoReceived 客户不会从参与者那里接收视频
NoVideoSent 客户启动视频,但通话中没有人能够看到它
LowQuality 低质量视频
Freezes 视频冻结
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如相机处于打开状态,视频呼叫处于打开状态)
DarkVideoReceived 正在发送视频,但参与者只看到一个深色框(或其他单色)
AudioVideoOutOfSync 视频和音频似乎不同步
OtherIssues 不符合先前说明的任何问题

屏幕共享问题

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

自定义选项

可以选择收集四个 API 值中的每一个,或仅收集找到最重要的 API 值。 例如,你可以选择只询问客户总体通话体验,而不是询问他们关于其音频、视频和屏幕共享体验的信息。 还可以自定义输入范围以满足你的需求。 对于总体呼叫、音频、视频和屏幕共享,默认输入范围为 1 到 5。 但是,每个 API 值都可以从最小 0 自定义到最大 100。

注释

API 中一个问题的阈值指示是 Microsoft 在分析您的调查数据时使用的阈值。 自定义临界值或输入范围时,Microsoft会根据您的自定义设置来分析调查数据。

自定义问题

除了使用通话结束调查 API 外,还可以创建自己的调查问题并将其纳入通话结束调查的结果中。

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

重要

从 iOS 呼叫 SDK 版本 2.10.0 开始,可以使用呼叫结束后的调查问卷。 在尝试这些说明时,请确保使用该版本或更高版本。

API 用法示例

通话结束后,应使用通话后调查功能。 用户可以对任何类型的 VoIP 呼叫、1:1、组、会议、传出和传入进行评分。 用户呼叫结束后,您的应用程序可以向最终用户显示一个界面,使他们能够选择评分分数,并在需要时从我们预定义的列表中选择他们在通话期间遇到的问题。

以下代码截取显示了一对一调用的示例。 调用结束后,应用程序可以显示调查 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 之间。

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

可用的调查标签

整体通话质量

标记 Description
CannotJoin 客户无法加入电话会议
CannotInvite 客户无法在通话时添加新参与者
HadToRejoin 为了解决某个问题,客户离开并再次加入通话
CallEndedUnexpectedly 客户的呼叫无缘无故地中断了。
OtherIssues 不符合先前说明的任何问题

音频问题

标记 Description
NoLocalAudio 没有来自呼叫的客户计算机上的音频,无法听到呼叫中的任何人
NoRemoteAudio 缺少来自特定参与者的音频
Echo 在通话过程中检测到回声
AudioNoise 收到含有意外噪音的音频
LowVolume 音频太低
AudioStoppedUnexpectedly 音频停止,没有明确的原因(例如没有人静音)
DistortedSpeech 参与者的声音被扭曲,不同于他们预期的语音
AudioInterruption 客户体验音频中断、语音断续等问题。
OtherIssues 不符合先前说明的任何问题

视频问题

标记 Description
NoVideoReceived 客户不会从参与者那里接收视频
NoVideoSent 客户启动视频,但通话中没有人能够看到它
LowQuality 低质量视频
Freezes 视频冻结
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如相机处于打开状态,视频呼叫处于打开状态)
DarkVideoReceived 正在发送视频,但参与者只看到一个深色框(或其他单色)
AudioVideoOutOfSync 视频和音频似乎未同步
OtherIssues 不符合先前说明的任何问题

屏幕共享问题

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

自定义选项

可以选择收集四个 API 值中的每一个,或仅收集找到最重要的 API 值。 例如,你可以选择只询问客户总体通话体验,而不是询问他们关于其音频、视频和屏幕共享体验的信息。 还可以自定义输入范围以满足你的需求。 对于总体呼叫、音频、视频和屏幕共享,默认输入范围为 1 到 5。 但是,每个 API 值都可以从最小 0 自定义到最大 100。

注释

API 中一个问题的阈值指示是 Microsoft 在分析您的调查数据时使用的阈值。 自定义临界值或输入范围时,Microsoft会根据您的自定义设置来分析调查数据。

自定义问题

除了使用通话结束调查 API 外,还可以创建自己的调查问题并将其纳入通话结束调查的结果中。

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

重要

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

API 用法示例

通话结束后,应使用通话后调查功能。 用户可以对任何类型的 VoIP 呼叫、1:1、组、会议、传出和传入进行评分。 用户呼叫结束后,您的应用程序可以向最终用户显示一个界面,使他们能够选择评分分数,并在需要时从我们预定义的列表中选择他们在通话期间遇到的问题。

以下代码截取显示了一对一调用的示例。 调用结束后,应用程序可以显示调查 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 之间。

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

可用的调查标签

整体通话质量

标记 Description
CannotJoin 客户无法加入电话会议
CannotInvite 客户无法在通话时添加新参与者
HadToRejoin 为了解决某个问题,客户离开并再次加入通话
EndedUnexpectedly 客户的呼叫无缘无故地中断了。
OtherIssues 不符合先前说明的任何问题

音频问题

标记 Description
NoLocalAudio 没有来自呼叫的客户计算机上的音频,无法听到呼叫中的任何人
NoRemoteAudio 缺少来自特定参与者的音频
Echo 在通话过程中检测到回声
AudioNoise 收到含有意外噪音的音频
LowVolume 音频太低
AudioStoppedUnexpectedly 音频停止,没有明确的原因(例如没有人静音)
DistortedSpeech 参与者的声音被扭曲,不同于他们预期的语音
AudioInterruption 客户体验音频中断、语音断续等问题。
OtherIssues 不符合先前说明的任何问题

视频问题

标记 Description
NoVideoReceived 客户不会从参与者那里接收视频
NoVideoSent 客户启动视频,但通话中没有人能够看到它
LowQuality 低质量视频
Freezes 视频冻结
StoppedUnexpectedly 屏幕共享停止,没有明确的原因(例如相机处于打开状态,视频呼叫处于打开状态)
DarkVideoReceived 正在发送视频,但参与者只看到一个深色框(或其他单色)
AudioVideoOutOfSync 视频和音频似乎未同步
OtherIssues 不符合先前说明的任何问题

屏幕共享问题

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

自定义选项

可以选择收集四个 API 值中的每一个,或仅收集找到最重要的 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 通信服务资源调查来确定发布影响。

后续步骤