Skip to main content

Sentiment Analysis Using OIC AI Capabilities

Calculating read time…

🍕 Let's Start With a Pizza Shop Story

Imagine you own a pizza shop. Every day, 500 customers leave reviews on your website. Some say "This pizza was absolutely amazing! Best cheese ever!" Some say "It was okay, nothing special." And some say "Worst experience of my life. Cold pizza, rude staff, never coming back."

Now imagine you have to read all 500 reviews every single day and decide which customers need urgent attention. By the time you finish reading — it is already tomorrow. Those angry customers have already left.

Sentiment Analysis is like hiring a super-smart reader who reads all 500 reviews in 2 seconds, labels each one as POSITIVE 😊, NEUTRAL 😐, or NEGATIVE 😡, and immediately tells you which ones need urgent action.


Now think about this at enterprise scale:

Your Oracle CX Service receives 50,000 customer feedback submissions per day. Across email, chat, survey forms, and REST APIs from mobile apps. In five languages. From 30 countries.

How do you know which customer is about to churn — right now — before it is too late?

That is the exact problem we are solving in this article — using OIC Gen 3's built-in AI capabilities to automatically classify customer feedback sentiment and take immediate action inside your Oracle ecosystem.

💡 What You Will Build in This Article:

A complete OIC Gen 3 integration that:
① Receives customer feedback from any channel (REST API trigger)
② Calls OCI Language AI to detect sentiment + confidence score
③ Classifies the result: POSITIVE / NEUTRAL / NEGATIVE / MIXED
④ Routes based on sentiment — updates Oracle CX, creates service request for negatives, sends Teams alert for critical cases
⑤ Stores enriched feedback with sentiment label back to Oracle Fusion or a database

Full step-by-step configuration. Exact JSON. Every field explained.

🧠 Section 1: What Is Sentiment Analysis — Really?

Forget the technical definition for a moment. Here is the simplest way to understand it:

😊
POSITIVE
"Absolutely loved it!"
"Best service I ever had!"
"Will definitely recommend!"

Action: Log as success story. Send loyalty reward offer.
😐
NEUTRAL
"It was okay."
"Delivery was on time."
"Nothing special."

Action: Log it. Monitor if same customer goes negative next time.
😡
NEGATIVE
"Worst experience ever!"
"Completely unacceptable!"
"I want a refund immediately!"

Action: CREATE SERVICE REQUEST NOW. Alert manager. Priority response within 1 hour.
🤔
MIXED
"Food was great but delivery was terrible."
"Love the product, hate the price."

Action: Log both aspects. Route to relevant team for each issue.

The AI reads the text, looks for emotional signals (words like "amazing", "terrible", "disappointed", "fantastic"), considers the full context, and returns a sentiment label + a confidence score.

📊 Understanding the Confidence Score

The AI does not just say "NEGATIVE" — it also tells you how confident it is on a scale of 0.0 to 1.0. This confidence score is crucial for routing decisions in your OIC flow.

Score: 0.95
😡 STRONGLY NEGATIVE — Immediate action required
Score: 0.72
😠 NEGATIVE — Create service request, normal SLA
Score: 0.51
😐 BORDERLINE — Log and monitor, low confidence
Score: 0.91
😊 STRONGLY POSITIVE — Log as success, send loyalty reward

☁️ Section 2: Meet the Engine — OCI Language AI

Oracle provides a ready-made AI service called OCI Language — part of Oracle Cloud Infrastructure AI Services. You do not need to train any machine learning model. You do not need a data scientist. You call a REST API, pass your text, and Oracle's AI returns sentiment analysis results instantly.

💡 Think of OCI Language Like This:

