Rate my Call in Skype for Business Server

Summary: Learn about the Rate My Call feature in Skype for Business Server.

Rate My Call was a new feature in Skype for Business 2015 and 2016 clients on Windows that provides enterprises a way to get feedback from their end-users.

The Rate My Call window offers a "star" rating system and predefined tokens for audio and video calls. In addition, administrators can enable a custom field to provide feedback.

Collected Rate My Call data is not currently included in any existing monitoring report, but it has a separate monitoring report. Data is collected in SQL tables that can be accessed by running SQL queries.

Rate my Call Prerequisites

Before the users in your Skype for Business Server deployment can access Rate My Call functionality, the following set of components must be deployed and configured:

  • You must have Skype for Business Server installed (version 9160 or higher).

  • Have your users install and update to the latest version of Skype for Business and also ask them to use the Skype for Business UI.

  • Users must be homed on the Skype for Business Server Front End pool.

  • You must have a Skype for Business Server monitoring database deployed and associated to your Skype for Business Server pools.

  • We recommend deploying Call Quality Dashboard (CQD).

Configure Rate my Call

The Rate My Call feature is enabled by default in the Client policy with the following settings:

  • Rate My Call Display Percentage - 10%

  • Rate My Call Allow Custom User Feedback - disabled

There is no action required to enable the base feature, however but if you want custom feedback you will need to enable it separately. The following Windows PowerShell cmdlet is an example of enabling custom end user feedback and changing the interval from 10% to 80%.

Set-CSClientPolicy -Identity <PolicyIdentity> -RateMyCallDisplayPercentage 80 -RateMyCallAllowCustomUserFeedback $true 

Accessing Rate My Call Data

Data from users is collected in two tables in the monitoring database.

[QoeMetrics].[dbo].[CallQualityFeedbackToken] - this table contains results of token polling by end users.

[QoeMetrics].[dbo].[CallQualityFeedbackTokenDef] - this table contains token definitions.

Token definitions are coded as follows:

# Definition
1
DistortedSpeech
2
ElectronicFeedback
3
BackgroundNoise
4
MuffledSpeech
5
Echo
21
FrozenVideo
22
PixelatedVideo
23
BlurryImage
24
PoorColor
25
DarkVideo
101
Audio_SilentLocal
102
Audio_SilentRemote
103
Audio_Echo
104
Audio_BackgroundNoise
105
Audio_LowSound
106
Audio_Dropped
107
Audio_DistortedSpeech
108
Audio_Interrupted
109
Audio_Other
201
Video_NoLocalVideo
202
Video_NoRemoteVideo
203
Video_LowQuality
204
Video_FrozenVideo
205
Video_StoppedUnexpectedly
206
Video_DarkVideo
207
Video_NoAudioSync
208
Video_Other
301
Pstn_DialPad
401
SS_NoContentLocal
402
SS_NoContentRemote
403
SS_CantPresent
404
SS_LowQuality
405
SS_Freezing
406
SS_StoppedUnexpectedly
407
SS_LargeDelay
408
SS_Other
501
Reliabilty_Join
502
Reliabilty_Invite

[QoeMetrics].[dbo].[CallQualityFeedback] This table contains polling results from "Star" voting and customer feedback if enabled.

Data from tables can be called by using a select * from [Table.Name] query or by using Microsoft SQL Server Management Studio.

The following SQL queries can be used:

Audio

SELECT
        s.ConferenceDateTime
        ,Caller.URI as Caller
        ,CallerCqf.FeedbackText 
        ,CallerCqf.Rating
        ,CallerCqfTokenDef.TokenDescription 
        ,CallerCqfToken.TokenValue
    FROM [Session] s WITH (NOLOCK)
        INNER JOIN [MediaLine] AS m WITH (NOLOCK) ON 
            m.ConferenceDateTime = s.ConferenceDateTime
            AND m.SessionSeq = s.SessionSeq                        
        INNER JOIN [AudioStream] AS a WITH (NOLOCK) ON -- only look at Audio related feedback
            a.MediaLineLabel = m.MediaLineLabel    
            and a.ConferenceDateTime = m.ConferenceDateTime 
            and a.SessionSeq = m.SessionSeq
            and a.SenderIsCallerPAI = 1                
        INNER JOIN [CallQualityFeedback] AS CallerCqf WITH (NOLOCK) ON
            CallerCqf.ConferenceDateTime  = s.ConferenceDateTime 
            and
            CallerCqf.SessionSeq = s.SessionSeq 
        INNER JOIN [CallQualityFeedbackToken] AS CallerCqfToken WITH (NOLOCK) ON
            CallerCqfToken.ConferenceDateTime  = s.ConferenceDateTime 
            and
            CallerCqfToken.SessionSeq = s.SessionSeq
            and
            CallerCqfToken.FromURI = CallerCqf.FromURI
        INNER JOIN [CallQualityFeedbackTokenDef] AS CallerCqfTokenDef WITH (NOLOCK) ON
            CallerCqfTokenDef.TokenId = CallerCqfToken.TokenId
            and
            (CallerCqfToken.TokenId < 20 or (CallerCqfToken.TokenId > 100 and CallerCqfToken.TokenId < 200)) -- only look at Audio related feedback
        INNER JOIN [User] AS Caller WITH (NOLOCK) ON
            Caller.UserKey = CallerCqf.FromURI

