HR Leave · Australia

AI & Machine Learning Complete Guide — دليل الذكاء الاصطناعي الشامل

ServiceNow Australia · Custom app · Arabic + English readable · scripts copy/paste ready

App typeCustom
Scopex_786686_hr_leave
sys_idc84db0e8839f0b509f02b0d6feaad3c9
Replace{BASE} = your instance
Instance URLs Application Leave requests Business Rules Studio

AI & Machine Learning Complete Guide — دليل الذكاء الاصطناعي الشامل

Platform: ServiceNow Australia (Sep 2026)
دليل شامل لـ Virtual Agent و Predictive Intelligence و NLU و Now Assist


Table of Contents

  1. AI Overview in ServiceNow
  2. Virtual Agent
  3. Predictive Intelligence
  4. Natural Language Understanding
  5. Now Assist (GenAI)
  6. Document Intelligence
  7. AI Search
  8. HR Leave AI Integration
  9. Best Practices
  10. Labs

1. AI Overview in ServiceNow

Direct URLs

Component URL
Virtual Agent {BASE}/now/va-admin
Predictive Intelligence {BASE}/ml_solutions.do
NLU Models {BASE}/sys_nlu_model_list.do
AI Search {BASE}/ais_search_config_list.do

AI Capabilities Matrix

Capability Use Case
Virtual Agent Conversational self-service
Predictive Intelligence Classification, similarity, clustering
NLU Intent detection, entity extraction
Now Assist GenAI summarization, generation
Document Intelligence Document processing, extraction
AI Search Enhanced search relevance

2. Virtual Agent

Direct URL: {BASE}/now/va-admin

Create Topic

**HR Leave Request Topic:**

1. Navigate: Virtual Agent > Designer
2. Create Topic:
   - Name: Request Leave
   - Description: Submit a leave request
   - Category: HR
3. Configure NLU:
   - Add utterances:
     - "I want to request leave"
     - "I need time off"
     - "Submit vacation request"
     - "Book annual leave"
     - "أريد طلب إجازة"
     - "طلب إجازة سنوية"

Topic Flow

Nodes:

1. Start
   - Trigger: NLU intent match

2. Greet
   - Bot: "I can help you request leave. Let me gather some details."

3. Get Leave Type
   - Bot: "What type of leave?"
   - Input: Choice
   - Options:
     - Annual Leave
     - Sick Leave
     - Emergency Leave
   - Store: leave_type

4. Get Start Date
   - Bot: "When does your leave start?"
   - Input: Date
   - Validation: Must be today or future
   - Store: start_date

5. Get End Date
   - Bot: "When does it end?"
   - Input: Date
   - Validation: Must be after start date
   - Store: end_date

6. Calculate Duration
   - Script:
     var start = new GlideDateTime(vaVars.start_date);
     var end = new GlideDateTime(vaVars.end_date);
     var dur = GlideDateTime.subtract(start, end).getDayPart() + 1;
     vaVars.duration = dur;
   - Bot: "That's {duration} days."

7. Check Balance
   - Script:
     var util = new x_786686_hr_leave.LeaveBalanceUtil();
     vaVars.balance = util.getBalance(vaSystem.getUser(), vaVars.leave_type);
   - Condition: balance < duration
     - Bot: "Sorry, you only have {balance} days available."
     - End
   - Continue

8. Get Reason (Optional)
   - Bot: "Any reason you'd like to add? (or say 'skip')"
   - Input: Text
   - Store: reason

9. Confirm
   - Bot: "Please confirm:
     Type: {leave_type}
     Dates: {start_date} to {end_date}
     Duration: {duration} days"
   - Input: Choice
   - Options: [Confirm, Cancel]

10. Submit
    - Script:
      var gr = new GlideRecord('x_786686_hr_leave_request');
      gr.initialize();
      gr.employee = vaSystem.getUser();
      gr.leave_type = vaVars.leave_type;
      gr.start_date = vaVars.start_date;
      gr.end_date = vaVars.end_date;
      gr.reason = vaVars.reason || '';
      vaVars.request_number = gr.insert() ? gr.number : '';

