Rewst Workflow Documentation: Immy: NewHaloClientAlert
Section titled “Rewst Workflow Documentation: Immy: NewHaloClientAlert”Overview
Section titled “Overview”| Property | Value |
|---|---|
| Name | Immy: NewHaloClientAlert |
| ID | 019bb984-1d2a-78d9-90bf-3e8808ec205e |
| Type | Standard |
| Tags | Production |
| Task Count | 7 |
| Triggers | None configured |
Purpose
Section titled “Purpose”This workflow identifies HaloPSA clients that do not have a corresponding tenant in ImmyBot and creates a HaloPSA ticket to alert the team about these missing clients. It helps ensure synchronization between HaloPSA and ImmyBot by flagging clients that may need to be onboarded into ImmyBot.
Workflow Flow Diagram
Section titled “Workflow Flow Diagram” +------------------------+ | start_initialize | | (noop - kickoff) | +------------------------+ | +---------------+---------------+ | | v v +-------------------+ +------------------------+ | get_halo_ | | immy_bot_list_ | | new_clients | | tenants | | (HaloPSA) | | (ImmyBot) | +-------------------+ +------------------------+ | | +---------------+---------------+ | v +------------------------+ | merge_candidates | | (join=2, noop) | +------------------------+ | | Publishes: candidates, | immy_tenant_names, | debug_halo_names v +------------------------+ | compare_find_missing | | (noop) | +------------------------+ | | Publishes: missing_clients, | filtered_missing v +------------------------+ | filter_exclusions | | (noop) | +------------------------+ | +---------------+---------------+ | | v v +-------------------+ +------------------------+ | halo_create_ | | (END) | | ticket | | No missing clients | | (HaloPSA) | +------------------------+ +-------------------+Task Details
Section titled “Task Details”1. start_initialize
Section titled “1. start_initialize”| Property | Value |
|---|---|
| Action | noop (Core) |
| Description | Kicks off parallel fetches from Halo and ImmyBot |
| Join | 0 |
| Timeout | 600s |
Transitions:
- On SUCCEEDED → Triggers both
get_halo_new_clientsANDimmy_bot_list_tenants(parallel execution)
2. get_halo_new_clients
Section titled “2. get_halo_new_clients”| Property | Value |
|---|---|
| Action | List Clients (HaloPSA) |
| Description | Returns active Halo clients |
| Publish Result As | halo_clients |
| Timeout | 600s |
| Input Parameters: |
json{ "query_params": { "search": null, "toplevel_id": null, "includeactive": true, "includeinactive": false }}Transitions:
- On SUCCEEDED → merge_candidates
3. immy_bot_list_tenants
Section titled “3. immy_bot_list_tenants”| Property | Value |
|---|---|
| Action | List Tenants (ImmyBot) |
| Description | Retrieve list of existing ImmyBot tenants |
| Publish Result As | immy_tenants |
| Timeout | 600s |
Transitions:
- On SUCCEEDED → merge_candidates
4. merge_candidates
Section titled “4. merge_candidates”| Property | Value |
|---|---|
| Action | noop (Core) |
| Description | DEBUG - Wait for Halo + ImmyBot, then show what we have |
| Join | 2 (waits for both parallel tasks) |
| Timeout | 600s |
| Published Variables on Success: |
| Variable | Jinja Expression | Purpose |
|---|---|---|
| candidates | {{ CTX.halo_clients.clients | default(CTX.halo_clients | default([])) }} | Normalized list of Halo clients |
| immy_tenant_names | {{ (CTX.immy_tenants | default([])) | map(attribute='name') | map('trim') | map('lower') | reject('equalto', '') | list }} | Lowercase, trimmed list of ImmyBot tenant names |
| debug_halo_names | {{ (CTX.halo_clients.clients | default(CTX.halo_clients | default([]))) | map(attribute='name') | map('trim') | map('lower') | reject('equalto', '') | list }} | Debug list of Halo client names |
Transitions:
-
On SUCCEEDED → compare_find_missing
-
On FAILED → (End)
5. compare_find_missing
Section titled “5. compare_find_missing”| Property | Value |
|---|---|
| Action | noop (Core) |
| Description | Action for flow control, logic, or data |
| Timeout | 600s |
| Published Variables on Success: |
| Variable | Purpose |
|---|---|
| missing_clients | List of Halo client objects whose names are NOT in ImmyBot |
| filtered_missing | Comma-separated string of missing client names, excluding specific exclusions |
| Jinja Logic for missing_clients: |
jinja{% set result = [] %}{% for client in CTX.candidates %} {% if (client.name | trim | lower) not in CTX.immy_tenant_names %} {% set _ = result.append(client) %} {% endif %}{% endfor %}{{ result }}Jinja Logic for filtered_missing (with exclusions):
jinja{% set names = [] %}{% for client in CTX.missing_clients %} {% set n = client.name | lower %} {% if 'test' not in n and 'recycle for cyber assessment' not in n and 're-installed agents' not in n and 'apex namg affiliated' not in n and 'a test company' not in n and 'template' not in n and 'unknown' not in n and 'nfr-test' not in n and 'best best and krieger' not in n and 'synthekine' not in n and 'satomic' not in n and 'san diego museum of art' not in n and 'balboa park online collaborative' not in n and 'cirsium biosciences' not in n and 'reproductive sciences medical center' not in n %} {% set _ = names.append(client.name) %} {% endif %}{% endfor %}{{ names | join(', ') }}Transitions:
- On SUCCEEDED → filter_exclusions
6. filter_exclusions
Section titled “6. filter_exclusions”| Property | Value |
|---|---|
| Action | noop (Core) |
| Description | Action for flow control, logic, or data |
| Timeout | 600s |
Transitions:
-
On SUCCEEDED AND
CTX.filtered_missing | length > 0→ halo_create_ticket -
On SUCCEEDED AND
CTX.filtered_missing | length == 0→ (End - no ticket needed)
7. halo_create_ticket
Section titled “7. halo_create_ticket”| Property | Value |
|---|---|
| Action | Add or Update Tickets (HaloPSA) |
| Description | Adds or updates one or more ticket(s) |
| Timeout | 600s |
| Key Input Parameters: |
| Parameter | Value |
|---|---|
| summary | ”New Halo Clients Missing from ImmyBot” |
| details | {{ CTX.filtered_missing }} |
| site_id | 874 |
| user_id | 63 |
| agent_id | 27 |
| client_id | 12 |
| tickettype_id | 34 |
| onhold | true |
| excludefromsla | true |
| _forcereassign | true |
Transitions:
- On SUCCEEDED → (End)
Exclusion List
Section titled “Exclusion List”The workflow filters out the following client names from the alert:
-
Clients containing “test”
-
“recycle for cyber assessment”
-
“re-installed agents”
-
“apex namg affiliated”
-
“a test company”
-
“template”
-
“unknown”
-
“nfr-test”
-
“best best and krieger”
-
“synthekine”
-
“satomic”
-
“san diego museum of art”
-
“balboa park online collaborative”
-
“cirsium biosciences”
-
“reproductive sciences medical center”
Integrations Used
Section titled “Integrations Used”| Integration | Actions Used |
|---|---|
| HaloPSA | List Clients, Add or Update Tickets |
| ImmyBot | List Tenants |
| Core | noop (4 instances) |
Summary
Section titled “Summary”This workflow automates the detection of HaloPSA clients that haven’t been set up in ImmyBot by:
- Fetching data in parallel from both HaloPSA and ImmyBot
- Comparing client lists using case-insensitive name matching
- Filtering out known exclusions (test accounts, specific clients, etc.)
- Creating a HaloPSA ticket only if there are legitimate missing clients to report
Purpose
Section titled “Purpose”Ensure a path for new client tenant configuration is active and documented
Service Desk, Automation team
Responsibility
Section titled “Responsibility”Service Desk, Automation team
Definitions
Section titled “Definitions”- Example
- Example
Procedure
Section titled “Procedure”- First activity (Plan or preparation)
-
Who performs it, and what do they do?
-
When do they do it?
-
Repeat as needed
-
Include references and links to supporting documentation
- Second Activity (Do)
-
Who performs it, and what do they do?
-
When do they do it?
-
Repeat as needed
-
Include references and links to supporting documentation
- Third Activity (Check)
-
Who performs it, and what do they do?
-
When do they do it?
-
Repeat as needed
-
Include references and links to supporting documentation
Effectiveness Criteria
Section titled “Effectiveness Criteria”- What measures are used to ensure the procedure is working or is complete?
- What records are required?
- Where are the records stored?
References
Section titled “References”- EXTERNAL only – i.e., industry best practices, CIS18, this is not for cIT internal references
Process References
Section titled “Process References”- Link to process map.
Note: Please add KB relationships to core process, process. SOPs or other WIs on the right.