Install
$ agentstack add skill-happy-technologies-llc-happy-platform-skills-sentiment-analysis ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Sentiment Analysis
Overview
This skill provides a systematic approach to analyzing customer sentiment across CSM case communications and interactions. It helps you:
- Collect and analyze all customer-facing communications (emails, chat transcripts, comments, portal submissions)
- Assess sentiment polarity (positive, neutral, negative) and intensity across each communication
- Track sentiment progression over the case lifecycle to identify trends (improving, stable, deteriorating)
- Detect escalation risk indicators such as repeated contacts, negative language patterns, and SLA breaches
- Flag at-risk cases and accounts that require immediate attention or proactive outreach
- Provide sentiment scoring for account health dashboards and management reporting
When to use: When a CSM manager needs to assess customer satisfaction trends, when triaging cases for priority, when identifying accounts at churn risk, or when evaluating agent performance based on customer outcomes.
Prerequisites
- Roles:
sn_customerservice_agent,sn_customerservice_manager, orcsm_admin - Access: Read access to
sn_customerservice_case,interaction,sys_journal_field,sys_email,customer_account,csm_consumer, andsn_customerservice_slatables - Knowledge: Understanding of sentiment analysis concepts, CSM case lifecycle, and your organization's escalation policies
Procedure
Step 1: Retrieve the Case and Customer Context
Fetch the case record and customer information to establish baseline context.
Using MCP (Claude Code/Desktop):
Tool: SN-Read-Record
Parameters:
table_name: sn_customerservice_case
sys_id: [case_sys_id]
fields: number,short_description,description,state,priority,urgency,impact,category,subcategory,contact,account,consumer,product,opened_at,opened_by,resolved_at,closed_at,escalation,severity,reassignment_count,reopen_count,contact_type,sla_due
Tool: SN-Query-Table
Parameters:
table_name: customer_account
query: sys_id=[account_sys_id]
fields: sys_id,name,customer_tier,industry,notes
limit: 1
Using REST API:
GET /api/now/table/sn_customerservice_case/{case_sys_id}?sysparm_fields=number,short_description,description,state,priority,urgency,impact,category,subcategory,contact,account,consumer,product,opened_at,escalation,severity,reassignment_count,reopen_count,contact_type,sla_due&sysparm_display_value=true
GET /api/now/table/customer_account/{account_sys_id}?sysparm_fields=name,customer_tier,industry,notes&sysparm_display_value=true
Step 2: Collect Customer Comments and Communications
Retrieve all customer-facing comments (additional comments / customer-visible entries).
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=^element=comments^ORDERBYsys_created_on
fields: sys_id,value,sys_created_on,sys_created_by,element
limit: 100
Using REST API:
GET /api/now/table/sys_journal_field?sysparm_query=element_id=^element=comments^ORDERBYsys_created_on&sysparm_fields=value,sys_created_on,sys_created_by,element&sysparm_limit=100
Step 3: Retrieve Email Communications
Pull inbound emails from the customer for sentiment analysis.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_email
query: instance=^type=received^ORDERBYsys_created_on
fields: sys_id,subject,body_text,sys_created_on,sys_created_by,importance,type
limit: 30
Using REST API:
GET /api/now/table/sys_email?sysparm_query=instance=^type=received^ORDERBYsys_created_on&sysparm_fields=subject,body_text,sys_created_on,importance,type&sysparm_limit=30&sysparm_display_value=true
Step 4: Retrieve Chat and Interaction Transcripts
Pull chat interaction entries for analysis.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: interaction
query: parent=^ORDERBYsys_created_on
fields: sys_id,number,channel,state,opened_at,closed_at,short_description
limit: 20
For each chat interaction, retrieve the transcript:
Tool: SN-Query-Table
Parameters:
table_name: interaction_entry
query: interaction=^ORDERBYsys_created_on
fields: sys_id,message,type,sys_created_on,sys_created_by,initiated_from
limit: 100
Using REST API:
GET /api/now/table/interaction?sysparm_query=parent=^ORDERBYsys_created_on&sysparm_fields=sys_id,number,channel,state,opened_at,closed_at&sysparm_limit=20&sysparm_display_value=true
GET /api/now/table/interaction_entry?sysparm_query=interaction=^ORDERBYsys_created_on&sysparm_fields=message,type,sys_created_on,sys_created_by&sysparm_limit=100
Step 5: Check SLA Compliance and Escalation History
SLA breaches and escalations are strong sentiment indicators.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_sla
query: task=
fields: sys_id,sla,stage,has_breached,planned_end_time,percentage,business_percentage,start_time,end_time
limit: 10
Using REST API:
GET /api/now/table/sn_customerservice_sla?sysparm_query=task=&sysparm_fields=sla,stage,has_breached,planned_end_time,percentage,business_percentage&sysparm_limit=10&sysparm_display_value=true
Step 6: Analyze Customer's Case History for Patterns
Check if the customer has a pattern of negative experiences across multiple cases.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: consumer=[consumer_sys_id]^ORDERBYDESCopened_at
fields: number,short_description,state,priority,escalation,reopen_count,reassignment_count,opened_at,closed_at,resolution_code
limit: 20
Using REST API:
GET /api/now/table/sn_customerservice_case?sysparm_query=consumer=^ORDERBYDESCopened_at&sysparm_fields=number,short_description,state,priority,escalation,reopen_count,reassignment_count,opened_at,closed_at,resolution_code&sysparm_limit=20&sysparm_display_value=true
Step 7: Perform Sentiment Analysis and Generate Report
Analyze all collected communications for sentiment indicators and produce a structured assessment.
Sentiment Indicator Keywords:
| Negative Indicators | Neutral Indicators | Positive Indicators | |---------------------|--------------------|---------------------| | frustrated, unacceptable | following up, checking in | thank you, appreciate | | disappointed, angry | any update, status | excellent, great job | | escalate, manager | when will, timeline | resolved, working now | | unresolved, still broken | can you confirm | helpful, impressed | | worst, terrible, awful | need more info | recommend, satisfied | | cancel, legal, lawsuit | please advise | above and beyond | | wasting my time | looking forward | quick response | | incompetent, useless | per our discussion | keep up the good work |
Risk Factor Scoring:
| Factor | Score | Condition | |--------|-------|-----------| | SLA Breached | +3 | Any SLA in breached state | | Escalation Active | +2 | Escalation level > 0 | | Reopen Count > 0 | +2 | Case has been reopened | | Reassignment Count > 3 | +1 | Multiple team handoffs | | Negative Email Tone | +2 | Per negative email detected | | High Priority (P1/P2) | +1 | Priority is 1 or 2 | | Multiple Cases Open | +1 | Customer has > 2 open cases | | Case Age > 7 days | +1 | Case open longer than expected |
Risk Levels:
- Score 0-2: Low Risk (Green)
- Score 3-5: Medium Risk (Yellow)
- Score 6-8: High Risk (Orange)
- Score 9+: Critical Risk (Red)
Output Report:
=== SENTIMENT ANALYSIS REPORT ===
Case: [number] | Customer: [name] | Account: [account_name]
Account Tier: [tier] | Case Age: [days] days
Analysis Date: [current_date]
OVERALL SENTIMENT: [Positive/Neutral/Negative]
RISK SCORE: [score]/15 ([Low/Medium/High/Critical])
TREND: [Improving/Stable/Deteriorating]
COMMUNICATION SENTIMENT TIMELINE:
Date | Channel | Sentiment | Key Indicators
-----------+---------+-----------+------------------
[date_1] | Email | Negative | "frustrated", "unacceptable"
[date_2] | Chat | Negative | "still not working", "escalate"
[date_3] | Email | Neutral | "any update on timeline"
[date_4] | Comment | Positive | "thank you for the update"
SENTIMENT PROGRESSION:
[date_1] ████████░░ Negative (-0.7)
[date_2] ███████░░░ Negative (-0.6)
[date_3] █████░░░░░ Neutral (-0.1)
[date_4] ███░░░░░░░ Positive (+0.4)
Trend: IMPROVING ↑
RISK FACTORS:
[✓] SLA Breached (Response SLA) .............. +3
[✓] Escalation Level 1 ...................... +2
[✗] Case Reopened ............................ +0
[✓] Reassignment Count: 4 ................... +1
[✓] Negative Communications: 2 .............. +4
[✗] High Priority ............................ +0
[✗] Multiple Open Cases ..................... +0
[✓] Case Age: 12 days ....................... +1
Total: 11 (CRITICAL)
ACCOUNT HEALTH INDICATORS:
- Total Cases (90 days): [count]
- Open Cases: [count]
- Average Resolution Time: [days]
- Escalation Rate: [percentage]%
- Reopen Rate: [percentage]%
KEY OBSERVATIONS:
1. [observation about sentiment trend]
2. [observation about risk factors]
3. [observation about account health]
RECOMMENDED ACTIONS:
1. [action based on sentiment analysis]
2. [action based on risk score]
3. [action based on account health]
Tool Usage
MCP Tools Reference
| Tool | When to Use | |------|-------------| | SN-NL-Search | Search for cases by sentiment-related keywords or descriptions | | SN-Query-Table | Retrieve communications, case history, SLA data | | SN-Read-Record | Fetch individual case or account records |
REST API Reference
| Endpoint | Method | Purpose | |----------|--------|---------| | /api/now/table/sn_customerservice_case | GET | Case details and history | | /api/now/table/sys_journal_field | GET | Customer comments and work notes | | /api/now/table/sys_email | GET | Email communications | | /api/now/table/interaction | GET | Chat and phone interactions | | /api/now/table/interaction_entry | GET | Chat transcript messages | | /api/now/table/sn_customerservice_sla | GET | SLA compliance data | | /api/now/table/customer_account | GET | Account tier and health | | /api/now/table/csm_consumer | GET | Consumer profile data |
Best Practices
- Analyze all channels: Customer sentiment may differ across email, chat, and portal; aggregate all channels for an accurate picture
- Weight recent communications higher: The most recent interaction is more indicative of current sentiment than older ones
- Consider context: A terse message may be neutral rather than negative; always consider the full conversation thread
- Track sentiment over time: A single negative message is less concerning than a sustained downward trend
- Cross-reference with metrics: Combine sentiment analysis with SLA data, reassignment counts, and reopen counts for a holistic view
- Account-level aggregation: Individual case sentiment should roll up to an account-level health score
- Flag proactively: Don't wait for explicit escalation requests; flag cases where sentiment is deteriorating before the customer escalates
- Respect cultural differences: Tone and directness vary by culture; avoid false positives from direct communication styles
- Document findings: Record sentiment analysis results as work notes for team awareness
Troubleshooting
"No customer comments found"
Cause: The case may use work notes exclusively, or comments may be stored in a different field Solution: Check both element=comments and element=work_notes in sys_journal_field. Also check sys_email for customer communications. Some organizations use custom journal fields.
"Chat transcripts are empty"
Cause: Chat messages may be in a different table depending on the messaging framework Solution: Try querying live_message table: sysparm_query=group=. Also check sys_cs_message for Customer Service Messaging (CSM) chats.
"Sentiment analysis seems inaccurate"
Cause: Automated keyword-based analysis may miss sarcasm, context, or domain-specific language Solution: Supplement keyword detection with contextual analysis. Look at the full conversation thread rather than individual messages. Check for follow-up messages that clarify intent.
"Account health data incomplete"
Cause: Historical cases may have been archived or the consumer record may not link all cases Solution: Query cases by both consumer and account fields to capture all related cases. Check contact field as well since some cases may link to customer_contact instead of csm_consumer.
Examples
Example 1: Single Case Sentiment Analysis
Scenario: Analyze sentiment for a billing dispute case that has been open for 10 days.
Step 1 - Get case:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: number=CS0090100
fields: sys_id,number,short_description,state,priority,escalation,contact,account,consumer,opened_at,reopen_count,reassignment_count,sla_due
limit: 1
Step 2 - Get customer emails:
Tool: SN-Query-Table
Parameters:
table_name: sys_email
query: instance=^type=received^ORDERBYsys_created_on
fields: body_text,sys_created_on,subject
limit: 20
Step 3 - Check SLA:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_sla
query: task=
fields: sla,stage,has_breached,percentage
limit: 5
Output:
SENTIMENT ANALYSIS - CS0090100 (Billing Dispute)
Customer: Robert Chen | Account: Meridian Inc. (Gold)
OVERALL SENTIMENT: Negative (deteriorating)
RISK SCORE: 9/15 (CRITICAL)
TIMELINE:
Mar 09 | Email | Neutral | "I noticed an incorrect charge..."
Mar 12 | Email | Negative | "I haven't heard back, this is urgent"
Mar 15 | Email | Negative | "This is unacceptable, 6 days with no response"
Mar 18 | Email | Negative | "I'm considering escalating to management"
RISK FACTORS: SLA Breached (+3), Negative emails x3 (+6)
TREND: Deteriorating ↓
RECOMMENDED ACTIONS:
1. Immediate manager outreach call to Robert Chen
2. Fast-track billing adjustment with finance team
3. Provide concession or credit for service failure
Example 2: Account-Level Sentiment Dashboard
Scenario: Generate sentiment overview for all open cases under a key account.
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: account=[account_sys_id]^stateNOT IN6,7,8^ORDERBYpriority
fields: sys_id,number,short_description,state,priority,escalation,contact,opened_at,reopen_count,reassignment_count
limit: 50
Output:
ACCOUNT SENTIMENT DASHBOARD - GLOBEX CORPORATION
Tier: Platinum | Open Cases: 7 | Avg Age: 8.3 days
CASE SENTIMENT SUMMARY:
Case | Priority | Age | Sentiment | Risk
-----------+----------+------+-----------+--------
CS0089001 | P1 | 3d | Negative | HIGH
CS0089234 | P2 | 5d | Neutral | MEDIUM
CS0089500 | P2 | 12d | Negative | CRITICAL
CS0089801 | P3 | 7d | Neutral | LOW
CS0090010 | P3 | 2d | Positive | LOW
CS0090150 | P3 | 14d | Negative | HIGH
CS0090200 | P4 | 1d | Neutral | LOW
ACCOUNT HEALTH: AT RISK
- 3 of 7 cases have negative sentiment
- 1 case in critical risk state
- Escalation rate: 28% (above 15% threshold)
RECOMMENDED: Schedule account review with CSM manager
Related Skills
csm/case-summarization- Summarize case details for sentiment contextcsm/chat-recommendation- Use sentiment to calibrate chat response tonecsm/email-recommendation- Adjust email tone based on sentiment findingscsm/activity-response- Generate sentiment-aware activity responsesreporting/customer-satisfaction- CSAT reporting and trend analysis
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Happy-Technologies-LLC
- Source: Happy-Technologies-LLC/happy-platform-skills
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.