11. Success
    - Bot: "Done! Your request {request_number} has been submitted. Your manager will be notified."
    - End

Custom Server Script

// Virtual Agent Server Script
(function execute(inputs, outputs) {

    var userId = inputs.user_id;
    var leaveType = inputs.leave_type;
    var startDate = inputs.start_date;
    var endDate = inputs.end_date;
    var reason = inputs.reason;

    // Validate balance
    var util = new x_786686_hr_leave.LeaveBalanceUtil();
    var balance = util.getBalance(userId, leaveType);

    var start = new GlideDateTime(startDate);
    var end = new GlideDateTime(endDate);
    var duration = GlideDateTime.subtract(start, end).getDayPart() + 1;

    if (duration > balance) {
        outputs.success = false;
        outputs.message = 'Insufficient balance. Available: ' + balance + ' days';
        return;
    }

    // Create request
    var gr = new GlideRecord('x_786686_hr_leave_request');
    gr.initialize();
    gr.employee = userId;
    gr.leave_type = leaveType;
    gr.start_date = startDate;
    gr.end_date = endDate;
    gr.reason = reason;
    gr.duration_days = duration;

    var sysId = gr.insert();

    if (sysId) {
        gr.get(sysId);
        outputs.success = true;
        outputs.request_number = gr.number.toString();
        outputs.message = 'Request ' + gr.number + ' submitted successfully';
    } else {
        outputs.success = false;
        outputs.message = 'Failed to create request';
    }

})(inputs, outputs);

3. Predictive Intelligence

Direct URL: {BASE}/ml_solutions.do

Classification Model

**HR Leave Auto-Classification:**

1. Navigate: Predictive Intelligence > Solutions
2. Create Solution:
   - Name: Leave Request Classification
   - Type: Classification
   - Table: x_786686_hr_leave_request

3. Configure Training:
   - Input fields: short_description, reason
   - Target field: leave_type
   - Training data: Historical requests (1000+ records)

4. Train Model:
   - Click Train
   - Wait for completion
   - Review accuracy metrics

5. Deploy:
   - Enable auto-classification
   - Set confidence threshold: 0.8

Similarity Model

**Similar Leave Requests:**

1. Create Solution:
   - Type: Similarity
   - Table: x_786686_hr_leave_request

2. Configure:
   - Fields: employee department, leave_type, duration_days
   - Use case: Find similar past requests for approval reference

3. Deploy and use in workspace

Prediction API

// Use prediction in Business Rule
var predictor = new sn_ml.ClassificationPredictor('leave_classification');
var prediction = predictor.predict({
    short_description: current.short_description,
    reason: current.reason
});

if (prediction.confidence > 0.8) {
    current.leave_type = prediction.predicted_value;
    gs.info('Auto-classified as: ' + prediction.predicted_value);
}

4. Natural Language Understanding

Direct URL: {BASE}/sys_nlu_model_list.do

Create NLU Model

**HR Leave NLU Model:**

1. Navigate: NLU > Models
2. Create Model:
   - Name: HR Leave NLU
   - Language: English, Arabic

3. Create Intents:
   - request_leave
   - check_balance
   - cancel_request
   - view_requests
   - approve_request

4. Add Utterances per Intent
5. Create Entities
6. Train and Publish

Intent Configuration

Intent: request_leave
Utterances:
  - I want to request leave
  - I need to take time off
  - Submit a vacation request
  - I want to apply for annual leave
  - Can I book some days off
  - أريد طلب إجازة
  - طلب إجازة سنوية
  - احتاج اجازة

Entities:
  - leave_type: [annual, sick, emergency, unpaid]
  - duration: [number] days
  - date: [date expression]

---

Intent: check_balance
Utterances:
  - What's my leave balance
  - How many vacation days do I have
  - Show me my remaining leave
  - كم رصيد إجازاتي
  - عرض رصيد الإجازات

---

Intent: cancel_request
Utterances:
  - Cancel my leave request
  - I want to withdraw my leave
  - Delete my vacation request
  - إلغاء طلب الإجازة

Entity Extraction