Imagine Oracle has hired thousands of expert language analysts who have read millions of texts in every language. They understand sarcasm, context, mixed emotions, and industry-specific vocabulary. When you send them a customer review, they read it instantly and send back their expert analysis. OCI Language is those analysts — available as a REST API, 24/7, for any volume.
😊
Sentiment Detection
Positive / Negative / Neutral / Mixed with confidence scores
🏷️
Key Phrase Extraction
Extracts the most important topics: "delivery time", "customer support", "product quality"
🌍
Language Detection
Automatically detects the language of the input text — 29 languages supported
🔍
Aspect-Based Sentiment
Identifies sentiment on specific aspects: "delivery=NEGATIVE, product=POSITIVE"
👤
Named Entity Recognition
Identifies people, organisations, locations, dates mentioned in feedback
📂
Text Classification
Categorises text into custom labels you define: Billing / Delivery / Product / Support

🔌 OCI Language API — What You Call in OIC

OCI Language exposes a REST API. In your OIC flow, you call this endpoint using the REST Adapter:

POST https://language.aiservice.{region}.oci.oraclecloud.com/20221001/actions/batchDetectLanguageSentiments
Content-Type: application/json
Authorization: Bearer {OCI_Auth_Token}
Request Body:
{
  "documents": [
    {
      "key": "feedback-001",
      "text": "Your delivery was 3 days late and the product arrived broken. Absolutely terrible experience!",
      "languageCode": "en"
    }
  ]
}

🏗️ Section 3: What We Are Building — The Complete Picture

Before we touch OIC, let us see the complete flow we are building. Like an architect who draws the blueprint before picking up a hammer.

🏗️ Customer Feedback Sentiment Analysis — Complete OIC Flow

── INPUT SOURCES ──
📱 Mobile App
Feedback Form
📧 Email Survey
Response
💬 Chat Widget
Exit Feedback
🔗 CX Service
REST API
⬇️ REST POST to OIC Trigger Endpoint
🔧 OIC Gen 3 Integration — Sentiment Classifier
Step 1 — REST Trigger: Receive customer feedback JSON payload. Extract: customerId, feedbackText, channel, timestamp, productId.
⬇️
Step 2 — Data Validation & Enrichment (Assign Activity): Check feedbackText is not empty. Trim whitespace. Set default languageCode = "en". Build OCI Language request payload.
⬇️
Step 3 — OCI Language AI Call (REST Invoke): Call OCI Language batchDetectLanguageSentiments API. Pass feedbackText. Receive: sentimentLabel + confidence scores.
⬇️
Step 4 — Extract & Map Results (Assign Activity): Extract sentimentLabel, documentScore, aspects. Map to internal classification: CRITICAL / HIGH / MEDIUM / LOW priority.
⬇️
Step 5 — Switch/Route Based on Sentiment (Switch Activity): Branch 1: NEGATIVE (score ≥ 0.75) → Create SR in Oracle CX Service + Teams alert. Branch 2: NEGATIVE (score 0.5–0.74) → Create SR, standard priority. Branch 3: NEUTRAL → Update CX record. Branch 4: POSITIVE → Log + send thank-you trigger.
⬇️
Step 6 — Store Enriched Record (REST/DB Invoke): Write enriched feedback to Oracle Fusion / ATP Database: original text + sentimentLabel + score + priority + service request ID + timestamp.
⬇️
Step 7 — REST Response: Return JSON response to caller: { sentimentLabel, priorityLevel, serviceRequestId, actionTaken, processingTimeMs }
⬇️ Actions Taken
🚨 Teams Alert
(CRITICAL cases)
🎫 Oracle CX SR
(NEGATIVE cases)
💌 Thank-you Trigger
(POSITIVE cases)
💾 Enriched Record
(ALL cases)

⚙️ Section 4: Step-by-Step Build in OIC Gen 3

Now we build it. Open your OIC Gen 3 console. We go through every step exactly as an experienced OIC developer would — with the exact field values, JSON structures, and configuration decisions explained.

📌 Step 1: Create the OIC Integration

Where: OIC Gen 3 → Integrations → Create
Why: We need a REST-triggered synchronous integration that receives feedback, processes it, and returns a response to the caller in the same HTTP connection.

⚙️ Integration Creation Settings

Name: SENTIMENT_FEEDBACK_CLASSIFIER
Identifier: SENTIMENT_FEEDBACK_CLASSIFIE_01
Version: 01.00.0000
Style: App Driven Orchestration (allows complex routing, switch, assign)
Description: Receives customer feedback, calls OCI Language AI for sentiment analysis, routes and stores enriched results