Video

SELECT
        s.ConferenceDateTime
        ,Caller.URI as Caller
        ,CallerCqf.FeedbackText 
        ,CallerCqf.Rating
        ,CallerCqfTokenDef.TokenDescription 
        ,CallerCqfToken.TokenValue
    FROM [Session] s WITH (NOLOCK)
        INNER JOIN [MediaLine] AS m WITH (NOLOCK) ON 
            m.ConferenceDateTime = s.ConferenceDateTime
            AND m.SessionSeq = s.SessionSeq                        
        INNER JOIN [VideoStream] AS v WITH (NOLOCK) ON -- only look at Video related feedback
            v.MediaLineLabel = m.MediaLineLabel    
            and v.ConferenceDateTime = m.ConferenceDateTime 
            and v.SessionSeq = m.SessionSeq
            and v.SenderIsCallerPAI = 1                
        INNER JOIN [CallQualityFeedback] AS CallerCqf WITH (NOLOCK) ON
            CallerCqf.ConferenceDateTime  = s.ConferenceDateTime 
            and
            CallerCqf.SessionSeq = s.SessionSeq 
        INNER JOIN [CallQualityFeedbackToken] AS CallerCqfToken WITH (NOLOCK) ON
            CallerCqfToken.ConferenceDateTime  = s.ConferenceDateTime 
            and
            CallerCqfToken.SessionSeq = s.SessionSeq
            and
            CallerCqfToken.FromURI = CallerCqf.FromURI
        INNER JOIN [CallQualityFeedbackTokenDef] AS CallerCqfTokenDef WITH (NOLOCK) ON
            CallerCqfTokenDef.TokenId = CallerCqfToken.TokenId
            and
           ((CallerCqfToken.TokenId > 20 and CallerCqfToken.TokenId < 100) or (CallerCqfToken.TokenId > 200 and CallerCqfToken.TokenId < 300)) -- only look at Video related feedback
        INNER JOIN [User] AS Caller WITH (NOLOCK) ON
            Caller.UserKey = CallerCqf.FromURI

Updating Token Definitions

The latest Skype for Business clients report new problem token IDs (> 100) that may not be present in your [QoeMetrics].[dbo].[CallQualityFeedbackTokenDef] table. To update the database table with the latest token definitions, the below SQL command can be run on the monitoring database using Microsoft SQL Server Management Studio. This command will replace all entries in the [QoeMetrics].[dbo].[CallQualityFeedbackTokenDef] table.

DELETE FROM [CallQualityFeedbackTokenDef];
INSERT INTO [CallQualityFeedbackTokenDef] (TokenId, TokenDescription) VALUES
    (1,   N'DistortedSpeech'),
    (2,   N'ElectronicFeedback'),
    (3,   N'BackgroundNoise'),
    (4,   N'MuffledSpeech'),
    (5,   N'Echo'),
    (21,  N'FrozenVideo'),
    (22,  N'PixelatedVideo'),
    (23,  N'BlurryImage'),
    (24,  N'PoorColor'),
    (25,  N'DarkVideo'),
    (101, N'Audio_SilentLocal'),
    (102, N'Audio_SilentRemote'),
    (103, N'Audio_Echo'),
    (104, N'Audio_BackgroundNoise'),
    (105, N'Audio_LowSound'),
    (106, N'Audio_Dropped'),
    (107, N'Audio_DistortedSpeech'),
    (108, N'Audio_Interrupted'),
    (109, N'Audio_Other'),
    (201, N'Video_NoLocalVideo'),
    (202, N'Video_NoRemoteVideo'),
    (203, N'Video_LowQuality'),
    (204, N'Video_FrozenVideo'),
    (205, N'Video_StoppedUnexpectedly'),
    (206, N'Video_DarkVideo'),
    (207, N'Video_NoAudioSync'),
    (208, N'Video_Other'),
    (301, N'Pstn_DialPad'),
    (401, N'SS_NoContentLocal'),
    (402, N'SS_NoContentRemote'),
    (403, N'SS_CantPresent'),
    (404, N'SS_LowQuality'),
    (405, N'SS_Freezing'),
    (406, N'SS_StoppedUnexpectedly'),
    (407, N'SS_LargeDelay'),
    (408, N'SS_Other'),
    (501, N'Reliabilty_Join'),
    (502, N'Reliabilty_Invite');