
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
How to Verify and Troubleshoot Group Action Framework (GAF) Activation in ServiceNow
The Group Action Framework (GAF) enables intelligent clustering of task records to improve AI-driven recommendations in Now Assist. This blog helps you verify whether GAF is properly activated and functioning in your instance.
GAF Activation Verification Runbook
Step 1: Check for Skill Config Records
- Navigate to: sn_nowassist_skill_config.list
- Filter by: Name contains grouping
- If records like GAF ITSM grouping, GAF HR grouping, etc. are present → GAF config is seeded.
⚠️ Presence of these records alone does not confirm activation.
Step 2: Confirm Activation Script Was Run
- Go to: System Definition > Scripts - Background
- Run the activation script from https://www.servicenow.com/docs/bundle/yokohama-intelligent-experiences/page/administer/now-assist-a...
var groupSkillId = "";
var actionSkillId = "";
var topicSkillId = "43bce9e477e012103f075cea5b5a998f";
new sn_gaf.GAFUtils().activate(groupSkillId, topicSkillId, actionSkillId, "run_once");
- Successful execution should log:
- sn_gaf_sysauto_script insert
- sys_trigger insert
- Log messages like: GAFutils activated skill config IDs for Group skill with ID …
Step 3: Verify Scheduled Jobs
- Navigate to: sysauto_script.list
- Filter by: Name contains GAF
- Ensure both jobs are present and active:
- GAF - Run Offline Flow
- GAF - Preemptive Online Flow
Note: The Preemptive Online Flow is not always provisioned by default. Its presence depends on:
- Whether online clustering is enabled for the use case.
- Whether the activation script or Store app version includes it.
- Whether the instance is scoped for real-time prediction (e.g., Dynamic clustering during record creation or update).
If the instance is only using GAF for offline clustering (e.g., for dashboards, analytics, or workshops), then the offline flow is sufficient.
Remediation: Just repair the plugins (AI Agent Studio) and re-run the activation script.
Step 4: Run the Offline Flow (if needed)
- Manually execute GAF - Run Offline Flow to trigger clustering.
Step 5: Check for Clustering Output
- Go to: sn_gaf_record_group.list
- Look for:
- Recent entries (e.g., today’s date)
- Descriptions like “Email server down”, “SAP login issue”
- Group Skill ID: GAF ITSM grouping
- Group size and quality populated
the sn_gaf_record_group table is empty in the instance, it means that no clustering has been executed yet.
Remediation: Manually run the offline flow:
- Go to sysauto_script.list
- Search for GAF - Run Offline Flow
- Open the record and click Execute Now
- Wait a few minutes, then check:
- sn_gaf_record_group → for group clusters
- sn_gaf_record_group_detail → for record-to-group mappings
If still empty, verify: The skill config is correctly linked to a valid task table (e.g., incident, case). There are eligible records in that table (e.g., incidents with meaningful short descriptions). The topicSkillId used in the activation script is valid and populated.
Step 6: Confirm Record Assignment
- Go to: sn_gaf_record_group_detail.list
- Confirm that incident records are listed with:
- Group skill ID: GAF ITSM grouping
- Active: true
Step 7: Verify Group Membership for a Record
Use this script in Scripts - Background to confirm a record is part of a group:
var gr = new GlideRecord('sn_gaf_record_group_detail');
gr.addQuery('document_id', '<incident_sys_id>');
gr.query();
while (gr.next()) {
gs.info("Record is part of group: " + gr.getValue('record_group'));
}
If it returns group IDs → the record is clustered.
- The
document_id
field links the clustered record (e.g., an incident) to its group. - Each line like:
*** Script: Record is part of group: 48f40abc0fb2aa10ba24c9d530d1b2e0 *** Script: Record is part of group: 22f81def3b4f6a50c74142c643e45ab2 *** Script: Record is part of group: 7d68e5f03bb22e10c74142c643e45a47 *** Script: Record is part of group: b3f642dc3ba66610c74142c643e45aa5 *** Script: Record is part of group: ece642d80faee210ba24c9d530d1b29b *** Script: Record is part of group: 5d7b0b7d3b6a2610c74142c643e45a00
-
Indicates that the incident record (whose
sys_id
was used in the script) is part of a GAF cluster group. The value is thesys_id
of the group in thesn_gaf_record_group
table.
It’s possible for a single record to appear in multiple groups if:
- The clustering logic was run more than once (e.g., manually triggered multiple times).
- The record matched multiple clustering criteria (e.g., overlapping topics or similarity thresholds).
- There are multiple skill configs or flows active (e.g., ITSM + HR grouping).
You can inspect each group by navigating to:
https://<InstanceName>.service-now.com/sn_gaf_record_group_list.do?sysparm_query=sys_id=<group_id>
Optional: Use predictGroup() for New Records
Use predictGroup() only for new or unclustered records. It will return undefined for records already processed by the offline flow. To test prediction logic (not for already-clustered records):
var gaf = new sn_gaf.GAFPrediction();
var result = gaf.predictGroup("<new_record_sys_id>", "<groupSkillId>");
gs.info("GAF Prediction Result: " + JSON.stringify(result));
- 704 Views
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.