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'; + } +}); 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); + }); +} 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