// Extract entities from text
var nlu = new sn_nlu.NLUService();
var result = nlu.processText('HR Leave NLU', userInput);

if (result.intent === 'request_leave') {
    var entities = result.entities;

    var leaveType = entities.leave_type || 'annual';
    var duration = entities.duration;
    var startDate = entities.date;

    gs.info('Intent: ' + result.intent);
    gs.info('Leave Type: ' + leaveType);
    gs.info('Duration: ' + duration);
}

5. Now Assist (GenAI)

Summarization

// Summarize leave request for manager
var nowAssist = new sn_genai.GenerativeAIAPI();

var prompt = 'Summarize this leave request for quick manager review:\n' +
    'Employee: ' + current.employee.getDisplayValue() + '\n' +
    'Type: ' + current.leave_type.getDisplayValue() + '\n' +
    'Dates: ' + current.start_date + ' to ' + current.end_date + '\n' +
    'Duration: ' + current.duration_days + ' days\n' +
    'Reason: ' + current.reason;

var summary = nowAssist.generateText(prompt);
current.work_notes = 'AI Summary: ' + summary;

Response Generation

// Generate rejection response
var nowAssist = new sn_genai.GenerativeAIAPI();

var prompt = 'Generate a professional and empathetic rejection message for a leave request. ' +
    'Include: appreciation for the request, clear reason for rejection, and next steps. ' +
    'Rejection reason: ' + rejectionReason;

var response = nowAssist.generateText(prompt);

Code Assistance

// Generate script suggestion
var prompt = 'Generate a ServiceNow Business Rule script that: ' +
    '1. Triggers before insert on x_786686_hr_leave_request ' +
    '2. Validates that end_date is after start_date ' +
    '3. Calculates duration_days ' +
    '4. Sets the short_description';

var code = nowAssist.generateText(prompt);

6. Document Intelligence

Document Processing

**Use Case: Medical Certificate Processing**

1. Upload medical certificate
2. Document Intelligence extracts:
   - Doctor name
   - Date of issue
   - Recommended leave duration
   - Diagnosis (if permitted)
3. Auto-populate leave request fields

Configuration

// Document extraction for leave attachments
var docIntel = new sn_doc_intel.DocumentIntelligenceAPI();

var attachment = current.getAttachments();
if (attachment.hasNext()) {
    var result = docIntel.extractDocument(attachment.next().sys_id);

    if (result.document_type === 'medical_certificate') {
        current.u_doctor_name = result.fields.doctor_name;
        current.u_certificate_date = result.fields.issue_date;
        current.u_recommended_days = result.fields.duration;
    }
}

Direct URL: {BASE}/ais_search_config_list.do

**HR Knowledge Search:**

1. Navigate: AI Search > Search Applications
2. Create Application:
   - Name: HR Leave Knowledge
   - Sources:
     - Knowledge Base: HR Policies
     - Table: x_786686_hr_leave_request (historical)

3. Configure:
   - Enable semantic search
   - Enable query understanding
   - Configure relevancy tuning

Search Integration

// Search for relevant policies
var aiSearch = new sn_ais.AISearchAPI();

var results = aiSearch.search({
    query: 'annual leave policy maximum days',
    application: 'hr_leave_knowledge',
    limit: 5
});

for (var i = 0; i < results.length; i++) {
    gs.info('Result: ' + results[i].title + ' (Score: ' + results[i].score + ')');
}

8. HR Leave AI Integration

Complete AI-Powered Flow

