Agent Performance Rating

Capture detailed feedback about individual support agents with this comprehensive rating form. Evaluate key performance dimensions including communication skills, problem-solving ability, professionalism, and empathy. The form uses a combination of quantitative ratings and qualitative feedback to provide actionable coaching insights while maintaining a positive customer experience.

Service & Support

Try the Form

Help us recognize great service and improve where needed.
Overall Experience
0/5
Problem Resolution
Very difficult
Very easy
Agent Performance
Poor Fair Good Excellent
Clear communication
Product/service knowledge
Listened to my needs
Showed empathy and understanding
Professionalism and courtesy
Responsiveness and speed
What Stood Out
Additional Feedback
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
export function agentRating(form: FormTs) {
// Agent Performance Rating Form
// Demonstrates: StarRating, MatrixQuestion, EmojiRating, ThumbRating, RatingScale (CES), SuggestionChips
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Rate Your Support Experience',
computedValue: () => 'Help us recognize great service and improve where needed.',
customStyles: {
backgroundColor: '#0891b2',
color: 'white',
padding: '24px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Overall Rating
// ============================================
const overallSection = form.addSubform('overall', {
title: 'Overall Experience',
customStyles: () => {
const rating = overallSection.starRating('overallRating')?.value();
if (rating !== null && rating !== undefined && rating >= 4) {
return { backgroundColor: '#ecfdf5', padding: '16px', borderRadius: '8px' };
}
if (rating !== null && rating !== undefined && rating <= 2) {
return { backgroundColor: '#fef2f2', padding: '16px', borderRadius: '8px' };
}
return {};
}
});
 
overallSection.addRow(row => {
row.addStarRating('overallRating', {
label: 'How would you rate your overall experience with our agent?',
maxStars: 5,
size: 'lg',
alignment: 'center',
showConfettiOnMax: true
});
});
 
overallSection.addRow(row => {
row.addEmojiRating('quickMood', {
label: 'How do you feel after this interaction?',
preset: 'satisfaction',
size: 'md',
alignment: 'center'
});
});
 
// ============================================
// SECTION 2: Resolution
// ============================================
const resolutionSection = form.addSubform('resolution', {
title: 'Problem Resolution'
});
 
resolutionSection.addRow(row => {
row.addThumbRating('issueResolved', {
label: 'Was your issue resolved?',
showLabels: true,
upLabel: 'Yes, resolved',
downLabel: 'No, not resolved',
size: 'lg',
alignment: 'center'
});
});
 
resolutionSection.addRow(row => {
row.addRadioButton('resolutionQuality', {
label: 'How well was your issue resolved?',
options: [
{ id: 'exceeded', name: 'Exceeded my expectations' },
{ id: 'fully', name: 'Fully resolved as expected' },
{ id: 'partially', name: 'Partially resolved' },
{ id: 'not', name: 'Not resolved at all' }
],
orientation: 'vertical',
isVisible: () => resolutionSection.thumbRating('issueResolved')?.value() === 'up'
});
});
 
resolutionSection.addRow(row => {
row.addDropdown('unresolvedReason', {
label: 'Why was your issue not resolved?',
options: [
{ id: 'complexity', name: 'Issue too complex' },
{ id: 'knowledge', name: 'Agent lacked knowledge' },
{ id: 'policy', name: 'Policy limitations' },
{ id: 'escalation', name: 'Needs escalation' },
{ id: 'time', name: 'Ran out of time' },
{ id: 'technical', name: 'Technical issues' },
{ id: 'other', name: 'Other reason' }
],
placeholder: 'Select reason...',
isVisible: () => resolutionSection.thumbRating('issueResolved')?.value() === 'down',
isRequired: () => resolutionSection.thumbRating('issueResolved')?.value() === 'down'
});
});
 
resolutionSection.addRow(row => {
row.addRatingScale('effortScore', {
label: 'How easy was it to get your issue handled?',
preset: 'ces',
alignment: 'center'
});
});
 
// ============================================
// SECTION 3: Agent Attributes
// ============================================
const attributesSection = form.addSubform('attributes', {
title: 'Agent Performance'
});
 
attributesSection.addRow(row => {
row.addMatrixQuestion('agentAttributes', {
label: 'Please rate the agent on the following:',
rows: [
{ id: 'communication', label: 'Clear communication' },
{ id: 'knowledge', label: 'Product/service knowledge' },
{ id: 'listening', label: 'Listened to my needs' },
{ id: 'empathy', label: 'Showed empathy and understanding' },
{ id: 'professionalism', label: 'Professionalism and courtesy' },
{ id: 'responsiveness', label: 'Responsiveness and speed' }
],
columns: [
{ id: 'poor', label: 'Poor' },
{ id: 'fair', label: 'Fair' },
{ id: 'good', label: 'Good' },
{ id: 'excellent', label: 'Excellent' }
],
fullWidth: true
});
});
 
// ============================================
// SECTION 4: Highlights & Lowlights
// ============================================
const highlightsSection = form.addSubform('highlights', {
title: 'What Stood Out',
isVisible: () => overallSection.starRating('overallRating')?.value() !== null
});
 
highlightsSection.addRow(row => {
row.addSuggestionChips('positives', {
label: 'What did the agent do well? (select all that apply)',
suggestions: [
{ id: 'patient', name: 'Patient' },
{ id: 'knowledgeable', name: 'Knowledgeable' },
{ id: 'friendly', name: 'Friendly' },
{ id: 'thorough', name: 'Thorough' },
{ id: 'quick', name: 'Quick resolution' },
{ id: 'proactive', name: 'Proactive' },
{ id: 'clear', name: 'Clear explanations' },
{ id: 'followed-up', name: 'Good follow-up' }
],
alignment: 'left',
isVisible: () => {
const rating = overallSection.starRating('overallRating')?.value();
return rating !== null && rating !== undefined && rating >= 3;
}
});
});
 
highlightsSection.addRow(row => {
row.addSuggestionChips('improvements', {
label: 'What could be improved?',
suggestions: [
{ id: 'wait-time', name: 'Long wait time' },
{ id: 'knowledge', name: 'Product knowledge' },
{ id: 'communication', name: 'Communication' },
{ id: 'empathy', name: 'More empathy needed' },
{ id: 'follow-through', name: 'Follow-through' },
{ id: 'speed', name: 'Faster resolution' },
{ id: 'listening', name: 'Active listening' },
{ id: 'attitude', name: 'Attitude' }
],
alignment: 'left',
isVisible: () => {
const rating = overallSection.starRating('overallRating')?.value();
return rating !== null && rating !== undefined && rating <= 3;
}
});
});
 
// ============================================
// SECTION 5: Comments
// ============================================
const commentsSection = form.addSubform('comments', {
title: 'Additional Feedback',
isVisible: () => overallSection.starRating('overallRating')?.value() !== null
});
 
commentsSection.addSpacer({ height: '8px' });
 
commentsSection.addRow(row => {
row.addTextarea('feedback', {
label: () => {
const rating = overallSection.starRating('overallRating')?.value();
if (rating !== null && rating !== undefined && rating >= 4) {
return 'Would you like to share what made this a great experience?';
}
if (rating !== null && rating !== undefined && rating <= 2) {
return 'We are sorry about your experience. Please tell us what happened:';
}
return 'Any additional comments about your experience?';
},
placeholder: 'Your feedback helps us improve...',
rows: 3
});
});
 
commentsSection.addRow(row => {
row.addCheckbox('useForTraining', {
label: 'You may use my feedback for agent training purposes'
});
});
 
// ============================================
// SECTION 6: Recognition (for excellent ratings)
// ============================================
const recognitionSection = form.addSubform('recognition', {
title: 'Agent Recognition',
isVisible: () => {
const rating = overallSection.starRating('overallRating')?.value();
return rating !== null && rating !== undefined && rating === 5;
},
customStyles: { backgroundColor: '#fef3c7', padding: '16px', borderRadius: '8px' }
});
 
recognitionSection.addRow(row => {
row.addTextPanel('recognitionNote', {
computedValue: () => 'This was an excellent experience! Would you like to recognize this agent?',
customStyles: { textAlign: 'center', marginBottom: '12px' }
});
});
 
recognitionSection.addRow(row => {
row.addCheckbox('nominateForRecognition', {
label: 'Yes, please recognize this agent for outstanding service'
});
});
 
recognitionSection.addRow(row => {
row.addTextarea('recognitionMessage', {
label: 'Message for the agent (optional):',
placeholder: 'A personal note of appreciation...',
rows: 2,
isVisible: () => recognitionSection.checkbox('nominateForRecognition')?.value() === true
});
});
 
// ============================================
// SECTION 7: Summary
// ============================================
const summarySection = form.addSubform('summary', {
title: 'Feedback Summary',
isVisible: () => {
const rating = overallSection.starRating('overallRating')?.value();
const resolved = resolutionSection.thumbRating('issueResolved')?.value();
return rating !== null && resolved !== null;
}
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const rating = overallSection.starRating('overallRating')?.value();
const mood = overallSection.emojiRating('quickMood')?.value();
const resolved = resolutionSection.thumbRating('issueResolved')?.value();
const effort = resolutionSection.ratingScale('effortScore')?.value();
const positives = highlightsSection.suggestionChips('positives')?.value() || [];
const improvements = highlightsSection.suggestionChips('improvements')?.value() || [];
const nominated = recognitionSection.checkbox('nominateForRecognition')?.value();
 
const moodLabels: Record<string, string> = {
'very-bad': 'Very Unsatisfied',
'bad': 'Unsatisfied',
'neutral': 'Neutral',
'good': 'Satisfied',
'excellent': 'Very Satisfied'
};
 
const effortLabels: Record<number, string> = {
1: 'Very Difficult',
2: 'Difficult',
3: 'Neutral',
4: 'Easy',
5: 'Very Easy',
6: 'Extremely Easy',
7: 'Effortless'
};
 
let summary = 'Agent Rating Summary\n';
summary += '═'.repeat(25) + '\n\n';
 
if (rating) {
summary += `Overall Rating: ${'★'.repeat(rating)}${'☆'.repeat(5 - rating)} (${rating}/5)\n`;
}
if (mood) {
summary += `Feeling: ${moodLabels[mood] || mood}\n`;
}
summary += `Issue Resolved: ${resolved === 'up' ? 'Yes' : 'No'}\n`;
if (effort) {
summary += `Effort Level: ${effortLabels[effort] || effort}\n`;
}
 
if (positives.length > 0) {
summary += `\n+ Positives: ${positives.length} items\n`;
}
if (improvements.length > 0) {
summary += `! Improvements: ${improvements.length} items\n`;
}
if (nominated) {
summary += '\n⭐ Nominated for recognition';
}
 
return summary;
},
customStyles: () => {
const rating = overallSection.starRating('overallRating')?.value();
const baseStyles = {
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
};
 
if (rating !== null && rating !== undefined && rating >= 4) {
return { ...baseStyles, backgroundColor: '#ecfdf5', borderLeft: '4px solid #10b981' };
} else if (rating !== null && rating !== undefined && rating <= 2) {
return { ...baseStyles, backgroundColor: '#fef2f2', borderLeft: '4px solid #ef4444' };
}
return { ...baseStyles, backgroundColor: '#f0f9ff', borderLeft: '4px solid #0891b2' };
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: () => {
const rating = overallSection.starRating('overallRating')?.value();
if (rating !== null && rating !== undefined && rating === 5) return 'Submit & Recognize';
return 'Submit Rating';
},
isVisible: () => overallSection.starRating('overallRating')?.value() !== null
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Thank you for your feedback!',
message: 'Your rating helps us recognize great agents and improve our service. We appreciate you taking the time to share your experience.'
});
}
 

Frequently Asked Questions

How do I identify which agent to rate?

The form can be pre-populated with the agent's name from your ticketing system, or customers can enter it manually. For anonymous feedback, you can remove the agent identification field and use session/ticket data for attribution.

What attributes are most important for agent evaluation?

This template covers the key dimensions: communication clarity, product knowledge, problem resolution, responsiveness, empathy, and professionalism. You can customize these based on your specific service standards and KPIs.

How can I use this feedback for coaching?

The matrix question provides attribute-level ratings that identify specific strengths and areas for improvement. Use trends over time to create personalized development plans for each agent.

Should negative feedback be shared with agents?

Yes, but constructively. The form captures specific details about what went wrong, enabling targeted coaching conversations. Consider sharing both positive and negative feedback to provide balanced perspective.

How do I prevent feedback fatigue?

The form is designed for quick completion (under 2 minutes). Send selectively - not after every interaction. Consider sampling a percentage of interactions or triggering based on specific criteria.