AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

Csm Sentiment Analysis

skill-happy-technologies-llc-happy-platform-skills-sentiment-analysis · by Happy-Technologies-LLC

Analyze customer sentiment across CSM cases, communications, and interactions to track sentiment progression, identify escalation patterns, and flag at-risk cases

No reviews yet
0 installs
20 views
0.0% view→install

Install

$ agentstack add skill-happy-technologies-llc-happy-platform-skills-sentiment-analysis

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No 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.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-happy-technologies-llc-happy-platform-skills-sentiment-analysis)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

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 →
Are you the author of Csm Sentiment Analysis? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

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, or csm_admin
  • Access: Read access to sn_customerservice_case, interaction, sys_journal_field, sys_email, customer_account, csm_consumer, and sn_customerservice_sla tables
  • 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 context
  • csm/chat-recommendation - Use sentiment to calibrate chat response tone
  • csm/email-recommendation - Adjust email tone based on sentiment findings
  • csm/activity-response - Generate sentiment-aware activity responses
  • reporting/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.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.