// Script Include: LeaveAIAssistant
var LeaveAIAssistant = Class.create();
LeaveAIAssistant.prototype = {

    initialize: function() {
        this.nlu = new sn_nlu.NLUService();
        this.predictor = new sn_ml.ClassificationPredictor('leave_classification');
    },

    processUserInput: function(input) {
        // NLU processing
        var nluResult = this.nlu.processText('HR Leave NLU', input);

        return {
            intent: nluResult.intent,
            confidence: nluResult.confidence,
            entities: nluResult.entities
        };
    },

    classifyRequest: function(description, reason) {
        var prediction = this.predictor.predict({
            short_description: description,
            reason: reason
        });

        return {
            leave_type: prediction.predicted_value,
            confidence: prediction.confidence
        };
    },

    getSmartSuggestions: function(employeeId) {
        // Based on patterns and ML
        var suggestions = [];

        // Check upcoming holidays
        var holidays = this._getUpcomingHolidays();
        if (holidays.length > 0) {
            suggestions.push({
                type: 'bridge_day',
                message: 'Consider taking ' + holidays[0].bridge_date + ' to extend your weekend'
            });
        }

        // Check balance expiry
        var balance = new x_786686_hr_leave.LeaveBalanceUtil().getBalance(employeeId, 'annual');
        if (balance > 10) {
            suggestions.push({
                type: 'use_balance',
                message: 'You have ' + balance + ' days that may expire. Consider planning time off.'
            });
        }

        return suggestions;
    },

    _getUpcomingHolidays: function() {
        // Implementation
        return [];
    },

    type: 'LeaveAIAssistant'
};

Virtual Agent with AI

// VA Server Script with full AI integration
(function execute(inputs, outputs) {

    var assistant = new x_786686_hr_leave.LeaveAIAssistant();
    var userId = inputs.user_id;

    // Process natural language input
    var nluResult = assistant.processUserInput(inputs.user_message);

    outputs.intent = nluResult.intent;

    switch (nluResult.intent) {
        case 'request_leave':
            // Extract entities and create request
            var entities = nluResult.entities;
            outputs.response = 'I understand you want to request ' + 
                (entities.leave_type || 'leave') + '. ';
            outputs.next_action = 'collect_details';
            break;

        case 'check_balance':
            var util = new x_786686_hr_leave.LeaveBalanceUtil();
            var balances = util.getAllBalances(userId);
            outputs.response = 'Your leave balances:\n' +
                'Annual: ' + balances.annual + ' days\n' +
                'Sick: ' + balances.sick + ' days\n' +
                'Emergency: ' + balances.emergency + ' days';
            outputs.next_action = 'end';
            break;

        case 'view_requests':
            outputs.response = 'Here are your recent leave requests:';
            outputs.next_action = 'show_list';
            break;

        default:
            outputs.response = 'I\'m not sure what you need. Would you like to:\n' +
                '1. Request leave\n' +
                '2. Check your balance\n' +
                '3. View your requests';
            outputs.next_action = 'clarify';
    }

    // Add smart suggestions
    var suggestions = assistant.getSmartSuggestions(userId);
    if (suggestions.length > 0) {
        outputs.suggestions = suggestions;
    }

})(inputs, outputs);

9. Best Practices

AI Model Training

1. **Data Quality**
   - Clean training data
   - Balanced classes
   - Sufficient volume (1000+ per class)

2. **Continuous Improvement**
   - Monitor accuracy
   - Retrain periodically
   - Incorporate feedback

3. **Confidence Thresholds**
   - Set appropriate thresholds
   - Handle low-confidence cases
   - Provide fallback options

Virtual Agent Design

1. **Conversation Design**
   - Keep flows simple
   - Provide escape options
   - Handle errors gracefully

2. **Multilingual Support**
   - Train for each language
   - Consider cultural differences
   - Test with native speakers

10. Labs

Lab 1: Create VA Topic

**Duration:** 1 hour

1. Open VA Designer
2. Create "Request Leave" topic
3. Add NLU training
4. Build conversation flow
5. Add server scripts
6. Test in preview
7. Publish

Lab 2: Predictive Model

**Duration:** 1.5 hours

1. Create classification solution
2. Configure training data
3. Train model
4. Review metrics
5. Deploy to production
6. Test auto-classification

Direct URLs Reference

Page URL
Virtual Agent Admin {BASE}/now/va-admin
VA Designer {BASE}/now/va-designer
Predictive Intelligence {BASE}/ml_solutions.do
NLU Models {BASE}/sys_nlu_model_list.do
NLU Workbench {BASE}/now/nlu-workbench
AI Search {BASE}/ais_search_config_list.do

Next: Development Guide | Administration Guide