From 904a62cd8b729de3860715686c17c71f3ab73997 Mon Sep 17 00:00:00 2001 From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com> Date: Sat, 18 Oct 2025 17:17:36 +0530 Subject: [PATCH 1/3] Create readme.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Incident Sentiment Detector (No AI, Pure JavaScript) A lightweight ServiceNow utility that detects sentiment (Positive / Negative / Neutral) of an Incident’s short description or comments using simple keyword matching — no AI APIs or external libraries required. Useful for support teams to auto-tag sentiment and analyze user frustration or satisfaction trends without expensive integrations. 🚀 Features ✅ Detects sentiment directly inside ServiceNow ✅ Works without external APIs or ML models ✅ Instant classification on form update ✅ Adds detected sentiment to a custom field (u_sentiment) ✅ Simple to extend — just add more positive/negative keywords 🧩 Architecture Overview The solution consists of two main scripts: Component Type Purpose SentimentAnalyzer Script Include Processes text and returns sentiment Client Script (onChange) Client Script Calls SentimentAnalyzer via GlideAjax on short description change 🧱 Setup Instructions 1️⃣ Create Custom Field Create a new field on the Incident table: Name: u_sentiment Type: Choice Choices: Positive, Neutral, Negative --- .../readme.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md diff --git a/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md new file mode 100644 index 0000000000..14e16be3f7 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md @@ -0,0 +1,23 @@ +Incident Sentiment Detector (No AI, Pure JavaScript) + +A lightweight ServiceNow utility that detects sentiment (Positive / Negative / Neutral) of an Incident’s short description or comments using simple keyword matching — no AI APIs or external libraries required. + +Useful for support teams to auto-tag sentiment and analyze user frustration or satisfaction trends without expensive integrations. + +🚀 Features + +✅ Detects sentiment directly inside ServiceNow ✅ Works without external APIs or ML models ✅ Instant classification on form update ✅ Adds detected sentiment to a custom field (u_sentiment) ✅ Simple to extend — just add more positive/negative keywords + +🧩 Architecture Overview + +The solution consists of two main scripts: + +Component Type Purpose SentimentAnalyzer Script Include Processes text and returns sentiment Client Script (onChange) Client Script Calls SentimentAnalyzer via GlideAjax on short description change 🧱 Setup Instructions 1️⃣ Create Custom Field + +Create a new field on the Incident table: + +Name: u_sentiment + +Type: Choice + +Choices: Positive, Neutral, Negative From f5fd30ea8e703dbf8fea6c5e764318a9f2c1b77e Mon Sep 17 00:00:00 2001 From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com> Date: Sat, 18 Oct 2025 17:18:20 +0530 Subject: [PATCH 2/3] Create SentimentAnalyzer.js var SentimentAnalyzer = Class.create(); SentimentAnalyzer.prototype = Object.extendsObject(AbstractAjaxProcessor, { getSentiment: function() { var text = (this.getParameter('sysparm_text') || '').toLowerCase(); var positive = ['thanks', 'great', 'resolved', 'appreciate']; var negative = ['issue', 'error', 'not working', 'fail', 'problem']; var score = 0; positive.forEach(function(word) { if (text.includes(word)) score++; }); negative.forEach(function(word) { if (text.includes(word)) score--; }); if (score > 0) return 'Positive'; if (score < 0) return 'Negative'; return 'Neutral'; } }); --- .../SentimentAnalyzer.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js diff --git a/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js new file mode 100644 index 0000000000..ba38447891 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js @@ -0,0 +1,16 @@ +var SentimentAnalyzer = Class.create(); +SentimentAnalyzer.prototype = Object.extendsObject(AbstractAjaxProcessor, { + getSentiment: function() { + var text = (this.getParameter('sysparm_text') || '').toLowerCase(); + var positive = ['thanks', 'great', 'resolved', 'appreciate']; + var negative = ['issue', 'error', 'not working', 'fail', 'problem']; + + var score = 0; + positive.forEach(function(word) { if (text.includes(word)) score++; }); + negative.forEach(function(word) { if (text.includes(word)) score--; }); + + if (score > 0) return 'Positive'; + if (score < 0) return 'Negative'; + return 'Neutral'; + } +}); From 9f025f6502453b4583d65d38c6d7ee857e3a2378 Mon Sep 17 00:00:00 2001 From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com> Date: Sat, 18 Oct 2025 17:19:00 +0530 Subject: [PATCH 3/3] Create onChangeClientscript.js --- .../onChangeClientscript.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js diff --git a/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js new file mode 100644 index 0000000000..214a08b28b --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js @@ -0,0 +1,11 @@ +function onChange(control, oldValue, newValue, isLoading) { + if (isLoading || !newValue) return; + + var ga = new GlideAjax('SentimentAnalyzer'); + ga.addParam('sysparm_name', 'getSentiment'); + ga.addParam('sysparm_text', newValue); + ga.getXMLAnswer(function(sentiment) { + g_form.addInfoMessage('Sentiment: ' + sentiment); + g_form.setValue('u_sentiment', sentiment); + }); +}