📌 Step 2: Configure the REST Trigger (Inbound Connection)

Why we need this: This is the "door" to our integration. Any system — mobile app, CX portal, survey tool — will call this endpoint to submit feedback. We define exactly what JSON structure it must send us.

🔌 REST Trigger Connection — Configuration

Connection: LOCAL_REST_TRIGGER (built-in OIC REST trigger)
Endpoint Name: submitFeedback
Relative URI: /feedback/classify
HTTP Method: POST
Request Payload: JSON Sample
Response Payload: JSON Sample

📋 Request JSON Sample — paste this in the trigger wizard:

{
  "customerId": "CUST-00847",
  "feedbackText": "Your delivery was 3 days late and the product arrived broken!",
  "channel": "MOBILE_APP",
  "productId": "PROD-1023",
  "timestamp": "2024-09-15T14:32:00Z",
  "customerEmail": "john.smith@email.com",
  "orderNumber": "ORD-88291"
}

📋 Response JSON Sample — what we return to the caller:

{
  "status": "SUCCESS",
  "customerId": "CUST-00847",
  "sentimentLabel": "Negative",
  "sentimentScore": 0.91,
  "priorityLevel": "CRITICAL",
  "serviceRequestId": "SR-2024-04472",
  "actionTaken": "SERVICE_REQUEST_CREATED_MANAGER_ALERTED",
  "processingTimeMs": 847
}

📌 Step 3: Add the OCI Language Connection

Why: Before we can call OCI Language from OIC, we need to create a connection that holds the authentication details. OIC connects to OCI Language using OCI Signature V1 authentication — the same authentication mechanism used across all OCI services.

🔌 Creating the OCI Language REST Connection in OIC

Navigation: OIC Console → Connections → Create → Search "REST" → Select REST Adapter
Connection Name: OCI_LANGUAGE_AI_CONN
Base URL: https://language.aiservice.ap-mumbai-1.oci.oraclecloud.com
Security Policy: OCI Signature Version 1 (select from dropdown)
Tenancy OCID: ocid1.tenancy.oc1..aaaa...{your_tenancy_ocid}
User OCID: ocid1.user.oc1..aaaa...{service_user_ocid}
Private Key: Upload the RSA private key (.pem file) for the OCI service user. Generate this in OCI IAM → User → API Keys.
Fingerprint: aa:bb:cc:dd:ee:ff:00:11:... (from OCI IAM API Key details)
✅ Click Test → you should see "Connection tested successfully". Then click Save. If it fails, check that your OCI user has the IAM policy: Allow group OICServiceGroup to use ai-language-family in tenancy

📌 Step 4: Add the OCI Language Invoke Activity

Why: This is the actual AI call — where OIC sends the customer's feedback text to OCI Language and receives the sentiment analysis result. Think of this as OIC picking up the phone and calling the AI analyst.

🔧 REST Invoke — OCI Language Call Configuration

In OIC Canvas: Drag REST Invoke → select connection OCI_LANGUAGE_AI_CONN → configure:
Endpoint Name: detectSentiment
Relative URI: /20221001/actions/batchDetectLanguageSentiments
HTTP Method: POST
Request Payload: JSON Sample
Response Payload: JSON Sample

📋 Request JSON Sample for OCI Language API:

{
  "documents": [
    {
      "key": "doc1",
      "text": "sample feedback text here",
      "languageCode": "en"
    }
  ]
}

📋 Response JSON Sample from OCI Language API:

{
  "documents": [
    {
      "key": "doc1",
      "documentSentiment": "Negative",
      "documentScores": {
        "Positive": 0.02,
        "Neutral": 0.07,
        "Negative": 0.91
      },
      "aspects": [
        { "text": "delivery", "sentiment": "Negative", "scores": { "Negative": 0.94 } },
        { "text": "product", "sentiment": "Negative", "scores": { "Negative": 0.88 } }
      ]
    }
  ]
}
💡 What these scores mean in plain English:
The AI is 91% confident this is Negative. The two main problems it identified are "delivery" and "product". Both aspects score above 0.85 — which means the AI is very sure about both. In our routing logic, a negative score ≥ 0.75 = CRITICAL priority → immediate escalation.

📌 Step 5: Add Assign Activity — Build the OCI Language Request

Why: The OCI Language API expects its input in a specific JSON format. We need to map our incoming trigger data (customer's feedbackText) into that format. The Assign Activity is where we build the request payload before calling OCI Language. Think of it as filling out a form before sending it to the AI.

⚙️ Assign Activity — "buildOCILanguageRequest" — Variable Mappings

Add an Assign Activity BEFORE the OCI Language invoke. This activity sets up the variables that will be mapped into the REST call body. In OIC Gen 3, use the Assign activity to populate a local variable with the constructed JSON structure.

Variable: ociLanguageDocKey
concat("feedback-", $triggerRequest.customerId, "-", $triggerRequest.timestamp)
Result example: "feedback-CUST-00847-2024-09-15T14:32:00Z"
Variable: ociLanguageText
normalize-space($triggerRequest.feedbackText)
normalize-space trims extra spaces and newlines from the feedback text
Variable: ociLanguageCode
if(string-length($triggerRequest.languageCode) > 0, $triggerRequest.languageCode, "en")
Default to "en" if languageCode not provided in the request

📌 Step 6: Map the Request to OCI Language (Data Mapper)

Why: OIC's Data Mapper is where we visually connect our variables to the OCI Language API's expected JSON structure. Drag and drop the fields on the left (our data) to the fields on the right (OCI Language expects).

🗺️ Data Mapper — Source → Target Mappings

REQUEST MAPPER: OIC Variables → OCI Language Request Body
$ociLanguageDocKey
→
documents[1]/key The unique identifier for this document
$ociLanguageText
→
documents[1]/text The actual customer feedback text to analyse
$ociLanguageCode
→
documents[1]/languageCode "en" for English — change for multilingual support
RESPONSE MAPPER: OCI Language Response → OIC Variables
documents[1]/documentSentiment
→
$sentimentLabel "Positive", "Negative", "Neutral", or "Mixed"
documents[1]/documentScores/Negative
→
$negativeScore e.g. 0.91 — used for priority routing
documents[1]/documentScores/Positive
→
$positiveScore e.g. 0.02

📌 Step 7: Add the Priority Classification (Assign Activity)

Why: Not all negative feedback needs the same response. A score of 0.51 might be a minor complaint. A score of 0.95 is a customer who is furious and about to post on social media. This Assign Activity converts the AI's raw score into a business priority level that our routing logic can use.

⚙️ Assign Activity — "classifyPriority"

Set variable $priorityLevel using a nested XPath if-else expression:

Variable: priorityLevel
XPath Expression:

if ($sentimentLabel = 'Negative' and $negativeScore >= 0.85)
then 'CRITICAL'
else if ($sentimentLabel = 'Negative' and $negativeScore >= 0.60)
then 'HIGH'
else if ($sentimentLabel = 'Negative' and $negativeScore >= 0.40)
then 'MEDIUM'
else if ($sentimentLabel = 'Neutral')
then 'MONITOR'
else if ($sentimentLabel = 'Positive')
then 'POSITIVE'
else 'LOW'

📌 Step 8: Add the Switch Activity — Route by Priority

Why: This is the brain of the routing logic. Based on the priorityLevel we just set, the integration takes different actions. Think of it as a traffic cop directing each feedback to the right lane.

🔀 Switch Activity — 4 Routing Branches

🔀 SWITCH: $priorityLevel
🔴 Branch 1: CRITICAL
Condition: $priorityLevel = 'CRITICAL'

① Create Oracle CX Service Request (P1 priority)
② Send Teams notification: "⚠️ CRITICAL negative feedback received"
③ Update customer record: churn_risk = HIGH
🟠 Branch 2: HIGH
Condition: $priorityLevel = 'HIGH'

① Create Oracle CX Service Request (P2 priority)
② Log to feedback database with sentiment enrichment
③ Set follow-up flag: contact within 24 hours
🟡 Branch 3: NEUTRAL
Condition: $priorityLevel = 'MONITOR'

① Log enriched record to feedback database
② Update customer satisfaction score in CX
③ No SR created, no alert
🟢 Branch 4: POSITIVE
Condition: $priorityLevel = 'POSITIVE'

① Log enriched record with positive flag
② Trigger loyalty campaign API: send discount offer
③ Add to testimonial candidate pool

📌 Step 9: Configure Oracle CX Service Request Creation (CRITICAL & HIGH Branch)

This is the most important output action. When the AI detects a CRITICAL or HIGH negative sentiment, we immediately create a service request in Oracle CX Service so the customer support team can act — without any manual triage.

🎫 Oracle CX Service REST Invoke — Create Service Request

Connection: ORACLE_CX_SERVICE_CONN
Endpoint: createServiceRequest
Relative URI: /crmRestApi/resources/latest/serviceRequests
Method: POST

📋 CX Service Request Payload (mapped from OIC variables):

{
  "Title": "[AI-DETECTED NEGATIVE] Customer Feedback - concat($priorityLevel, ' Priority')",
  "SeverityCd": if($priorityLevel='CRITICAL', '1-CRITICAL', '2-HIGH'),
  "StatusCd": "1-Open",
  "ProblemDescription": concat("AI Sentiment Score: ", $negativeScore, ". Customer Feedback: ", $triggerRequest.feedbackText),
  "CustomerPartyNumber": $triggerRequest.customerId,
  "ProductId": $triggerRequest.productId,
  "Channel": $triggerRequest.channel,
  "CustomFields": {
    "SentimentLabel_c": $sentimentLabel,
    "SentimentScore_c": $negativeScore,
    "AIClassified_c": "Y",
    "OrderNumber_c": $triggerRequest.orderNumber
  }
}
💡 After the CX invoke, extract the Service Request ID from the response: Map response/Id → variable $serviceRequestId. We use this in the final response back to the caller.

📌 Step 10: Build and Send the Final Response

Why: Every REST integration must send a response back. After all the branches have completed, we map our results into the response structure we defined in Step 2 and send it back to the original caller with a complete summary of what the AI found and what action was taken.

📤 Response Mapper — Final Response to Caller

"SUCCESS"
→
response/status
$triggerRequest/customerId
→
response/customerId
$sentimentLabel
→
response/sentimentLabel
$negativeScore
→
response/sentimentScore
$priorityLevel
→
response/priorityLevel
$serviceRequestId
→
response/serviceRequestId
$actionTaken
→
response/actionTaken

🎯 Section 5: Real Feedback Examples — Watch the Integration Think

Let us run five real customer feedback examples through our integration and see exactly what the AI returns and what OIC does with it.

😡
Example 1 — CRITICAL NEGATIVE
"I placed an order 10 days ago. It never arrived. When I called customer service, they hung up on me TWICE. I want a full refund immediately. This is absolutely disgraceful and I am posting about this on Twitter right now."
Sentiment: Negative
Score: 0.97
Aspects: delivery=Neg(0.96), customer_service=Neg(0.98)
Action: P1 SR created + Manager alerted via Teams + Churn risk = HIGH
😠
Example 2 — HIGH NEGATIVE
HIGH
"The product quality has really gone downhill. My last three orders had defects. Seriously disappointed with what used to be a great company."
Sentiment: Negative
Score: 0.79
Aspects: product_quality=Neg(0.82)
Priority: HIGH
Action: P2 SR created, contact within 24h
😐
Example 3 — NEUTRAL
MONITOR
"Order arrived on the expected date. Product matches the description. Nothing to complain about, nothing exceptional either."
Sentiment: Neutral
Score: 0.84
Priority: MONITOR
Action: Log enriched record, update satisfaction score in CX
🤔
Example 4 — MIXED SENTIMENT
MIXED
"The product itself is fantastic — absolutely love the quality and design. But the delivery took forever and the packaging was damaged when it arrived. Would order again for the product, but delivery needs major improvement."
Sentiment: Mixed
Aspects: product=Positive(0.95), delivery=Negative(0.87)
Priority: HIGH (delivery aspect negative > 0.85)
Action: SR created for delivery team. Product team gets positive flag.
😊
Example 5 — STRONGLY POSITIVE
✅ POSITIVE
"Wow — I cannot believe how amazing the experience was! Same-day delivery, product even better than the photos, and when I had a question the support team responded in 5 minutes. This is how online shopping should be. 10/10!"
Sentiment: Positive
Score: 0.98
Aspects: delivery=Pos(0.97), product=Pos(0.98), support=Pos(0.96)
Action: Loyalty reward triggered, testimonial candidate pool

🛡️ Section 6: Error Handling — What Happens When Things Go Wrong

An experienced OIC developer always asks: "What if OCI Language is temporarily unavailable? What if the feedback text is empty? What if the AI returns an unexpected score?" Here is how we handle each scenario in production.

⚠️
Scenario 1 — Empty or Too-Short Feedback Text

Check: In the Assign Activity before the OCI Language call, add a validation: if(string-length(normalize-space($triggerRequest.feedbackText)) < 10)
Action: Use a separate path that skips the AI call entirely, sets sentimentLabel = "INSUFFICIENT_DATA", returns an appropriate response. OCI Language returns poor results on very short texts — better to skip.

🔌
Scenario 2 — OCI Language API Timeout or Error

In OIC Gen 3: Wrap the OCI Language REST Invoke inside a Scope activity with a Fault Handler. In the fault handler: set sentimentLabel = "AI_UNAVAILABLE", set priorityLevel = "MANUAL_REVIEW", create a service request with flag "Requires Manual Sentiment Review", log the error to OIC tracking. The integration continues and the feedback is not lost — it goes to a manual review queue.

🌍
Scenario 3 — Non-English Text Without languageCode

Solution: Add a pre-call to OCI Language's batchDetectDominantLanguage endpoint first. It detects the language automatically. Then pass the detected languageCode into the sentiment call. OCI Language supports 29 languages natively — this makes your integration truly global-ready.

📊
Scenario 4 — Low Confidence Score (AI Is Unsure)

If all three scores (Positive, Neutral, Negative) are below 0.60 — the AI is not confident. Add this check in the Priority Classification assign: if(max($positiveScore, $neutralScore, $negativeScore) < 0.60, 'MANUAL_REVIEW', ...) Route to manual review. A human should classify ambiguous feedback — not the AI.


📊 Section 7: Tracking, Monitoring & Business Insights

After your integration goes live, you want to see business-level insights — not just OIC technical metrics. Here is how to use OIC's Business Identifiers feature to track sentiment trends over time.

💡 OIC Business Identifiers — Track These Fields:

In your integration, set Business Identifiers (Integration → Tracking) to these fields so you can filter and report on them in OIC Monitoring:
  • customerId — find all feedback from one customer
  • sentimentLabel — filter: show me all NEGATIVE instances today
  • priorityLevel — filter: show all CRITICAL cases this week
  • channel — which channel produces most negative feedback?
  • productId — which products get most negative sentiment?
📊 What You Can Now Measure Business Question It Answers Source in OIC
Daily Negative Rate Is customer satisfaction trending down? OIC Monitoring → filter sentimentLabel=Negative
CRITICAL Feedback Count How many customers are at immediate churn risk today? OIC Monitoring → filter priorityLevel=CRITICAL
Sentiment by Channel Which channel — mobile / email / chat — has worst sentiment? OIC Monitoring + Business Identifier: channel
Sentiment by Product Which product has the most negative feedback this month? OIC Monitoring + Business Identifier: productId
AI Confidence Distribution What % of feedback requires manual review (low AI confidence)? Custom ATP table + OIC writes sentimentScore per record

🚫 Common Mistakes to Avoid

🔴
Sending the full raw Fusion payload as feedbackText

OCI Language works on the text field. If you accidentally send a JSON payload with metadata fields, the AI will also analyse field names and dates, producing garbage sentiment results. Always extract just the human-written feedback text before calling OCI Language.

🔴
Using only the documentSentiment label without the score

Routing only on the label ("Negative" → create SR) means a 0.51 confidence "Negative" gets the same treatment as a 0.97 confidence "Negative". Always use both the label AND the score together in your routing logic. The score is where the real intelligence is.

🔴
No fault handler on the OCI Language call

If OCI Language is unavailable and you have no fault handler, the entire OIC integration fails and the customer's feedback is lost permanently. Always wrap the OCI Language invoke in a Scope with a Fault Handler that routes unclassified feedback to a manual review queue.

🔴
Hardcoding the OCI region in the Base URL

If you hardcode ap-mumbai-1 in your OCI Language connection and then deploy to a different region, your integration breaks. Use an OIC lookup table or property for the region so it can be changed without touching the integration design.


✅ Best Practices

✅ Batch Multiple Feedbacks in One OCI Language Call

OCI Language batchDetectLanguageSentiments accepts up to 100 documents in a single API call. If you have a bulk upload scenario (nightly CSV of 500 feedback records), group them in batches of 100 and call OCI Language once per batch. This is 5 API calls instead of 500 — 99% fewer calls, dramatically lower cost, and faster processing.

✅ Use Aspect-Based Sentiment for Actionable Routing

The overall documentSentiment tells you the general feeling. The aspects tell you exactly what to fix. A feedback with delivery=Negative and product=Positive should create a SR for the logistics team — not the product team. Map aspects to the right team in your routing logic for surgical precision in your response.

✅ Store the Full AI Response for Future Model Improvement

Save the complete OCI Language response JSON (all scores, all aspects, all phrase extractions) in your ATP database alongside the original feedback text. This data becomes your training set when you want to fine-tune a custom model later using OCI Data Science. Every feedback processed today is future model improvement data.

✅ Set OCI Language API Key in OCI Vault — Never in OIC Connection

Store the RSA private key for your OCI service user in OCI Vault. Reference it from the OIC connection using the Vault Secret OCID — not by uploading the key file directly. This way, if the key needs to be rotated, you update it in Vault once. The OIC connection automatically picks up the new key without any redeployment.


🎉 Final Summary — What You Built

🔌 REST Trigger: Any channel — mobile, email, chat, CX portal — can submit feedback via a single standardised endpoint. No custom integration per channel.
🧠 OCI Language AI: Called via OCI Signature V1 authenticated REST connection. Returns sentiment label + confidence scores + aspect-level analysis in under 1 second.
⚙️ Priority Classification: XPath-based Assign Activity converts raw AI scores into business-meaningful priority levels: CRITICAL / HIGH / MEDIUM / MONITOR / POSITIVE — no AI knowledge required to understand the output.
🔀 Switch Routing: Automatic routing to the right action — P1 SR + manager alert for CRITICAL, P2 SR for HIGH, record-update for NEUTRAL, loyalty trigger for POSITIVE. No manual triage. No delayed response.
🛡️ Error Handling: Fault handlers ensure no feedback is ever lost. OCI Language unavailability routes to manual review. Low confidence routes to human judgment. Short text is validated before AI call.
📊 Business Intelligence: OIC Business Identifiers enable monitoring by sentiment, priority, channel, and product. Every feedback is enriched and stored for trend analysis and future model improvement.
🌱 The Business Impact of What You Built:

Before: A customer submits angry feedback. It sits in a shared inbox. Three days later someone reads it and creates a ticket. By then the customer has left and told 50 friends.

After: The customer submits feedback at 2:17 PM. By 2:17:01 PM the AI has classified it as CRITICAL. By 2:17:03 PM a P1 service request exists in Oracle CX. By 2:17:04 PM the service manager gets a Teams alert. By 2:30 PM the customer gets a call from a human who already knows the full context.

That is the difference between a company that reacts and a company that responds. OIC + OCI Language AI makes that possible today — with the integration skills you already have.


Build Smart. Integrate Intelligently.

Comments